mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-24 09:27:31 +09:00
update NSPR to 4.24 and keep NSPR Bug 1586070 and win64 patch intact.
This commit is contained in:
parent
dd094ae552
commit
0b9855b841
487 changed files with 42933 additions and 48679 deletions
|
|
@ -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;
|
||||
}
|
||||
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");
|
||||
}
|
||||
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);
|
||||
}
|
||||
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);
|
||||
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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue