mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Netware LibC has mktemp implementation
This commit is contained in:
parent
c8442648aa
commit
c49718f601
@ -1,87 +0,0 @@
|
|||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Based on standard ANSI C mktemp() for NetWare */
|
|
||||||
char* mktemp(char* templateStr)
|
|
||||||
{
|
|
||||||
char* pXs = NULL;
|
|
||||||
char numBuf[50] = {'\0'};
|
|
||||||
int count = 0;
|
|
||||||
char* pPid = NULL;
|
|
||||||
|
|
||||||
char termChar = '\0';
|
|
||||||
char letter = 'a';
|
|
||||||
char letter1 = 'a';
|
|
||||||
|
|
||||||
if (templateStr && (pXs = strstr(templateStr, "XXXXXX")))
|
|
||||||
{
|
|
||||||
/* Generate temp name */
|
|
||||||
termChar = pXs[6];
|
|
||||||
ltoa(NXThreadGetId(), numBuf, 16);
|
|
||||||
numBuf[strlen(numBuf)-1] = '\0';
|
|
||||||
|
|
||||||
/*
|
|
||||||
Beware! thread IDs are 8 hex digits on NW 4.11 and only the
|
|
||||||
lower digits seem to change, whereas on NW 5 they are in the
|
|
||||||
range of < 1000 hex or 3 hex digits in length. So the following
|
|
||||||
logic ensures we use the least significant portion of the number.\
|
|
||||||
*/
|
|
||||||
if (strlen(numBuf) > 5)
|
|
||||||
pPid = &numBuf[strlen(numBuf)-5];
|
|
||||||
else
|
|
||||||
pPid = numBuf;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Temporary files, as the name suggests, are temporarily used and then
|
|
||||||
cleaned up after usage. In the case of complex scripts, new temp files
|
|
||||||
may be created before the old ones are deleted. So, we need to have
|
|
||||||
a provision to create many temp files. It is found that provision for
|
|
||||||
26 files may not be enough in such cases. Hence the logic below.
|
|
||||||
|
|
||||||
The logic below allows 26 files (like, pla00015.tmp through plz00015.tmp)
|
|
||||||
plus 6x26=676 (like, plaa0015.tmp through plzz0015.tmp)
|
|
||||||
*/
|
|
||||||
letter = 'a';
|
|
||||||
do
|
|
||||||
{
|
|
||||||
sprintf(pXs, (char *)"%c%05.5s", letter, pPid);
|
|
||||||
pXs[6] = termChar;
|
|
||||||
|
|
||||||
if (access(templateStr, 0) != 0)
|
|
||||||
return templateStr; /* File does not exist */
|
|
||||||
|
|
||||||
letter++;
|
|
||||||
} while (letter <= 'z');
|
|
||||||
|
|
||||||
letter1 = 'a';
|
|
||||||
do
|
|
||||||
{
|
|
||||||
letter = 'a';
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
sprintf(pXs, (char *)"%c%c%04.5s", letter1, letter, pPid);
|
|
||||||
pXs[6] = termChar;
|
|
||||||
|
|
||||||
if (access(templateStr, 0) != 0)
|
|
||||||
return templateStr; /* File does not exist */
|
|
||||||
|
|
||||||
letter++;
|
|
||||||
} while (letter <= 'z');
|
|
||||||
|
|
||||||
letter1++;
|
|
||||||
} while (letter1 <= 'z');
|
|
||||||
|
|
||||||
errno = ENOENT;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
errno = EINVAL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user