X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.main.git;a=blobdiff_plain;f=pctb%2Fconvert.c;h=1f1385057d152a1bf1e28bd7d74ae3e818d4b164;hp=366ea725191132f4fbc719196d70cec2f2a5765f;hb=059fab3ad374847da031d23d7e25ee25e888bce0;hpb=61e9f852b6991232730eee7b73798b3afcf321b2 diff --git a/pctb/convert.c b/pctb/convert.c index 366ea72..1f13850 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -36,28 +36,12 @@ const char *get_vardir(void) { return "."; } const char *get_libdir(void) { return "."; } -enum mode { - mf_findwindow= 00001, - mf_screenshot= 00010, - mf_readscreenshot= 00020, - mf_analyse= 00100, - mfm_special= 07000, - - mode_findwindow= 00001, - mode_screenshot= 00011, - mode_analyse= 00120, - mode_showcharset= 01000, - - mode_all= 00111, -}; - enum outmodekind { omk_unset, omk_upload, omk_str, omk_raw, omk_none }; static enum outmodekind o_outmode_kind; static const char *o_outmode_str= 0; -static enum mode o_mode= mode_all; static char *o_screenshot_fn; static const char *o_serv_pctb, *o_serv_dict_fetch, *o_serv_dict_submit; @@ -68,6 +52,7 @@ int o_quiet; static pid_t screenshot_compressor=-1; +enum mode o_mode= mode_all; enum flags o_flags= ff_charset_allowedit | ff_dict_fetch|ff_dict_submit|ff_dict_pirate; @@ -81,28 +66,13 @@ static void vbadusage(const char *fmt, va_list al) { } DEFINE_VWRAPPERF(static, badusage, NORET); -static void open_screenshot_file(const char *mode) { +static void open_screenshot_file(int for_write) { if (!fnmatch("*.gz",o_screenshot_fn,0)) { - int zfd, pipefds[2]; - sysassert( (zfd= open(o_screenshot_fn, O_WRONLY|O_CREAT|O_TRUNC, - 0666)) >= 0); - sysassert(! pipe(pipefds) ); - sysassert( (screenshot_compressor=fork()) != -1 ); - if (!screenshot_compressor) { - sysassert( dup2(pipefds[0],0)==0 ); - sysassert( dup2(zfd,1)==1 ); - sysassert(! close(zfd) ); - sysassert(! close(pipefds[0]) ); - sysassert(! close(pipefds[1]) ); - execlp("gzip","gzip","-1",(char*)0); - sysassert(!"execlp gzip for screenshots"); - } - sysassert(! close(zfd) ); - sysassert(! close(pipefds[0]) ); - sysassert( screenshot_file= fdopen(pipefds[1], "w") ); - + int mode= for_write ? O_WRONLY|O_CREAT|O_TRUNC : O_RDONLY; + sysassert(! gzopen(o_screenshot_fn, mode, &screenshot_file, + &screenshot_compressor, "-1") ); } else { - screenshot_file= fopen(o_screenshot_fn, mode); + screenshot_file= fopen(o_screenshot_fn, for_write ? "w" : "r"); if (!screenshot_file) fatal("could not open screenshots file `%s': %s", o_screenshot_fn, strerror(errno)); @@ -298,8 +268,7 @@ int main(int argc, char **argv) { o_serv_dict_submit, o_flags & ff_dict_submit); if (!o_screenshot_fn) - o_screenshot_fn= masprintf("%s/_pages.ppm%s", get_vardir(), - o_mode & mf_readscreenshot ? "" : ".gz"); + o_screenshot_fn= masprintf("%s/_pages.ppm.gz", get_vardir()); /* Actually do the work */ @@ -328,18 +297,21 @@ int main(int argc, char **argv) { } if (o_mode & mf_screenshot) { - open_screenshot_file("w"); + open_screenshot_file(1); if (o_flags & ff_singlepage) take_one_screenshot(); else take_screenshots(); progress_log("OK for you to move the mouse now, and you can" " use the YPP client again."); + progress("Finishing handling screenshots..."); + gzclose(&screenshot_file,&screenshot_compressor,"screenshots output"); } if (o_mode & mf_readscreenshot) { if ((o_flags & ff_upload) && !(o_flags & ff_testservers)) badusage("must not reuse screenshots for upload to live PCTB database"); - open_screenshot_file("r"); + open_screenshot_file(0); if (o_flags & ff_singlepage) read_one_screenshot(); else read_screenshots(); + gzclose(&screenshot_file,&screenshot_compressor,"screenshots input"); } if (o_mode & mf_analyse) { if (o_flags & ff_needisland) { @@ -355,10 +327,6 @@ int main(int argc, char **argv) { default: abort(); } } - if (screenshot_compressor!=-1) { - progress("Finishing compressing screenshots..."); - waitpid_check_exitstatus(screenshot_compressor,"screenshots gzip",0); - } progress_log("Finished."); return 0; } @@ -378,7 +346,7 @@ static void vprogress_core(int spinner, const char *fmt, va_list al) { int r; if (o_quiet) return; - if (!isatty(2)) return; + if (!debug_flags && !isatty(2)) return; if (last_progress_len) putc('\r',stderr);