static void rem_trailing_slash(dmtcp::string &path) { size_t i = path.size() - 1; while( (path[i] == ' ' || path[i] == '/' || path == "\\" ) && i>0 ) i--; if( i+1 < path.size() ) path = path.substr(0,i+1); }
bool isTorqueHomeFile(dmtcp::string &path) { // check if file is in home directory char *ptr; dmtcp::string hpath = ""; if ((ptr = getenv("HOME"))) { hpath = dmtcp::string() + ptr; JTRACE("Home directory:")(hpath)(path); }else{ JTRACE("Cannot determine user HOME directory!"); return false; } if( hpath.size() >= path.size() ){ JTRACE("Length of path is less than home dir"); return false; } if( path.substr(0,hpath.size()) != hpath ){ JTRACE("prefix of path is not home directory")(path)(hpath); return false; } dmtcp::string suffix1 = ".OU", suffix2 = ".ER"; if( !( (path.substr(path.size() - suffix1.size()) == suffix1) || (path.substr(path.size() - suffix2.size()) == suffix2) ) ){ JTRACE("path has no .OU or .ER suffix")(path); return false; } char jobid[256]; sprintf(jobid,"%lu",torque_jobid); dmtcp::string spool_path = hpath + "/.pbs_spool/" + jobid; dmtcp::string home_path = hpath + jobid; if( path.substr(0,spool_path.size()) == spool_path ){ JTRACE("File is located in $HOME/.pbs_spool/. It is Torque/PBS stdio file")(path); return true; } if( path.substr(0,home_path.size()) == home_path ){ JTRACE("File is located in $HOME/. It is Torque/PBS stdio file")(path); return true; } return false; }
static void clear_path(dmtcp::string &path) { size_t i; for(i=0;i<path.size();i++){ if( path[i] == '/' || path[i] == '\\' ){ size_t j = i+1; while( (path[j] == '/' || path[j] == '\\') && j < path.size() ){ j++; } if( j != i+1 ){ path.erase(i+1,j-(i+1)); } } } }
bool isTorqueFile(dmtcp::string relpath, dmtcp::string &path) { JTRACE("Start"); switch( rmgr_type ){ case Empty: probeTorque(); if( rmgr_type != torque ) return false; break; case torque: break; default: return false; } if( torque_home().size() == 0 ) return false; dmtcp::string abspath = torque_home() + "/" + relpath; JTRACE("Compare path with")(path)(abspath); if( path.size() < abspath.size() ) return false; if( path.substr(0,abspath.size()) == abspath ) return true; return false; }
bool isTorqueStderr(dmtcp::string &path) { if( !isTorqueIOFile(path) ) return false; dmtcp::string suffix = ".ER"; if( (path.substr(path.size() - suffix.size()) == suffix) ){ return true; } return false; }
int findLibTorque_maps(dmtcp::string &libpath) { // /proc/self/maps looks like: "<start addr>-<end addr> <mode> <offset> <device> <inode> <libpath> // we need to extract libpath dmtcp::Util::ProcMapsArea area; int ret = -1; // we will search for first libpath and first libname int fd = _real_open ( "/proc/self/maps", O_RDONLY); if( fd < 0 ){ JTRACE("Cannot open /proc/self/maps file"); return -1; } while( dmtcp::Util::readProcMapsLine(fd, &area) ){ libpath = area.name; JNOTE("Inspect new /proc/seft/maps line")(libpath); if( libpath.size() == 0 ){ JNOTE("anonymous region, skip"); continue; } if( libpath.find("libtorque") != dmtcp::string::npos ){ // this is library path that contains libtorque. This is what we need JTRACE("Torque PBS libpath")(libpath); ret = 0; break; }else{ JNOTE("Not a libtorque region")(libpath); } } _real_close(fd); return ret; }