static int ez_hascore(struct bnode *abnode) { char tbuffer[256]; bnode_CoreName(abnode, NULL, tbuffer); if (access(tbuffer, 0) == 0) return 1; else return 0; }
/* save core file, if any */ static void SaveCore(struct bnode *abnode, struct bnode_proc *aproc) { char tbuffer[256]; struct stat tstat; afs_int32 code = 0; char *corefile = NULL; #ifdef BOZO_SAVE_CORES struct timeval Start; struct tm *TimeFields; char FileName[256]; #endif /* Linux always appends the PID to core dumps from threaded processes, so * we have to scan the directory to find core files under another name. */ if (DoCore) { strcpy(tbuffer, DoCore); strcat(tbuffer, "/"); strcat(tbuffer, AFSDIR_CORE_FILE); } else code = stat(AFSDIR_SERVER_CORELOG_FILEPATH, &tstat); if (code) { DIR *logdir; struct dirent *file; size_t length; unsigned long pid; const char *coredir = AFSDIR_LOGS_DIR; if (DoCore) coredir = DoCore; logdir = opendir(coredir); if (logdir == NULL) return; while ((file = readdir(logdir)) != NULL) { if (strncmp(file->d_name, "core.", 5) != 0) continue; pid = atol(file->d_name + 5); if (pid == aproc->pid) { length = strlen(coredir) + strlen(file->d_name) + 2; corefile = malloc(length); if (corefile == NULL) { closedir(logdir); return; } snprintf(corefile, length, "%s/%s", coredir, file->d_name); code = 0; break; } } closedir(logdir); } else { corefile = strdup(tbuffer); } if (code) return; bnode_CoreName(abnode, aproc->coreName, tbuffer); #ifdef BOZO_SAVE_CORES FT_GetTimeOfDay(&Start, 0); TimeFields = localtime(&Start.tv_sec); sprintf(FileName, "%s.%d%02d%02d%02d%02d%02d", tbuffer, TimeFields->tm_year + 1900, TimeFields->tm_mon + 1, TimeFields->tm_mday, TimeFields->tm_hour, TimeFields->tm_min, TimeFields->tm_sec); strcpy(tbuffer, FileName); #endif code = renamefile(corefile, tbuffer); free(corefile); }