Hi Benji, > I just made it read from /proc/<pid>/cmdline to get the command name. > The patch is below. Comments are welcome. Thanks!
Thanks for the patch. I have a couple of improvement suggestions, though: > + char buf[50]; > + char *ret; > + int fd; > + int pathlen; Can you try to minimize the scope of local variables? Listing all the local variables upfront is BSD style and leads to code that is hard to understand. > + { > + size_t n = read (fd, buf, 49); > + if (n > 0) > + { > + buf[49] = '\0'; /* Guarantee null-termination */ > + pathlen = strlen (buf); If n < 49, this call to strlen may read uninitialized memory, no? Better put a NUL in buf[n], not buf[49], then. > + ret = malloc (pathlen + 1); > + if (ret) > + { > + int i; > + int pathsep = 0; > + for (i = 0; i < pathlen; i++) > + { > + if (buf[i] == '/') > + { > + pathsep = i; > + } > + } > + strcpy (ret, buf + pathsep + 1); Can't this code be simplified by calling strrchr (buf, '/') ? > + return ret; Is the size pathlen + 1 really needed for ret? It looks like you need only strlen (buf + pathsep + 1) + 1 bytes. > + } > + } > + close (fd); > + } > + return "?"; > # else Bruno