qemu_set_log_filename: filename argument may be NULL
NULL is a valid log filename used to indicate we want to use stderr but qemu_set_log_filename (which is called by bsd-user/main.c) was not handling it correctly. That also made redundant a couple of NULL checks in calling code which have been removed. Signed-off-by: Salvador Fandino <salvador@qindel.com> Message-Id: <20200123193626.19956-1-salvador@qindel.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
d4aceb2eb7
commit
e144a605a6
|
@ -229,9 +229,7 @@ void trace_init_file(const char *file)
|
||||||
/* If both the simple and the log backends are enabled, "--trace file"
|
/* If both the simple and the log backends are enabled, "--trace file"
|
||||||
* only applies to the simple backend; use "-D" for the log backend.
|
* only applies to the simple backend; use "-D" for the log backend.
|
||||||
*/
|
*/
|
||||||
if (file) {
|
qemu_set_log_filename(file, &error_fatal);
|
||||||
qemu_set_log_filename(file, &error_fatal);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
if (file) {
|
if (file) {
|
||||||
fprintf(stderr, "error: --trace file=...: "
|
fprintf(stderr, "error: --trace file=...: "
|
||||||
|
|
28
util/log.c
28
util/log.c
|
@ -148,25 +148,29 @@ void qemu_log_needs_buffers(void)
|
||||||
* Allow the user to include %d in their logfile which will be
|
* Allow the user to include %d in their logfile which will be
|
||||||
* substituted with the current PID. This is useful for debugging many
|
* substituted with the current PID. This is useful for debugging many
|
||||||
* nested linux-user tasks but will result in lots of logs.
|
* nested linux-user tasks but will result in lots of logs.
|
||||||
|
*
|
||||||
|
* filename may be NULL. In that case, log output is sent to stderr
|
||||||
*/
|
*/
|
||||||
void qemu_set_log_filename(const char *filename, Error **errp)
|
void qemu_set_log_filename(const char *filename, Error **errp)
|
||||||
{
|
{
|
||||||
char *pidstr;
|
|
||||||
g_free(logfilename);
|
g_free(logfilename);
|
||||||
logfilename = NULL;
|
logfilename = NULL;
|
||||||
|
|
||||||
pidstr = strstr(filename, "%");
|
if (filename) {
|
||||||
if (pidstr) {
|
char *pidstr = strstr(filename, "%");
|
||||||
/* We only accept one %d, no other format strings */
|
if (pidstr) {
|
||||||
if (pidstr[1] != 'd' || strchr(pidstr + 2, '%')) {
|
/* We only accept one %d, no other format strings */
|
||||||
error_setg(errp, "Bad logfile format: %s", filename);
|
if (pidstr[1] != 'd' || strchr(pidstr + 2, '%')) {
|
||||||
return;
|
error_setg(errp, "Bad logfile format: %s", filename);
|
||||||
} else {
|
return;
|
||||||
logfilename = g_strdup_printf(filename, getpid());
|
} else {
|
||||||
}
|
logfilename = g_strdup_printf(filename, getpid());
|
||||||
} else {
|
}
|
||||||
logfilename = g_strdup(filename);
|
} else {
|
||||||
|
logfilename = g_strdup(filename);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_log_close();
|
qemu_log_close();
|
||||||
qemu_set_log(qemu_loglevel);
|
qemu_set_log(qemu_loglevel);
|
||||||
}
|
}
|
||||||
|
|
5
vl.c
5
vl.c
|
@ -3903,10 +3903,7 @@ int main(int argc, char **argv, char **envp)
|
||||||
|
|
||||||
/* Open the logfile at this point and set the log mask if necessary.
|
/* Open the logfile at this point and set the log mask if necessary.
|
||||||
*/
|
*/
|
||||||
if (log_file) {
|
qemu_set_log_filename(log_file, &error_fatal);
|
||||||
qemu_set_log_filename(log_file, &error_fatal);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (log_mask) {
|
if (log_mask) {
|
||||||
int mask;
|
int mask;
|
||||||
mask = qemu_str_to_log_mask(log_mask);
|
mask = qemu_str_to_log_mask(log_mask);
|
||||||
|
|
Loading…
Reference in New Issue