diff options
Diffstat (limited to 'nsprpub/tools')
-rw-r--r-- | nsprpub/tools/Makefile.in | 8 | ||||
-rw-r--r-- | nsprpub/tools/httpget.c | 314 | ||||
-rw-r--r-- | nsprpub/tools/tail.c | 164 |
3 files changed, 246 insertions, 240 deletions
diff --git a/nsprpub/tools/Makefile.in b/nsprpub/tools/Makefile.in index 38dd1786d..29f19d94a 100644 --- a/nsprpub/tools/Makefile.in +++ b/nsprpub/tools/Makefile.in @@ -65,14 +65,6 @@ ifneq ($(OS_ARCH), WINNT) PWD = $(shell pwd) endif -ifeq ($(OS_ARCH), IRIX) -LDOPTS += -rpath $(PWD)/$(dist_libdir) -endif - -ifeq ($(OS_ARCH), OSF1) -LDOPTS += -rpath $(PWD)/$(dist_libdir) -lpthread -endif - ifeq ($(OS_ARCH), HP-UX) LDOPTS += -Wl,+s,+b,$(PWD)/$(dist_libdir) endif diff --git a/nsprpub/tools/httpget.c b/nsprpub/tools/httpget.c index 848f930fd..ed3636512 100644 --- a/nsprpub/tools/httpget.c +++ b/nsprpub/tools/httpget.c @@ -70,22 +70,22 @@ PRInt32 ReadLine(PRFileDesc *fd, char *buf, PRUint32 bufSize) loop: PR_ASSERT(inputBuf <= inputHead && inputHead <= inputTail - && inputTail <= inputBufEnd); + && inputTail <= inputBufEnd); while (lineFound == PR_FALSE && inputHead != inputTail - && dst < bufEnd - 1) { - if (*inputHead == '\r') { - crPtr = dst; - } else if (*inputHead == '\n') { - lineFound = PR_TRUE; - if (crPtr == dst - 1) { - dst--; - } - } - *(dst++) = *(inputHead++); + && dst < bufEnd - 1) { + if (*inputHead == '\r') { + crPtr = dst; + } else if (*inputHead == '\n') { + lineFound = PR_TRUE; + if (crPtr == dst - 1) { + dst--; + } + } + *(dst++) = *(inputHead++); } if (lineFound == PR_TRUE || dst == bufEnd - 1 || endOfStream == PR_TRUE) { - *dst = '\0'; - return dst - buf; + *dst = '\0'; + return dst - buf; } /* @@ -95,12 +95,12 @@ loop: nRead = PR_Read(fd, inputBuf, sizeof(inputBuf)); if (nRead == -1) { - *dst = '\0'; - return -1; + *dst = '\0'; + return -1; } else if (nRead == 0) { - endOfStream = PR_TRUE; - *dst = '\0'; - return dst - buf; + endOfStream = PR_TRUE; + *dst = '\0'; + return dst - buf; } inputHead = inputBuf; inputTail = inputBuf + nRead; @@ -112,14 +112,14 @@ PRInt32 DrainInputBuffer(char *buf, PRUint32 bufSize) PRInt32 nBytes = inputTail - inputHead; if (nBytes == 0) { - if (endOfStream) { - return -1; - } else { - return 0; - } + if (endOfStream) { + return -1; + } else { + return 0; + } } if ((PRInt32) bufSize < nBytes) { - nBytes = bufSize; + nBytes = bufSize; } memcpy(buf, inputHead, nBytes); inputHead += nBytes; @@ -132,24 +132,24 @@ PRStatus FetchFile(PRFileDesc *in, PRFileDesc *out) PRInt32 nBytes; while ((nBytes = DrainInputBuffer(buf, sizeof(buf))) > 0) { - if (PR_Write(out, buf, nBytes) != nBytes) { + if (PR_Write(out, buf, nBytes) != nBytes) { fprintf(stderr, "httpget: cannot write to file\n"); - return PR_FAILURE; - } + return PR_FAILURE; + } } if (nBytes < 0) { - /* Input buffer is empty and end of stream */ - return PR_SUCCESS; + /* Input buffer is empty and end of stream */ + return PR_SUCCESS; } while ((nBytes = PR_Read(in, buf, sizeof(buf))) > 0) { - if (PR_Write(out, buf, nBytes) != nBytes) { - fprintf(stderr, "httpget: cannot write to file\n"); - return PR_FAILURE; + if (PR_Write(out, buf, nBytes) != nBytes) { + fprintf(stderr, "httpget: cannot write to file\n"); + return PR_FAILURE; } } if (nBytes < 0) { - fprintf(stderr, "httpget: cannot read from socket\n"); - return PR_FAILURE; + fprintf(stderr, "httpget: cannot read from socket\n"); + return PR_FAILURE; } return PR_SUCCESS; } @@ -170,31 +170,31 @@ PRStatus FastFetchFile(PRFileDesc *in, PRFileDesc *out, PRUint32 size) PR_ASSERT(outfMap); addr = PR_MemMap(outfMap, LL_ZERO, size); if (addr == NULL) { - fprintf(stderr, "cannot memory-map file: (%d, %d)\n", PR_GetError(), - PR_GetOSError()); + fprintf(stderr, "cannot memory-map file: (%d, %d)\n", PR_GetError(), + PR_GetOSError()); - PR_CloseFileMap(outfMap); - return PR_FAILURE; + PR_CloseFileMap(outfMap); + return PR_FAILURE; } start = (char *) addr; rem = size; while ((nBytes = DrainInputBuffer(start, rem)) > 0) { - start += nBytes; - rem -= nBytes; + start += nBytes; + rem -= nBytes; } if (nBytes < 0) { - /* Input buffer is empty and end of stream */ - return PR_SUCCESS; + /* Input buffer is empty and end of stream */ + return PR_SUCCESS; } bytesToRead = (rem < FCOPY_BUFFER_SIZE) ? rem : FCOPY_BUFFER_SIZE; while (rem > 0 && (nBytes = PR_Read(in, start, bytesToRead)) > 0) { - start += nBytes; - rem -= nBytes; + start += nBytes; + rem -= nBytes; bytesToRead = (rem < FCOPY_BUFFER_SIZE) ? rem : FCOPY_BUFFER_SIZE; } if (nBytes < 0) { - fprintf(stderr, "httpget: cannot read from socket\n"); - return PR_FAILURE; + fprintf(stderr, "httpget: cannot read from socket\n"); + return PR_FAILURE; } rv = PR_MemUnmap(addr, size); PR_ASSERT(rv == PR_SUCCESS); @@ -204,7 +204,7 @@ PRStatus FastFetchFile(PRFileDesc *in, PRFileDesc *out, PRUint32 size) } PRStatus ParseURL(char *url, char *host, PRUint32 hostSize, - char *port, PRUint32 portSize, char *path, PRUint32 pathSize) + char *port, PRUint32 portSize, char *path, PRUint32 pathSize) { char *start, *end; char *dst; @@ -213,60 +213,60 @@ PRStatus ParseURL(char *url, char *host, PRUint32 hostSize, char *pathEnd; if (strncmp(url, "http", 4)) { - fprintf(stderr, "httpget: the protocol must be http\n"); - return PR_FAILURE; + fprintf(stderr, "httpget: the protocol must be http\n"); + return PR_FAILURE; } if (strncmp(url + 4, "://", 3) || url[7] == '\0') { - fprintf(stderr, "httpget: malformed URL: %s\n", url); - return PR_FAILURE; + fprintf(stderr, "httpget: malformed URL: %s\n", url); + return PR_FAILURE; } start = end = url + 7; dst = host; hostEnd = host + hostSize; while (*end && *end != ':' && *end != '/') { - if (dst == hostEnd - 1) { - fprintf(stderr, "httpget: host name too long\n"); - return PR_FAILURE; - } - *(dst++) = *(end++); + if (dst == hostEnd - 1) { + fprintf(stderr, "httpget: host name too long\n"); + return PR_FAILURE; + } + *(dst++) = *(end++); } *dst = '\0'; if (*end == '\0') { - PR_snprintf(port, portSize, "%d", 80); - PR_snprintf(path, pathSize, "%s", "/"); - return PR_SUCCESS; + PR_snprintf(port, portSize, "%d", 80); + PR_snprintf(path, pathSize, "%s", "/"); + return PR_SUCCESS; } if (*end == ':') { - end++; - dst = port; - portEnd = port + portSize; - while (*end && *end != '/') { - if (dst == portEnd - 1) { - fprintf(stderr, "httpget: port number too long\n"); - return PR_FAILURE; - } - *(dst++) = *(end++); + end++; + dst = port; + portEnd = port + portSize; + while (*end && *end != '/') { + if (dst == portEnd - 1) { + fprintf(stderr, "httpget: port number too long\n"); + return PR_FAILURE; + } + *(dst++) = *(end++); } - *dst = '\0'; - if (*end == '\0') { - PR_snprintf(path, pathSize, "%s", "/"); - return PR_SUCCESS; + *dst = '\0'; + if (*end == '\0') { + PR_snprintf(path, pathSize, "%s", "/"); + return PR_SUCCESS; } } else { - PR_snprintf(port, portSize, "%d", 80); + PR_snprintf(port, portSize, "%d", 80); } dst = path; pathEnd = path + pathSize; while (*end) { - if (dst == pathEnd - 1) { - fprintf(stderr, "httpget: file pathname too long\n"); - return PR_FAILURE; - } - *(dst++) = *(end++); + if (dst == pathEnd - 1) { + fprintf(stderr, "httpget: file pathname too long\n"); + return PR_FAILURE; + } + *(dst++) = *(end++); } *dst = '\0'; return PR_SUCCESS; @@ -274,8 +274,8 @@ PRStatus ParseURL(char *url, char *host, PRUint32 hostSize, void PrintUsage(void) { fprintf(stderr, "usage: httpget url\n" - " httpget -o outputfile url\n" - " httpget url -o outputfile\n"); + " httpget -o outputfile url\n" + " httpget url -o outputfile\n"); } int main(int argc, char **argv) @@ -296,44 +296,44 @@ int main(int argc, char **argv) PRUint32 fileSize; if (argc != 2 && argc != 4) { - PrintUsage(); - exit(1); + PrintUsage(); + exit(1); } if (argc == 2) { - /* - * case 1: httpget url - */ - url = argv[1]; + /* + * case 1: httpget url + */ + url = argv[1]; } else { - if (strcmp(argv[1], "-o") == 0) { - /* - * case 2: httpget -o outputfile url - */ - fileName = argv[2]; - url = argv[3]; + if (strcmp(argv[1], "-o") == 0) { + /* + * case 2: httpget -o outputfile url + */ + fileName = argv[2]; + url = argv[3]; } else { - /* - * case 3: httpget url -o outputfile - */ - url = argv[1]; - if (strcmp(argv[2], "-o") != 0) { - PrintUsage(); - exit(1); + /* + * case 3: httpget url -o outputfile + */ + url = argv[1]; + if (strcmp(argv[2], "-o") != 0) { + PrintUsage(); + exit(1); } - fileName = argv[3]; - } + fileName = argv[3]; + } } if (ParseURL(url, host, sizeof(host), port, sizeof(port), - path, sizeof(path)) == PR_FAILURE) { - exit(1); + path, sizeof(path)) == PR_FAILURE) { + exit(1); } if (PR_GetHostByName(host, buf, sizeof(buf), &hostentry) - == PR_FAILURE) { + == PR_FAILURE) { fprintf(stderr, "httpget: unknown host name: %s\n", host); - exit(1); + exit(1); } addr.inet.family = PR_AF_INET; @@ -342,92 +342,96 @@ int main(int argc, char **argv) socket = PR_NewTCPSocket(); if (socket == NULL) { - fprintf(stderr, "httpget: cannot create new tcp socket\n"); - exit(1); + fprintf(stderr, "httpget: cannot create new tcp socket\n"); + exit(1); } if (PR_Connect(socket, &addr, PR_INTERVAL_NO_TIMEOUT) == PR_FAILURE) { - fprintf(stderr, "httpget: cannot connect to http server\n"); - exitStatus = 1; - goto done; + fprintf(stderr, "httpget: cannot connect to http server\n"); + exitStatus = 1; + goto done; } if (fileName == NULL) { - file = PR_STDOUT; + file = PR_STDOUT; } else { file = PR_Open(fileName, PR_RDWR | PR_CREATE_FILE | PR_TRUNCATE, - 00777); + 00777); if (file == NULL) { - fprintf(stderr, "httpget: cannot open file %s: (%d, %d)\n", - fileName, PR_GetError(), PR_GetOSError()); - exitStatus = 1; - goto done; - } + fprintf(stderr, "httpget: cannot open file %s: (%d, %d)\n", + fileName, PR_GetError(), PR_GetOSError()); + exitStatus = 1; + goto done; + } } cmdSize = PR_snprintf(buf, sizeof(buf), "GET %s HTTP/1.0\r\n\r\n", path); PR_ASSERT(cmdSize == (PRIntn) strlen("GET HTTP/1.0\r\n\r\n") - + (PRIntn) strlen(path)); + + (PRIntn) strlen(path)); if (PR_Write(socket, buf, cmdSize) != cmdSize) { - fprintf(stderr, "httpget: cannot write to http server\n"); - exitStatus = 1; - goto done; + fprintf(stderr, "httpget: cannot write to http server\n"); + exitStatus = 1; + goto done; } if (ReadLine(socket, line, sizeof(line)) <= 0) { - fprintf(stderr, "httpget: cannot read line from http server\n"); - exitStatus = 1; - goto done; + fprintf(stderr, "httpget: cannot read line from http server\n"); + exitStatus = 1; + goto done; } /* HTTP response: 200 == OK */ if (strstr(line, "200") == NULL) { - fprintf(stderr, "httpget: %s\n", line); - exitStatus = 1; - goto done; + fprintf(stderr, "httpget: %s\n", line); + exitStatus = 1; + goto done; } while (ReadLine(socket, line, sizeof(line)) > 0) { - if (line[0] == '\n') { - endOfHeader = PR_TRUE; - break; - } - if (strncmp(line, "Content-Length", 14) == 0 - || strncmp(line, "Content-length", 14) == 0) { - char *p = line + 14; - - while (*p == ' ' || *p == '\t') { - p++; - } - if (*p != ':') { - continue; + if (line[0] == '\n') { + endOfHeader = PR_TRUE; + break; + } + if (strncmp(line, "Content-Length", 14) == 0 + || strncmp(line, "Content-length", 14) == 0) { + char *p = line + 14; + + while (*p == ' ' || *p == '\t') { + p++; + } + if (*p != ':') { + continue; } - p++; - while (*p == ' ' || *p == '\t') { - p++; - } - fileSize = 0; - while ('0' <= *p && *p <= '9') { - fileSize = 10 * fileSize + (*p - '0'); - p++; + p++; + while (*p == ' ' || *p == '\t') { + p++; } - } + fileSize = 0; + while ('0' <= *p && *p <= '9') { + fileSize = 10 * fileSize + (*p - '0'); + p++; + } + } } if (endOfHeader == PR_FALSE) { - fprintf(stderr, "httpget: cannot read line from http server\n"); - exitStatus = 1; - goto done; + fprintf(stderr, "httpget: cannot read line from http server\n"); + exitStatus = 1; + goto done; } if (fileName == NULL || fileSize == 0) { FetchFile(socket, file); } else { - FastFetchFile(socket, file, fileSize); + FastFetchFile(socket, file, fileSize); } done: - if (socket) PR_Close(socket); - if (file) PR_Close(file); + if (socket) { + PR_Close(socket); + } + if (file) { + PR_Close(file); + } PR_Cleanup(); return exitStatus; } diff --git a/nsprpub/tools/tail.c b/nsprpub/tools/tail.c index 32c93ddfd..d9b87a0e6 100644 --- a/nsprpub/tools/tail.c +++ b/nsprpub/tools/tail.c @@ -29,16 +29,16 @@ static void Help(void) PRIntn main(PRIntn argc, char **argv) { - PRIntn rv = 0; + PRIntn rv = 0; PLOptStatus os; - PRStatus status; - PRFileDesc *file; - PRFileInfo fileInfo; - PRIntervalTime dally; - char buffer[BUFFER_SIZE]; - PRBool follow = PR_FALSE; - const char *filename = NULL; - PRUint32 position = 0, seek = 0, time = 0; + PRStatus status; + PRFileDesc *file; + PRFileInfo fileInfo; + PRIntervalTime dally; + char buffer[BUFFER_SIZE]; + PRBool follow = PR_FALSE; + const char *filename = NULL; + PRUint32 position = 0, seek = 0, time = 0; PLOptState *opt = PL_CreateOptState(argc, argv, "hfn:"); out = PR_GetSpecialFD(PR_StandardOutput); @@ -46,89 +46,99 @@ PRIntn main(PRIntn argc, char **argv) while (PL_OPT_EOL != (os = PL_GetNextOpt(opt))) { - if (PL_OPT_BAD == os) continue; + if (PL_OPT_BAD == os) { + continue; + } switch (opt->option) { - case 0: /* it's the filename */ - filename = opt->value; - break; - case 'n': /* bytes before end of file */ - seek = atoi(opt->value); - break; - case 't': /* dally time */ - time = atoi(opt->value); - break; - case 'f': /* follow the end of file */ - follow = PR_TRUE; - break; - case 'h': /* user wants some guidance */ - Help(); /* so give him an earful */ - return 2; /* but not a lot else */ - break; - default: - break; + case 0: /* it's the filename */ + filename = opt->value; + break; + case 'n': /* bytes before end of file */ + seek = atoi(opt->value); + break; + case 't': /* dally time */ + time = atoi(opt->value); + break; + case 'f': /* follow the end of file */ + follow = PR_TRUE; + break; + case 'h': /* user wants some guidance */ + Help(); /* so give him an earful */ + return 2; /* but not a lot else */ + break; + default: + break; } } PL_DestroyOptState(opt); - if (0 == time) time = 1000; - dally = PR_MillisecondsToInterval(time); + if (0 == time) { + time = 1000; + } + dally = PR_MillisecondsToInterval(time); if (NULL == filename) { (void)PR_fprintf(out, "Input file not specified\n"); rv = 1; goto done; } - file = PR_Open(filename, PR_RDONLY, 0); - if (NULL == file) - { - PL_FPrintError(err, "File cannot be opened for reading"); - return 1; - } - - status = PR_GetOpenFileInfo(file, &fileInfo); - if (PR_FAILURE == status) - { - PL_FPrintError(err, "Cannot acquire status of file"); - rv = 1; goto done; - } - if (seek > 0) - { - if (seek > fileInfo.size) seek = 0; - position = PR_Seek(file, (fileInfo.size - seek), PR_SEEK_SET); - if (-1 == (PRInt32)position) - PL_FPrintError(err, "Cannot seek to starting position"); - } - - do - { - while (position < fileInfo.size) - { - PRInt32 read, bytes = fileInfo.size - position; - if (bytes > sizeof(buffer)) bytes = sizeof(buffer); - read = PR_Read(file, buffer, bytes); - if (read != bytes) - PL_FPrintError(err, "Cannot read to eof"); - position += read; - PR_Write(out, buffer, read); - } - - if (follow) - { - PR_Sleep(dally); - status = PR_GetOpenFileInfo(file, &fileInfo); - if (PR_FAILURE == status) - { - PL_FPrintError(err, "Cannot acquire status of file"); - rv = 1; goto done; - } - } - } while (follow); + file = PR_Open(filename, PR_RDONLY, 0); + if (NULL == file) + { + PL_FPrintError(err, "File cannot be opened for reading"); + return 1; + } + + status = PR_GetOpenFileInfo(file, &fileInfo); + if (PR_FAILURE == status) + { + PL_FPrintError(err, "Cannot acquire status of file"); + rv = 1; goto done; + } + if (seek > 0) + { + if (seek > fileInfo.size) { + seek = 0; + } + position = PR_Seek(file, (fileInfo.size - seek), PR_SEEK_SET); + if (-1 == (PRInt32)position) { + PL_FPrintError(err, "Cannot seek to starting position"); + } + } + + do + { + while (position < fileInfo.size) + { + PRInt32 read, bytes = fileInfo.size - position; + if (bytes > sizeof(buffer)) { + bytes = sizeof(buffer); + } + read = PR_Read(file, buffer, bytes); + if (read != bytes) { + PL_FPrintError(err, "Cannot read to eof"); + } + position += read; + PR_Write(out, buffer, read); + } + + if (follow) + { + PR_Sleep(dally); + status = PR_GetOpenFileInfo(file, &fileInfo); + if (PR_FAILURE == status) + { + PL_FPrintError(err, "Cannot acquire status of file"); + rv = 1; goto done; + } + } + } while (follow); done: - PR_Close(file); + PR_Close(file); - return rv; + return rv; } /* main */ /* tail.c */ |