diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 123b9b112c..faf72356d7 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,9 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2001-12-11 18:57 UTC+0100 Viktor Szakats + * source/common/hbgete.c + % Made it more fail-safe and compact. 2001-12-11 15:09 UTC+0100 Maurilio Longo * source/common/hbgete.c diff --git a/harbour/source/common/hbgete.c b/harbour/source/common/hbgete.c index 9a62353c35..5fbfcc5b09 100644 --- a/harbour/source/common/hbgete.c +++ b/harbour/source/common/hbgete.c @@ -60,62 +60,55 @@ #include "hbapi.h" -char * hb_getenv( const char * name ) +char * hb_getenv( const char * szName ) { + char * pszBuffer = NULL; -#ifdef HB_OS_WIN_32 - - char * pszBuffer = ( char * ) hb_xgrab( 255 ); +#if defined(HB_OS_WIN_32) { - DWORD nSize = GetEnvironmentVariable( name, pszBuffer, 0 ); + DWORD size = GetEnvironmentVariable( szName, NULL, 0 ); - if( nSize == 0 ) - pszBuffer[ 0 ] = '\0'; - - else - GetEnvironmentVariable( name, pszBuffer, 254 ); + if( size != 0 ) + { + pszBuffer = ( char * ) hb_xgrab( size ); + GetEnvironmentVariable( szName, pszBuffer, size ); + } } - #elif defined(HB_OS_OS2) - char * pszBuffer = NULL; - { - PSZ EnvValue = ""; - ULONG ulrc = DosScanEnv(name, &EnvValue); - - if (ulrc == NO_ERROR) { - pszBuffer = ( char * ) hb_xgrab( strlen(EnvValue) + 1 ); - strcpy( pszBuffer, (char *) EnvValue); - - } else { - pszBuffer = ( char * ) hb_xgrab( 1 ); - pszBuffer[ 0 ] = '\0'; - - } - } + PSZ EnvValue = ""; + + if( DosScanEnv( szName, &EnvValue ) == NO_ERROR ) + { + pszBuffer = ( char * ) hb_xgrab( strlen( EnvValue ) + 1 ); + strcpy( pszBuffer, ( char * ) EnvValue ); + } + } #else - char * pszBuffer = NULL; - { - char * pszTemp = getenv( name ); - - if( pszTemp == NULL ) { - pszBuffer = ( char * ) hb_xgrab( 1 ); - pszBuffer[ 0 ] = '\0'; - - } else { - pszBuffer = ( char * ) hb_xgrab( strlen(pszTemp) + 1 ); - strcpy( pszBuffer, pszTemp); + char * pszTemp = getenv( szName ); + if( pszTemp != NULL ) + { + pszBuffer = ( char * ) hb_xgrab( strlen( pszTemp ) + 1 ); + strcpy( pszBuffer, pszTemp ); } } #endif + /* Return an empty string if some error occured. */ + + if( pszBuffer == NULL ) + { + pszBuffer = ( char * ) hb_xgrab( 1 ); + pszBuffer[ 0 ] = '\0'; + } + return pszBuffer; }