From 4e33db4f34dd0906718a6f261c166dd1afade07b Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Sat, 27 Apr 2002 19:15:00 +0000 Subject: [PATCH] Made GetTempFileNameA/W workable. svn path=/trunk/; revision=2878 --- reactos/lib/kernel32/file/file.c | 62 +++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/reactos/lib/kernel32/file/file.c b/reactos/lib/kernel32/file/file.c index 94d527b36ab..9e3111897fb 100644 --- a/reactos/lib/kernel32/file/file.c +++ b/reactos/lib/kernel32/file/file.c @@ -1,4 +1,4 @@ -/* $Id: file.c,v 1.30 2002/04/01 22:06:51 hbirr Exp $ +/* $Id: file.c,v 1.31 2002/04/27 19:15:00 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries @@ -636,28 +636,39 @@ GetTempFileNameA(LPCSTR lpPathName, { HANDLE hFile; UINT unique = uUnique; + UINT len; + const char *format = "%.*s\\~%.3s%4.4x.TMP"; + + DPRINT("GetTempFileNameA(lpPathName %s, lpPrefixString %.*s, " + "uUnique %x, lpTempFileName %x)\n", lpPathName, 4, + lpPrefixString, uUnique, lpTempFileName); if (lpPathName == NULL) return 0; - + + len = strlen(lpPathName); + if (len > 0 && (lpPathName[len-1] == '\\' || lpPathName[len-1] == '/')) + len--; + if (uUnique == 0) uUnique = GetCurrentTime(); - /* - * sprintf(lpTempFileName,"%s\\%c%.3s%4.4x%s", - * lpPathName,'~',lpPrefixString,uUnique,".tmp"); - */ + + sprintf(lpTempFileName,format,len,lpPathName,lpPrefixString,uUnique); + if (unique) return uUnique; while ((hFile = CreateFileA(lpTempFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_TEMPORARY, 0)) == INVALID_HANDLE_VALUE) - { - // wsprintfA(lpTempFileName,"%s\\%c%.3s%4.4x%s", - // lpPathName,'~',lpPrefixString,++uUnique,".tmp"); - } - - CloseHandle((HANDLE)hFile); + { + if (GetLastError() != ERROR_ALREADY_EXISTS) + { + return 0; + } + sprintf(lpTempFileName,format,len,lpPathName,lpPrefixString,++uUnique); + } + CloseHandle(hFile); return uUnique; } @@ -670,15 +681,24 @@ GetTempFileNameW(LPCWSTR lpPathName, { HANDLE hFile; UINT unique = uUnique; + UINT len; + const WCHAR *format = L"%.*S\\~%.3S%4.4x.TMP"; + DPRINT("GetTempFileNameW(lpPathName %S, lpPrefixString %.*S, " + "uUnique %x, lpTempFileName %x)\n", lpPathName, 4, + lpPrefixString, uUnique, lpTempFileName); + if (lpPathName == NULL) return 0; + + len = wcslen(lpPathName); + if (len > 0 && (lpPathName[len-1] == L'\\' || lpPathName[len-1] == L'/')) + len--; if (uUnique == 0) uUnique = GetCurrentTime(); - // swprintf(lpTempFileName,L"%s\\%c%.3s%4.4x%s", - // lpPathName,'~',lpPrefixString,uUnique,L".tmp"); + swprintf(lpTempFileName,format,len,lpPathName,lpPrefixString,uUnique); if (unique) return uUnique; @@ -686,12 +706,14 @@ GetTempFileNameW(LPCWSTR lpPathName, while ((hFile = CreateFileW(lpTempFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_TEMPORARY, 0)) == INVALID_HANDLE_VALUE) - { - // wsprintfW(lpTempFileName,L"%s\\%c%.3s%4.4x%s", - // lpPathName,'~',lpPrefixString,++uUnique,L".tmp"); - } - - CloseHandle((HANDLE)hFile); + { + if (GetLastError() != ERROR_ALREADY_EXISTS) + { + return 0; + } + swprintf(lpTempFileName,format,len,lpPathName,lpPrefixString,++uUnique); + } + CloseHandle(hFile); return uUnique; } -- 2.17.1