X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=utils.c;h=d202505397f330ea999d6583ef75285f6ffb1f45;hp=6b53c229190686b69bf7d8401843bcd720dd5dbf;hb=37769eb666aa614b76df9b537db35c2c70e3ac7a;hpb=486aa750a164d41905beb61afec89268e3eb7f48 diff --git a/utils.c b/utils.c index 6b53c22..d202505 100644 --- a/utils.c +++ b/utils.c @@ -18,6 +18,10 @@ #include #include +#ifdef __APPLE__ +#include +#endif + void __vlist_simple_init(struct vlist_simple_tree *tree, int offset) { @@ -168,3 +172,26 @@ crc32_file(FILE *fp) return c ^ 0xFFFFFFFF; } + +bool check_pid_path(int pid, const char *exe) +{ + int proc_exe_len; + int exe_len = strlen(exe); + +#ifdef __APPLE__ + char proc_exe_buf[PROC_PIDPATHINFO_SIZE]; + + proc_exe_len = proc_pidpath(pid, proc_exe_buf, sizeof(proc_exe_buf)); +#else + char proc_exe[32]; + char *proc_exe_buf = alloca(exe_len); + + sprintf(proc_exe, "/proc/%d/exe", pid); + proc_exe_len = readlink(proc_exe, proc_exe_buf, exe_len); +#endif + + if (proc_exe_len != exe_len) + return false; + + return !memcmp(exe, proc_exe_buf, exe_len); +}