From: Nicholas Clark Date: Wed, 20 May 2009 05:53:20 +0000 (+0200) Subject: Break out the file output code from generate_uudmap's main() to allow re-use. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=869053c868a03539389422a7a28502818825a940;p=p5sagit%2Fp5-mst-13.2.git Break out the file output code from generate_uudmap's main() to allow re-use. --- diff --git a/generate_uudmap.c b/generate_uudmap.c index 31aba75..27b142a 100644 --- a/generate_uudmap.c +++ b/generate_uudmap.c @@ -7,6 +7,37 @@ "hello world" won't port easily to it. */ #include +void output_block_to_file(const char *progname, const char *filename, + const char *block, size_t count) { + FILE *const out = fopen(filename, "w"); + + if (!out) { + fprintf(stderr, "%s: Could not open '%s': %s\n", progname, filename, + strerror(errno)); + exit(1); + } + + fputs("{\n ", out); + while (count--) { + fprintf(out, "%d", *block); + block++; + if (count) { + fputs(", ", out); + if (!(count & 15)) { + fputs("\n ", out); + } + } + } + fputs("\n}\n", out); + + if (fclose(out)) { + fprintf(stderr, "%s: Could not close '%s': %s\n", progname, filename, + strerror(errno)); + exit(1); + } +} + + static const char PL_uuemap[] = "`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"; @@ -17,20 +48,12 @@ static char PL_uudmap[256]; int main(int argc, char **argv) { size_t i; - char *p; - FILE *uudmap_out; if (argc < 2 || argv[1][0] == '\0') { fprintf(stderr, "Usage: %s uudemap.h\n", argv[0]); return 1; } - if (!(uudmap_out = fopen(argv[1], "w"))) { - fprintf(stderr, "%s: Could not open '%s': %s\n", argv[0], argv[1], - strerror(errno)); - return 1; - } - for (i = 0; i < sizeof(PL_uuemap) - 1; ++i) PL_uudmap[(U8)PL_uuemap[i]] = (char)i; /* @@ -39,27 +62,7 @@ int main(int argc, char **argv) { */ PL_uudmap[(U8)' '] = 0; - i = sizeof(PL_uudmap); - p = PL_uudmap; - - fputs("{\n ", uudmap_out); - while (i--) { - fprintf(uudmap_out, "%d", *p); - p++; - if (i) { - fputs(", ", uudmap_out); - if (!(i & 15)) { - fputs("\n ", uudmap_out); - } - } - } - fputs("\n}\n", uudmap_out); - - if (fclose(uudmap_out)) { - fprintf(stderr, "%s: Could not close '%s': %s\n", argv[0], argv[1], - strerror(errno)); - return 1; - } + output_block_to_file(argv[0], argv[1], PL_uudmap, sizeof(PL_uudmap)); return 0; }