diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2022-06-24 04:36:14 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2022-06-24 04:36:14 +0000 |
commit | 5bcb369386d617631627a4fb086ff6ab80ffa157 (patch) | |
tree | b2f6cae56a948d3897c1ed6452f870ffc8c832de /lib | |
parent | 5991a720c260e171c145d035014609f18cb2eaf3 (diff) | |
download | netpbm-mirror-5bcb369386d617631627a4fb086ff6ab80ffa157.tar.gz netpbm-mirror-5bcb369386d617631627a4fb086ff6ab80ffa157.tar.xz netpbm-mirror-5bcb369386d617631627a4fb086ff6ab80ffa157.zip |
Promote Development release to Advanced, version 10.99.00
git-svn-id: http://svn.code.sf.net/p/netpbm/code/advanced@4358 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pm.h | 10 | ||||
-rw-r--r-- | lib/pmfileio.c | 66 | ||||
-rw-r--r-- | lib/util/nstring.h | 4 | ||||
-rw-r--r-- | lib/util/shhopt.h | 35 |
4 files changed, 94 insertions, 21 deletions
diff --git a/lib/pm.h b/lib/pm.h index b3c3d202..8d5973eb 100644 --- a/lib/pm.h +++ b/lib/pm.h @@ -380,6 +380,16 @@ pm_getline(FILE * const ifP, int * const eofP, size_t * const lineLenP); +void +pm_readfile(FILE * const fileP, + const unsigned char ** const bytesP, + size_t * const szP); + +void +pm_writefile(FILE * const fileP, + const unsigned char * const bytes, + size_t const sz); + short pm_bs_short(short const s); diff --git a/lib/pmfileio.c b/lib/pmfileio.c index 1ed71f18..5d6d9bc1 100644 --- a/lib/pmfileio.c +++ b/lib/pmfileio.c @@ -939,6 +939,72 @@ pm_getline(FILE * const ifP, +void +pm_readfile(FILE * const fileP, + const unsigned char ** const bytesP, + size_t * const szP) { + + unsigned char * buf; + size_t allocatedSz; + size_t szSoFar; + size_t chunkSz; + bool eof; + + for (szSoFar = 0, buf = NULL, allocatedSz = 0, chunkSz = 4096, + eof = false; + !eof; ) { + + size_t bytesReadCt; + + if (szSoFar + chunkSz > allocatedSz) { + allocatedSz = szSoFar + chunkSz; + REALLOCARRAY(buf, allocatedSz); + + if (!buf) { + pm_error("Failed to get memory for %lu byte input buffer", + allocatedSz); + } + } + bytesReadCt = fread(buf + szSoFar, 1, chunkSz, fileP); + + if (ferror(fileP)) + pm_error("Failed to read input from file"); + + szSoFar += bytesReadCt; + + if (bytesReadCt < chunkSz) + eof = true; + else { + /* Double buffer and read size up to 1 MiB */ + if (szSoFar <= 1024*1024) + chunkSz = szSoFar; + } + } + + *bytesP = buf; + *szP = szSoFar; +} + + + +void +pm_writefile(FILE * const fileP, + const unsigned char * const bytes, + size_t const sz) { + + size_t bytesWrittenCt; + + bytesWrittenCt = fwrite(bytes, 1, sz, fileP); + + if (bytesWrittenCt != sz) { + pm_error("Failed to write %lu bytes to Standard Output. " + "%lu bytes successfully written", + sz, bytesWrittenCt); + } +} + + + union cheat { uint32_t l; short s; diff --git a/lib/util/nstring.h b/lib/util/nstring.h index 8829617d..677e24cb 100644 --- a/lib/util/nstring.h +++ b/lib/util/nstring.h @@ -30,9 +30,7 @@ extern "C" { #define STRSEQ(A, B) \ (strneq((A), (B), sizeof(A))) -#define MEMEQ(a,b,c) (memcmp(a, b, c) == 0) - -#define MEMSEQ(a,b) (memeq(a, b, sizeof(*(a))) == 0) +#define MEMSEQ(a,b) (memeq(a, b, sizeof(*(a)))) #define MEMSSET(a,b) (memset(a, b, sizeof(*(a)))) diff --git a/lib/util/shhopt.h b/lib/util/shhopt.h index b6d4cdfd..9ba072cb 100644 --- a/lib/util/shhopt.h +++ b/lib/util/shhopt.h @@ -10,14 +10,12 @@ main ( int argc, char **argv ) { /* initial values here are just to demonstrate what gets set and what doesn't by the code below. */ - int help_flag = 7; - unsigned int help_spec =7; - unsigned int height_spec =7; - unsigned int name_spec= 7; + unsigned int heightSpec =7; + unsigned int nameSpec= 7; char *name= "initial"; int height=7; - int verbose_flag=7; - int debug_flag=7; + int verboseFlag=7; + int debugFlag=7; char ** methodlist; struct optNameValue * optlist; @@ -26,12 +24,12 @@ main ( int argc, char **argv ) { optEntry * option_def; MALLOCARRAY(option_def, 100); - OPTENT3(0, "height", OPT_INT, &height, &height_spec, 0); - OPTENT3('n', "name", OPT_STRING, &name, &name_spec, 0); - OPTENT3('v', "verbose", OPT_FLAG, &verbose_flag, NULL, 0); - OPTENT3('g', "debug", OPT_FLAG, &debug_flag, NULL, 0); - OPTENT3(0, "methods", OPT_STRINGLIST, &methodlist, NULL, 0); - OPTENT3(0, "options", OPT_NAMELIST, &optlist, NULL, 0); + OPTENT3(0, "height", OPT_INT, &height, &heightSpec, 0); + OPTENT3('n', "name", OPT_STRING, &name, &nameSpec, 0); + OPTENT3('v', "verbose", OPT_FLAG, &verboseFlag, NULL, 0); + OPTENT3('g', "debug", OPT_FLAG, &debugFlag, NULL, 0); + OPTENT3(0, "methods", OPT_STRINGLIST, &methodlist, &methodSpec, 0); + OPTENT3(0, "options", OPT_NAMELIST, &optlist, &optSpec, 0); opt.opt_table = option_def; opt.short_allowed = 1; @@ -43,13 +41,13 @@ main ( int argc, char **argv ) { printf("argc=%d\n", argc); printf("height=%d\n", height); - printf("height_spec=%d\n", height_spec); + printf("height_spec=%d\n", heightSpec); printf("name='%s'\n", name); - printf("name_spec=%d\n", name_spec); - printf("verbose_flag=%d\n", verbose_flag); - printf("debug_flag=%d\n", verbose_flag); + printf("name_spec=%d\n", nameSpec); + printf("verbose_flag=%d\n", verboseFlag); + printf("debug_flag=%d\n", verboseFlag); - if (methodlist) { + if (methodSpec) { unsigned int i; printf("methods: "); while (methodlist[i]) { @@ -60,7 +58,7 @@ main ( int argc, char **argv ) { } else printf("No -options\n"); - if (optlist) { + if (optSpec) { unsigned int i; while (optlist[i].name) { printf("option '%s' = '%s'\n", optlist[i].name, optlist[i].value); @@ -84,6 +82,7 @@ Now run this program with something like you need an OPTENTINIT call to establish the empty option table: optEntry * option_def; + unsigned int option_def_index; MALLOCARRAY(option_def, 1); OPTENTINIT; |