Source code is basename = progpath; absbasedir = malloc(PATH_MAX + 1); ret = readlink("/proc/self/exe", absbasedir, PATH_MAX); if (ret < 0) { perror(__FILE__ ": readlink"); return 2; } Probably not worth much, but a call to free would shut up the static analyser.
Your static analyser is weird, because there are a few other things which aren't freed either: relbasedir, absbasedir in different code paths. However, we do this by choice. Freeing things before exiting is useless, since the OS will implicitly free everything when the program exits. That's why e.g. valgrind doesn't report these as real memory leaks (because they are still reachable). So no, this is not a memory leak. For consistency, the free(args) at the end should be removed, but that's a different issue.