add program name resolution
This commit is contained in:
parent
a62653dba9
commit
7e29400b52
|
@ -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";
|
||||
}
|
Loading…
Reference in New Issue