summaryrefslogtreecommitdiff
path: root/tools/tail.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/tail.c')
-rw-r--r--tools/tail.c164
1 files changed, 87 insertions, 77 deletions
diff --git a/tools/tail.c b/tools/tail.c
index 32c93ddf..d9b87a0e 100644
--- a/tools/tail.c
+++ b/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 */