RT3334: Fix crypto/LPdir_win.c
Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Andy Polyakov <appro@openssl.org> (cherry picked from commit 6a14fe7576e7a14a46ba14df8be8fe478536b4fb)
This commit is contained in:
parent
e517dfd3d1
commit
a49256a349
@ -1,4 +1,3 @@
|
|||||||
/* $LP: LPlib/source/LPdir_win.c,v 1.10 2004/08/26 13:36:05 _cvs_levitte Exp $ */
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2004, Richard Levitte <richard@levitte.org>
|
* Copyright (c) 2004, Richard Levitte <richard@levitte.org>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
@ -63,6 +62,10 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
|||||||
errno = 0;
|
errno = 0;
|
||||||
if (*ctx == NULL)
|
if (*ctx == NULL)
|
||||||
{
|
{
|
||||||
|
const char *extdir = directory;
|
||||||
|
char *extdirbuf = NULL;
|
||||||
|
size_t dirlen = strlen (directory);
|
||||||
|
|
||||||
*ctx = (LP_DIR_CTX *)malloc(sizeof(LP_DIR_CTX));
|
*ctx = (LP_DIR_CTX *)malloc(sizeof(LP_DIR_CTX));
|
||||||
if (*ctx == NULL)
|
if (*ctx == NULL)
|
||||||
{
|
{
|
||||||
@ -71,15 +74,35 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
|||||||
}
|
}
|
||||||
memset(*ctx, '\0', sizeof(LP_DIR_CTX));
|
memset(*ctx, '\0', sizeof(LP_DIR_CTX));
|
||||||
|
|
||||||
|
if (directory[dirlen-1] != '*')
|
||||||
|
{
|
||||||
|
extdirbuf = (char *)malloc(dirlen + 3);
|
||||||
|
if (extdirbuf == NULL)
|
||||||
|
{
|
||||||
|
free(*ctx);
|
||||||
|
*ctx = NULL;
|
||||||
|
errno = ENOMEM;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (directory[dirlen-1] != '/' && directory[dirlen-1] != '\\')
|
||||||
|
extdir = strcat(strcpy (extdirbuf,directory),"/*");
|
||||||
|
else
|
||||||
|
extdir = strcat(strcpy (extdirbuf,directory),"*");
|
||||||
|
}
|
||||||
|
|
||||||
if (sizeof(TCHAR) != sizeof(char))
|
if (sizeof(TCHAR) != sizeof(char))
|
||||||
{
|
{
|
||||||
TCHAR *wdir = NULL;
|
TCHAR *wdir = NULL;
|
||||||
/* len_0 denotes string length *with* trailing 0 */
|
/* len_0 denotes string length *with* trailing 0 */
|
||||||
size_t index = 0,len_0 = strlen(directory) + 1;
|
size_t index = 0,len_0 = strlen(extdir) + 1;
|
||||||
|
|
||||||
wdir = (TCHAR *)malloc(len_0 * sizeof(TCHAR));
|
wdir = (TCHAR *)calloc(len_0, sizeof(TCHAR));
|
||||||
if (wdir == NULL)
|
if (wdir == NULL)
|
||||||
{
|
{
|
||||||
|
if (extdirbuf != NULL)
|
||||||
|
{
|
||||||
|
free (extdirbuf);
|
||||||
|
}
|
||||||
free(*ctx);
|
free(*ctx);
|
||||||
*ctx = NULL;
|
*ctx = NULL;
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
@ -87,17 +110,23 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LP_MULTIBYTE_AVAILABLE
|
#ifdef LP_MULTIBYTE_AVAILABLE
|
||||||
if (!MultiByteToWideChar(CP_ACP, 0, directory, len_0, (WCHAR *)wdir, len_0))
|
if (!MultiByteToWideChar(CP_ACP, 0, extdir, len_0, (WCHAR *)wdir, len_0))
|
||||||
#endif
|
#endif
|
||||||
for (index = 0; index < len_0; index++)
|
for (index = 0; index < len_0; index++)
|
||||||
wdir[index] = (TCHAR)directory[index];
|
wdir[index] = (TCHAR)extdir[index];
|
||||||
|
|
||||||
(*ctx)->handle = FindFirstFile(wdir, &(*ctx)->ctx);
|
(*ctx)->handle = FindFirstFile(wdir, &(*ctx)->ctx);
|
||||||
|
|
||||||
free(wdir);
|
free(wdir);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
(*ctx)->handle = FindFirstFile((TCHAR *)directory, &(*ctx)->ctx);
|
{
|
||||||
|
(*ctx)->handle = FindFirstFile((TCHAR *)extdir, &(*ctx)->ctx);
|
||||||
|
}
|
||||||
|
if (extdirbuf != NULL)
|
||||||
|
{
|
||||||
|
free (extdirbuf);
|
||||||
|
}
|
||||||
|
|
||||||
if ((*ctx)->handle == INVALID_HANDLE_VALUE)
|
if ((*ctx)->handle == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
@ -114,7 +143,6 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sizeof(TCHAR) != sizeof(char))
|
if (sizeof(TCHAR) != sizeof(char))
|
||||||
{
|
{
|
||||||
TCHAR *wdir = (*ctx)->ctx.cFileName;
|
TCHAR *wdir = (*ctx)->ctx.cFileName;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user