1
1

Update the utility to a kinder, gentler sort that leaves Jeff's ompi_output files alone. :-)

This commit was SVN r2636.
Этот коммит содержится в:
Ralph Castain 2004-09-13 19:02:43 +00:00
родитель af6fb8f347
Коммит 6c8654d2b8

Просмотреть файл

@ -42,18 +42,21 @@
#include "util/output.h"
#include "util/os_path.h"
#include "util/os_create_dirpath.h"
#include "runtime/runtime.h"
#include "util/session_dir.h"
int ompi_check_dir(bool create, char *directory);
static int ompi_check_dir(bool create, char *directory);
void ompi_dir_empty(char *pathname);
static void ompi_dir_empty(char *pathname);
bool ompi_no_subdirs(char *pathname);
static bool ompi_is_empty(char *pathname);
#define OMPI_DEFAULT_TMPDIR "tmp"
int ompi_check_dir(bool create, char *directory)
static int ompi_check_dir(bool create, char *directory)
{
struct stat buf;
mode_t my_mode = S_IRWXU; /* at the least, I need to be able to do anything */
@ -233,6 +236,14 @@ int ompi_session_dir(bool create, char *prfx, char *usr, char *hostid,
ompi_process_info.universe_session_dir = strdup(fulldirpath);
}
if (ompi_rte_debug_flag) {
ompi_output(0, "procdir: %s", ompi_process_info.proc_session_dir);
ompi_output(0, "jobdir: %s", ompi_process_info.job_session_dir);
ompi_output(0, "unidir: %s", ompi_process_info.universe_session_dir);
ompi_output(0, "top: %s", ompi_process_info.top_session_dir);
ompi_output(0, "tmp: %s", ompi_process_info.tmpdir_base);
}
CLEANUP:
if (tmp) {
free(tmp);
@ -260,33 +271,62 @@ int ompi_session_dir(bool create, char *prfx, char *usr, char *hostid,
int
ompi_session_dir_finalize()
{
ompi_dir_empty(ompi_process_info.proc_session_dir);
ompi_dir_empty(ompi_process_info.job_session_dir);
ompi_dir_empty(ompi_process_info.universe_session_dir);
ompi_dir_empty(ompi_process_info.top_session_dir);
if (ompi_no_subdirs(ompi_process_info.proc_session_dir)) {
ompi_dir_empty(ompi_process_info.proc_session_dir);
if (ompi_is_empty(ompi_process_info.proc_session_dir)) {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: found proc session dir empty - deleting");
}
rmdir(ompi_process_info.proc_session_dir);
} else {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: proc session dir not empty - leaving");
}
return OMPI_SUCCESS;
}
if (ompi_no_subdirs(ompi_process_info.job_session_dir)) {
ompi_dir_empty(ompi_process_info.job_session_dir);
if (ompi_is_empty(ompi_process_info.job_session_dir)) {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: found job session dir empty - deleting");
}
rmdir(ompi_process_info.job_session_dir);
} else {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: job session dir not empty - leaving");
}
return OMPI_SUCCESS;
}
if (ompi_no_subdirs(ompi_process_info.universe_session_dir)) {
ompi_dir_empty(ompi_process_info.universe_session_dir);
if (ompi_is_empty(ompi_process_info.universe_session_dir)) {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: found univ session dir empty - deleting");
}
rmdir(ompi_process_info.universe_session_dir);
} else {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: univ session dir not empty - leaving");
}
return OMPI_SUCCESS;
}
if (ompi_no_subdirs(ompi_process_info.top_session_dir)) {
ompi_dir_empty(ompi_process_info.top_session_dir);
if (ompi_is_empty(ompi_process_info.top_session_dir)) {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: found top session dir empty - deleting");
}
rmdir(ompi_process_info.top_session_dir);
} else {
if (ompi_rte_debug_flag) {
ompi_output(0, "sess_dir_finalize: top session dir not empty - leaving");
}
}
return OMPI_SUCCESS;
}
void
static void
ompi_dir_empty(char *pathname)
{
DIR *dp;
@ -302,18 +342,18 @@ ompi_dir_empty(char *pathname)
while ((ep = readdir(dp))) {
if ((0 != strcmp(ep->d_name, ".")) &&
(0 != strcmp(ep->d_name, "..")) &&
(DT_DIR != ep->d_type)) {
(DT_DIR != ep->d_type) &&
(0 != strncmp(ep->d_name, "output-", strlen("output-")))) {
filenm = ompi_os_path(false, pathname, ep->d_name, NULL);
unlink(filenm);
}
}
closedir(dp);
}
rmdir(pathname);
}
}
bool ompi_no_subdirs(char *pathname)
static bool ompi_is_empty(char *pathname)
{
DIR *dp;
struct dirent *ep;
@ -323,8 +363,7 @@ bool ompi_no_subdirs(char *pathname)
if (NULL != dp) {
while ((ep = readdir(dp))) {
if ((0 != strcmp(ep->d_name, ".")) &&
(0 != strcmp(ep->d_name, "..")) &&
(DT_DIR == ep->d_type)) {
(0 != strcmp(ep->d_name, ".."))) {
return false;
}
}