/* * This function will walk /proc and look for the application in * /proc/<PID>/comm. and /proc/<PID>/cmdline to find it's command (executable * name) and command line (if needed). * Implementors can override this function with an equivalent. */ int isAppRunning( char *pzName, char *pzCommandPattern ) { DIR* proc_fd = opendir("/proc"); if( proc_fd != NULL ) { struct dirent* procEntry; while((procEntry=readdir(proc_fd)) != NULL) { if( doesMatch( "^[0-9][0-9]*$", procEntry->d_name ) ) { char exePath[64] = {0,}; char link[256] = {0,}; char cmdlinePath[64] = {0,}; char buffer[1024] = {0,}; int len; sprintf( exePath, "/proc/%s/exe", procEntry->d_name); sprintf( cmdlinePath, "/proc/%s/cmdline", procEntry->d_name); if( (len = readlink( exePath, link, sizeof(link)-1)) != -1 ) { char executable[256] = {0,}; strcat( executable, pzName ); strcat( executable, "$" ); // TODO: Make this search for EOL to prevent false positivies if( !doesMatch( executable, link ) ) { continue; } // else //fall through, we found it } else continue; if (pzCommandPattern != NULL) { FILE *cmdline = fopen(cmdlinePath, "r"); if (!cmdline) { continue; } if (fgets(buffer, 1024, cmdline) == NULL) { fclose(cmdline); continue; } fclose(cmdline); if (!doesMatch( pzCommandPattern, buffer )) { continue; } } closedir(proc_fd); return atoi(procEntry->d_name); } } closedir(proc_fd); } else { printf("/proc failed to open\n"); } return 0; }
int FindSequenceDialog::subsearch ( const wxString &s , const wxString &sub , int start ) { int a , b ; if ( s.length() < sub.length() ) return -1 ; for ( a = start ; a < s.length() - sub.length() + 1 ; a++ ) { for ( b = 0 ; b < sub.length() ; b++ ) { if ( sub[b] == '*' ) { if ( subsearch ( s , sub.substr ( b+1 ) , a ) == -1 ) break ; b = sub.length()-1 ; } else { if ( !doesMatch ( sub[b] , s[a+b] ) ) break ; last = a+b ; } } if ( b == sub.length() ) return a ; } return -1 ; }