From 61e9f852b6991232730eee7b73798b3afcf321b2 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 9 Jul 2009 19:43:26 +0100 Subject: [PATCH] Compress the screenshots file on output --- pctb/common.h | 1 + pctb/convert.c | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/pctb/common.h b/pctb/common.h index 92ba2da..699d161 100644 --- a/pctb/common.h +++ b/pctb/common.h @@ -42,6 +42,7 @@ #include #include #include +#include #include diff --git a/pctb/convert.c b/pctb/convert.c index e6e0102..366ea72 100644 --- a/pctb/convert.c +++ b/pctb/convert.c @@ -66,6 +66,8 @@ FILE *screenshot_file; const char *o_ocean, *o_pirate; int o_quiet; +static pid_t screenshot_compressor=-1; + enum flags o_flags= ff_charset_allowedit | ff_dict_fetch|ff_dict_submit|ff_dict_pirate; @@ -80,10 +82,31 @@ static void vbadusage(const char *fmt, va_list al) { DEFINE_VWRAPPERF(static, badusage, NORET); static void open_screenshot_file(const char *mode) { - screenshot_file= fopen(o_screenshot_fn, mode); - if (!screenshot_file) - fatal("could not open screenshots file `%s': %s", - o_screenshot_fn, strerror(errno)); + 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") ); + + } else { + screenshot_file= fopen(o_screenshot_fn, mode); + if (!screenshot_file) + fatal("could not open screenshots file `%s': %s", + o_screenshot_fn, strerror(errno)); + } } static void run_analysis(void) { @@ -275,7 +298,8 @@ 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",get_vardir()); + o_screenshot_fn= masprintf("%s/_pages.ppm%s", get_vardir(), + o_mode & mf_readscreenshot ? "" : ".gz"); /* Actually do the work */ @@ -331,6 +355,10 @@ 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; } -- 2.30.2