X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=pctb%2Fconvert.c;fp=pctb%2Fconvert.c;h=6bc9b2c8897d28ce7f88793a0d424ef131d3e76c;hp=8386c1609a0f68f85a0936a0df953b26c120f2c2;hb=60cd4954d1d3c11c46251f68e2d56f24661a6d67;hpb=e2487a42fd29e7a15b92ce1a5855706dba1198dc diff --git a/pctb/convert.c b/pctb/convert.c index 8386c16..6bc9b2c 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -110,12 +110,13 @@ static void run_analysis(void) { EXECLP_HELPER("commod-results-processor", o_outmode_str, (char*)0); } - waitpid_check_exitstatus(processor, "output processor/uploader"); + waitpid_check_exitstatus(processor, "output processor/uploader", 0); fclose(tf); progress_log("all complete."); } -void fetch_with_rsync(const char *stem) { +static void rsync_core(const char *stem, const char *suffix, + const char *zopt) { pid_t fetcher; sysassert( (fetcher= fork()) != -1 ); @@ -124,19 +125,23 @@ void fetch_with_rsync(const char *stem) { if (!rsync) rsync= "rsync"; const char *src= getenv("YPPSC_PCTB_DICT_UPDATE"); - char *remote= masprintf("%s/master-%s.txt", src, stem); - char *local= masprintf("_master-%s.txt", stem); + char *remote= masprintf("%s/master-%s.txt%s", src, stem, suffix); + char *local= masprintf("_master-%s.txt%s", stem, suffix); if (DEBUGP(rsync)) fprintf(stderr,"executing rsync to fetch %s to %s\n",remote,local); - execlp(rsync, "rsync", - DEBUGP(rsync) ? "-zvLt" : "-zLt", - "--",remote,local,(char*)0); + char *opts= masprintf("-Lt%s%s", + zopt, + DEBUGP(rsync) ? "v" : ""); + execlp(rsync, "rsync",opts,"--",remote,local,(char*)0); sysassert(!"exec rsync failed"); } - waitpid_check_exitstatus(fetcher, "rsync"); + waitpid_check_exitstatus(fetcher, "rsync", 0); } +void fetch_with_rsync_gz(const char *stem) { rsync_core(stem,".gz",""); } +void fetch_with_rsync(const char *stem) { rsync_core(stem,"","z"); } + static void set_server(const char *envname, const char *defprotocol, const char *defvalue, const char *defvalue_test, const char *userspecified, @@ -411,7 +416,7 @@ void sysassert_fail(const char *file, int line, const char *what) { _exit(16); } -void waitpid_check_exitstatus(pid_t pid, const char *what) { +void waitpid_check_exitstatus(pid_t pid, const char *what, int sigpipeok) { pid_t got; int st; for (;;) { @@ -426,8 +431,9 @@ void waitpid_check_exitstatus(pid_t pid, const char *what) { fatal("%s failed with nonzero exit status %d", what, WEXITSTATUS(st)); } else if (WIFSIGNALED(st)) { - fatal("%s died due to signal %s%s", what, - strsignal(WTERMSIG(st)), WCOREDUMP(st)?" (core dumped)":""); + if (!sigpipeok || WTERMSIG(st) != SIGPIPE) + fatal("%s died due to signal %s%s", what, + strsignal(WTERMSIG(st)), WCOREDUMP(st)?" (core dumped)":""); } else { fatal("%s gave strange wait status %d", what, st); }