mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 05:26:58 +00:00
Added missing _wmktemp().
svn path=/trunk/; revision=2045
This commit is contained in:
parent
10cde64c1f
commit
aa234d8870
|
@ -69,3 +69,55 @@ char* _mktemp (char *_template)
|
|||
*_template = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
wchar_t* _wmktemp (wchar_t *_template)
|
||||
{
|
||||
static int count = 0;
|
||||
wchar_t *cp, *dp;
|
||||
int i, len, xcount, loopcnt;
|
||||
|
||||
len = wcslen (_template);
|
||||
cp = _template + len;
|
||||
|
||||
xcount = 0;
|
||||
while (xcount < 6 && cp > _template && cp[-1] == L'X')
|
||||
xcount++, cp--;
|
||||
|
||||
if (xcount) {
|
||||
dp = cp;
|
||||
while (dp > _template && dp[-1] != L'/' && dp[-1] != L'\\' && dp[-1] != L':')
|
||||
dp--;
|
||||
|
||||
/* Keep the first characters of the template, but turn the rest into
|
||||
Xs. */
|
||||
while (cp > dp + 8 - xcount) {
|
||||
*--cp = L'X';
|
||||
xcount = (xcount >= 6) ? 6 : 1 + xcount;
|
||||
}
|
||||
|
||||
/* If dots occur too early -- squash them. */
|
||||
while (dp < cp) {
|
||||
if (*dp == L'.') *dp = L'a';
|
||||
dp++;
|
||||
}
|
||||
|
||||
/* Try to add ".tmp" to the filename. Truncate unused Xs. */
|
||||
if (cp + xcount + 3 < _template + len)
|
||||
wcscpy (cp + xcount, L".tmp");
|
||||
else
|
||||
cp[xcount] = 0;
|
||||
|
||||
/* This loop can run up to 2<<(5*6) times, or about 10^9 times. */
|
||||
for (loopcnt = 0; loopcnt < (1 << (5 * xcount)); loopcnt++) {
|
||||
int c = count++;
|
||||
for (i = 0; i < xcount; i++, c >>= 5)
|
||||
cp[i] = L"abcdefghijklmnopqrstuvwxyz012345"[c & 0x1f];
|
||||
if (_waccess(_template,0) == -1)
|
||||
return _template;
|
||||
}
|
||||
}
|
||||
|
||||
/* Failure: truncate the template and return NULL. */
|
||||
*_template = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue