add program name resolution

This commit is contained in:
Patrick Lipka 2025-08-18 17:30:05 +02:00
parent a62653dba9
commit 7e29400b52
1 changed files with 46 additions and 0 deletions

46
src/rvprof_utils.c Normal file
View File

@ -0,0 +1,46 @@
#include "rvprof_internal.h"
char* rvprof_utils_get_program_name(void){
static char resolved_name[256];
char link_path[32];
ssize_t len;
// option 1: try /proc/self/exe (Linux only)
snprintf(link_path, sizeof(link_path), "/proc/self/exe");
len = readlink(link_path, resolved_name, sizeof(resolved_name) - 1);
if (len > 0) {
resolved_name[len] = '\0';
// Extract just the filename from full path
char* basename = strrchr(resolved_name, '/');
if (basename) {
return basename + 1; // Skip the '/'
}
return resolved_name;
}
// option 2: try /proc/self/cmdline (fallback)
FILE* cmdline = fopen("/proc/self/cmdline", "r");
if (cmdline) {
if (fgets(resolved_name, sizeof(resolved_name), cmdline)) {
fclose(cmdline);
char* basename = strrchr(resolved_name, '/');
if (basename) {
return basename + 1;
}
return resolved_name;
}
fclose(cmdline);
}
// option 3: use provided program name if available
if (g_rvprof.config.program_name) {
char* basename = strrchr(g_rvprof.config.program_name, '/');
if (basename) {
return basename + 1;
}
return g_rvprof.config.program_name;
}
// option 4: fallback
return "unknown_program";
}