diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2014-10-15 17:35:39 +0000 | 
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2014-10-15 17:35:39 +0000 | 
| commit | f62b4332f57a140c7a64082fb139c06b1a71584c (patch) | |
| tree | 8df07ff17fed10701bf6420470d0c11581fdf345 /crypto/LPdir_win.c | |
| parent | 2af9154f28669943cf601ecc3c9bbbe372587787 (diff) | |
Notes
Diffstat (limited to 'crypto/LPdir_win.c')
| -rw-r--r-- | crypto/LPdir_win.c | 48 | 
1 files changed, 41 insertions, 7 deletions
| diff --git a/crypto/LPdir_win.c b/crypto/LPdir_win.c index 09b475beed17..a202bcddf509 100644 --- a/crypto/LPdir_win.c +++ b/crypto/LPdir_win.c @@ -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>   * All rights reserved. @@ -65,6 +64,16 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)    errno = 0;    if (*ctx == NULL)      { +      const char *extdir = directory; +      char *extdirbuf = NULL; +      size_t dirlen = strlen (directory); + +      if (dirlen == 0) +	{ +	  errno = ENOENT; +	  return 0; +	} +        *ctx = (LP_DIR_CTX *)malloc(sizeof(LP_DIR_CTX));        if (*ctx == NULL)  	{ @@ -73,15 +82,35 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)  	}        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))  	{  	  TCHAR *wdir = NULL;  	  /* 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 (extdirbuf != NULL) +		{ +		  free (extdirbuf); +		}  	      free(*ctx);  	      *ctx = NULL;  	      errno = ENOMEM; @@ -89,17 +118,23 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)  	    }  #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  	    for (index = 0; index < len_0; index++) -	      wdir[index] = (TCHAR)directory[index]; +	      wdir[index] = (TCHAR)extdir[index];  	  (*ctx)->handle = FindFirstFile(wdir, &(*ctx)->ctx);  	  free(wdir);  	}        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)  	{ @@ -116,7 +151,6 @@ const char *LP_find_file(LP_DIR_CTX **ctx, const char *directory)  	  return 0;  	}      } -    if (sizeof(TCHAR) != sizeof(char))      {        TCHAR *wdir = (*ctx)->ctx.cFileName; | 
