Changeset 3347 for trunk/src


Ignore:
Timestamp:
Apr 7, 2000, 9:43:46 PM (25 years ago)
Author:
sandervl
Message:

fixed GetWindows/SystemDir (NULL pointer)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/directory.cpp

    r3005 r3347  
    1 /* $Id: directory.cpp,v 1.17 2000-03-04 19:52:35 sandervl Exp $ */
     1/* $Id: directory.cpp,v 1.18 2000-04-07 19:43:46 sandervl Exp $ */
    22
    33/*
     
    220220 * Variables :
    221221 * Result    :
    222  * Remark    :
     222 * Remark    : Should return length of system dir even if lpBuffer == NULL
    223223 * Status    :
    224224 *
     
    230230{
    231231  LPSTR lpstrEnv = getenv("WIN32.DIR.SYSTEM");          /* query environment */
     232  CHAR  buf[255];
    232233
    233234  if (lpstrEnv != NULL)
    234235  {
    235     lstrcpynA(lpBuffer,                   /* copy environment variable to buffer */
    236               lpstrEnv,
    237               uSize);
    238     return (lstrlenA(lpBuffer));                /* return number of copies bytes */
     236        if(lpBuffer)
     237                lstrcpynA(lpBuffer, lpstrEnv, uSize);
     238
     239        return (lstrlenA(lpstrEnv));                /* return number of copies bytes */
    239240  }
    240241  else
     
    242243    int len;
    243244
    244     len = ODIN_PROFILE_GetOdinIniString(ODINDIRECTORIES,"SYSTEM","",lpBuffer,uSize);
     245    len = ODIN_PROFILE_GetOdinIniString(ODINDIRECTORIES,"SYSTEM","",buf,sizeof(buf));
    245246    if (len > 2) {
    246         if(lpBuffer[len-1] == '\\') {
    247                 lpBuffer[len-1] = 0;
     247        if(buf[len-1] == '\\') {
     248                buf[len-1] = 0;
    248249                len--;
    249250        }
     251        if(lpBuffer)
     252                lstrcpynA(lpBuffer, buf, uSize);
     253
    250254        return len;
    251255    }
    252256    else {//SvL: Use path of kernel32.dll instead of calling Open32 api (which returns \OS2\SYSTEM)
    253         lstrcpynA(lpBuffer, kernel32Path, uSize);
    254         len = lstrlenA(lpBuffer);;
    255         if(lpBuffer[len-1] == '\\') {
    256                 lpBuffer[len-1] = 0;
     257        lstrcpynA(buf, kernel32Path, sizeof(buf)-1);
     258        len = lstrlenA(buf);;
     259        if(buf[len-1] == '\\') {
     260                buf[len-1] = 0;
    257261                len--;
    258262        }
     263        if(lpBuffer)
     264                lstrcpynA(lpBuffer, buf, uSize);
    259265        return len;
    260266    }
     
    269275 * Variables :
    270276 * Result    :
    271  * Remark    :
     277 * Remark    : Should return length of system dir even if lpBuffer == NULL
    272278 * Status    :
    273279 *
     
    278284                                       UINT,  uSize)
    279285{
    280   char *asciibuffer = (char *)malloc(uSize+1);
     286  char *asciibuffer = NULL;
    281287  UINT  rc;
    282288
     289  if(lpBuffer)
     290        asciibuffer = (char *)malloc(uSize+1);
     291
    283292  rc = GetSystemDirectoryA(asciibuffer, uSize);
    284   if(rc) AsciiToUnicode(asciibuffer, lpBuffer);
    285   free(asciibuffer);
     293  if(rc && asciibuffer)
     294        AsciiToUnicode(asciibuffer, lpBuffer);
     295
     296  if(asciibuffer)
     297        free(asciibuffer);
    286298  return(rc);
    287299}
     
    294306 * Variables :
    295307 * Result    :
    296  * Remark    :
     308 * Remark    : Should return length of system dir even if lpBuffer == NULL
    297309 * Status    :
    298310 *
     
    304316{
    305317  LPSTR lpstrEnv = getenv("WIN32.DIR.WINDOWS");         /* query environment */
     318  CHAR  buf[255];
    306319
    307320  if (lpstrEnv != NULL)
    308321  {
    309     lstrcpynA(lpBuffer,                   /* copy environment variable to buffer */
    310               lpstrEnv,
    311               uSize);
    312     return (lstrlenA(lpBuffer));                /* return number of copies bytes */
     322        if(lpBuffer)
     323                lstrcpynA(lpBuffer, lpstrEnv, uSize);
     324
     325        return (lstrlenA(lpstrEnv));                /* return number of copies bytes */
    313326  }
    314327  else
     
    316329    int len;
    317330
    318     len = ODIN_PROFILE_GetOdinIniString(ODINDIRECTORIES,"WINDOWS","",lpBuffer,uSize);
     331    len = ODIN_PROFILE_GetOdinIniString(ODINDIRECTORIES,"WINDOWS","",buf,sizeof(buf));
    319332    if (len > 2) {
    320         if(lpBuffer[len-1] == '\\') {
    321                 lpBuffer[len-1] = 0;
     333        if(buf[len-1] == '\\') {
     334                buf[len-1] = 0;
    322335                len--;
    323336        }
     337        if(lpBuffer)
     338                lstrcpynA(lpBuffer, buf, uSize);
     339
    324340        return len;
    325341    }
    326342    else {//SvL: Use path of kernel32.dll instead of calling Open32 api (which returns \OS2\SYSTEM)
    327      CHAR buf[255];
    328343
    329344        lstrcpynA(buf, kernel32Path, sizeof(buf)-1);
     
    331346        O32_CreateDirectory(buf, NULL);
    332347
    333         lstrcpynA(lpBuffer, buf, uSize);
    334         len = lstrlenA(lpBuffer);;
    335         if(lpBuffer[len-1] == '\\') {
    336                 lpBuffer[len-1] = 0;
     348        len = lstrlenA(buf);;
     349        if(buf[len-1] == '\\') {
     350                buf[len-1] = 0;
    337351                len--;
    338352        }
     353        if(lpBuffer)
     354                lstrcpynA(lpBuffer, buf, uSize);
    339355        return len;
    340356    }
     
    349365 * Variables :
    350366 * Result    :
    351  * Remark    :
     367 * Remark    : Should return length of system dir even if lpBuffer == NULL
    352368 * Status    :
    353369 *
     
    358374                                        UINT,  uSize)
    359375{
    360   char *asciibuffer = (char *)malloc(uSize+1);
     376  char *asciibuffer = NULL;
    361377  UINT  rc;
    362378
     379  if(lpBuffer)
     380        asciibuffer = (char *)malloc(uSize+1);
     381
    363382  rc = GetWindowsDirectoryA(asciibuffer, uSize);
    364   if(rc)
    365     AsciiToUnicode(asciibuffer, lpBuffer);
    366   free(asciibuffer);
     383  if(rc && asciibuffer)
     384        AsciiToUnicode(asciibuffer, lpBuffer);
     385
     386  if(asciibuffer)
     387        free(asciibuffer);
    367388  return(rc);
    368389}
     
    390411  if(tmp[len -1] == '\\')
    391412    tmp[len -1] = 0;
     413
     414  dprintf(("RemoveDirectory %S", arg1));
     415
    392416  return O32_RemoveDirectory(tmp);
    393417}
Note: See TracChangeset for help on using the changeset viewer.