diff options
-rw-r--r-- | libglusterfs/src/logging.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index c7afbdd661c..e18971c26bf 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -737,7 +737,29 @@ gf_log_init (void *data, const char *file, const char *ident) } if (strcmp (file, "-") == 0) { - file = "/dev/stderr"; + int dupfd = -1; + + ctx->log.filename = gf_strdup ("/dev/stderr"); + if (!ctx->log.filename) { + fprintf (stderr, "ERROR: strdup failed\n"); + return -1; + } + + dupfd = dup (fileno (stderr)); + if (dupfd == -1) { + fprintf (stderr, "ERROR: could not dup %d (%s)\n", + fileno (stderr), strerror (errno)); + return -1; + } + + ctx->log.logfile = fdopen (dupfd, "a"); + if (!ctx->log.logfile) { + fprintf (stderr, "ERROR: could not fdopen on %d (%s)\n", + dupfd, strerror (errno)); + return -1; + } + + goto out; } ctx->log.filename = gf_strdup (file); @@ -761,7 +783,7 @@ gf_log_init (void *data, const char *file, const char *ident) file, strerror (errno)); return -1; } - +out: ctx->log.gf_log_logfile = ctx->log.logfile; return 0; |