From 5fed6605c4ca24ea3087a6731d0dd270a4172caa Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zden=C4=9Bk=20Salvet?= Date: Wed, 1 Dec 2004 17:31:33 +0000 Subject: [PATCH] Various small fixes. --- org.glite.jp.primary/src/ftp_backend.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/org.glite.jp.primary/src/ftp_backend.c b/org.glite.jp.primary/src/ftp_backend.c index cd6d53c..b598f0a 100644 --- a/org.glite.jp.primary/src/ftp_backend.c +++ b/org.glite.jp.primary/src/ftp_backend.c @@ -223,6 +223,7 @@ int glite_jppsbe_register_job( FILE *regfile = NULL; struct timeval reg_tv; long reg_tv_trunc; + struct stat statbuf; glite_jp_clear_error(ctx); memset(&err,0,sizeof err); @@ -246,7 +247,8 @@ int glite_jppsbe_register_job( return glite_jp_stack_error(ctx,&err); } - if (mkdirpath(int_dir, strlen(config->internal_path)) < 0) { + if (mkdirpath(int_dir, strlen(config->internal_path)) < 0 && + errno != EEXIST) { free(int_dir); err.code = errno; err.desc = "Cannot mkdir jobs's reg directory"; @@ -256,11 +258,22 @@ int glite_jppsbe_register_job( if (asprintf(&int_fname, "%s/regs/%s/%s.info", config->internal_path, ju_path, ju) == -1) { - free(int_dir); err.code = ENOMEM; return glite_jp_stack_error(ctx,&err); } + if (stat(int_fname, &statbuf) < 0) { + if (errno != ENOENT) { + err.code = errno; + err.desc = "Cannot stat jobs's reg info file"; + goto error_out; + } + } else { + err.code = EEXIST; + err.desc = "Job already registered"; + goto error_out; + } + regfile = fopen(int_fname, "w"); if (regfile == NULL) { err.code = errno; @@ -293,7 +306,8 @@ int glite_jppsbe_register_job( err.code = ENOMEM; goto error_out; } - if (mkdirpath(data_dir, strlen(config->internal_path)) < 0) { + if (mkdirpath(data_dir, strlen(config->internal_path)) < 0 && + errno != EEXIST) { err.code = errno; err.desc = "Cannot mkdir jobs's data directory"; goto error_out; @@ -306,10 +320,7 @@ int glite_jppsbe_register_job( } error_out: - free(int_dir); - if (err.code && int_fname) unlink(int_fname); free(int_fname); - if (err.code && data_fname) unlink(data_fname); free(data_fname); if (err.code && data_dir) rmdir(data_dir); free(data_dir); -- 1.8.2.3