6f949e90b1ba3de976455fbcf9da21897761d134 markd Fri Oct 29 16:11:58 2021 -0700 add timeout option to pipeline to allow kill long-running pipelines, especially ones run from CGIs diff --git src/lib/md5.c src/lib/md5.c index e16fff5..8cef523 100644 --- src/lib/md5.c +++ src/lib/md5.c @@ -1,86 +1,86 @@ /* md5 calculating functions and the like. Just wrappers for md5sum program */ #include "common.h" #include "hex.h" #include "linefile.h" #include "hash.h" #include "pipeline.h" #include "md5.h" char *md5ToHex(unsigned char md5[16]) /* Convert binary representation of md5 to hex string. Do a freeMem on result when done. */ { char hex[33]; char *h; int i; for (i = 0, h=hex; i < 16; ++i, h += 2) byteToHex( md5[i], h); hex[32] = 0; return cloneString(hex); } void md5HexToMd5(char hexIn[32], unsigned char md5Out[16]) /* Convert hexadecimal representation of md5 back to binary */ { char *pt = hexIn; int i; for (i=0; i<16; ++i) { md5Out[i] = hexToByte(pt); pt += 2; } } char *md5HexForFile(char *fileName) /* Calculate md5 on file and return in hex format. Use freeMem on result when done. */ { /* Calculate md5 using pipeline to unix utility. */ char *cmd[] = {"md5sum", NULL}; -struct pipeline *pl = pipelineOpen1(cmd, pipelineRead, fileName, NULL); +struct pipeline *pl = pipelineOpen1(cmd, pipelineRead, fileName, NULL, 0); FILE *f = pipelineFile(pl); char hex[33]; mustRead(f, hex, 32); hex[32] = 0; pipelineClose(&pl); return cloneString(hex); } char *md5HexForBuf(char *buf, size_t bufSize) /* Return md5 sum of buffer. Use freeMem on result when done. */ { /* Calculate md5 using pipeline to unix utility. */ char *cmd[] = {"md5sum", NULL}; -struct pipeline *pl = pipelineOpenMem1(cmd, pipelineRead, buf, bufSize, fileno(stderr)); +struct pipeline *pl = pipelineOpenMem1(cmd, pipelineRead, buf, bufSize, fileno(stderr), 0); FILE *f = pipelineFile(pl); char hex[33]; mustRead(f, hex, 32); hex[32] = 0; pipelineClose(&pl); return cloneString(hex); } char *md5HexForString(char *string) /* Return md5 sum of zero-terminated string. Use freeMem on result when done. */ { return md5HexForBuf(string, strlen(string)); } void md5ForFile(char *fileName, unsigned char md5[16]) /* Return MD5 sum for file in md5 in binary rather than hex format. */ { char *hex = md5HexForFile(fileName); md5HexToMd5(hex, md5); freeMem(hex); } struct hash *md5FileHash(char *fileName) /* Read md5sum file and return a hash keyed by file names with md5sum values. */ { struct lineFile *lf = lineFileOpen(fileName, TRUE); char *row[2]; struct hash *hash = hashNew(0); while (lineFileRow(lf, row)) hashAdd(hash, row[1], cloneString(row[0])); lineFileClose(&lf); return hash; }