rwrap: improve logging messages by including getprogname()
[resolv_wrapper.git] / src / resolv_wrapper.c
index c88893ef9ec432c3ca641efba7433ddfec321ed5..cbca24864343a679c4f85c7e0fb63a7e36ffe1c0 100644 (file)
@@ -83,6 +83,19 @@ enum rwrap_dbglvl_e {
        RWRAP_LOG_TRACE
 };
 
+#ifndef HAVE_GETPROGNAME
+static const char *getprogname(void)
+{
+#if defined(HAVE_PROGRAM_INVOCATION_SHORT_NAME)
+       return program_invocation_short_name;
+#elif defined(HAVE_GETEXECNAME)
+       return getexecname();
+#else
+       return NULL;
+#endif /* HAVE_PROGRAM_INVOCATION_SHORT_NAME */
+}
+#endif /* HAVE_GETPROGNAME */
+
 static void rwrap_log(enum rwrap_dbglvl_e dbglvl, const char *func, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
 # define RWRAP_LOG(dbglvl, ...) rwrap_log((dbglvl), __func__, __VA_ARGS__)
 
@@ -94,8 +107,8 @@ static void rwrap_log(enum rwrap_dbglvl_e dbglvl,
        va_list va;
        const char *d;
        unsigned int lvl = 0;
-       int pid = getpid();
        const char *prefix = NULL;
+       const char *progname = NULL;
 
        d = getenv("RESOLV_WRAPPER_DEBUGLEVEL");
        if (d != NULL) {
@@ -128,10 +141,16 @@ static void rwrap_log(enum rwrap_dbglvl_e dbglvl,
                        break;
        }
 
+       progname = getprogname();
+       if (progname == NULL) {
+               progname = "<unknown>";
+       }
+
        fprintf(stderr,
-               "%s(%d) - %s: %s\n",
+               "%s[%s (%u)] - %s: %s\n",
                prefix,
-               pid,
+               progname,
+               (unsigned int)getpid(),
                func,
                buffer);
 }