Exemplo n.º 1
0
char * hb_getenv( const char * szName )
{
   char * pszBuffer = NULL;

#if defined( HB_OS_WIN )
   {
      LPTSTR lpName = HB_CHARDUP( szName );
      DWORD size = GetEnvironmentVariable( lpName, NULL, 0 );

      if( size != 0 )
      {
         LPTSTR lpBuffer = ( LPTSTR ) hb_xgrab( size * sizeof( TCHAR ) );
         GetEnvironmentVariable( lpName, lpBuffer, size );
         pszBuffer = HB_OSSTRDUP( lpBuffer );
         hb_xfree( lpBuffer );
      }
      hb_xfree( lpName );
   }
#elif defined( HB_OS_OS2 )
   {
      PSZ EnvValue = ( PSZ ) "";
      char * pszNameFree = NULL;

      szName = hb_osEncodeCP( szName, &pszNameFree, NULL );
      if( DosScanEnv( ( PCSZ ) szName, &EnvValue ) == NO_ERROR )
         pszBuffer = hb_osStrDecode( ( char * ) EnvValue );
      if( pszNameFree )
         hb_xfree( pszNameFree );
   }
#else
   {
      char * pszTemp, * pszNameFree = NULL;

      szName = hb_osEncodeCP( szName, &pszNameFree, NULL );
      pszTemp = getenv( szName );
      if( pszNameFree )
         hb_xfree( pszNameFree );

      if( pszTemp != NULL )
         pszBuffer = hb_osStrDecode( pszTemp );
   }
#endif

   return pszBuffer;
}
Exemplo n.º 2
0
static char * hb_buildArgsOS2( const char *pszFileName, APIRET * ret )
{
   PHB_FNAME pFilepath;
   char szFileBuf[ HB_PATH_MAX ];
   char * pArgs = NULL, * pszFree = NULL, cQuote = 0, c;
   HB_SIZE nLen = 0, nLen2;
   void * pMem;

   while( HB_ISSPACE( *pszFileName ) )
      ++pszFileName;

   pszFileName = hb_osEncodeCP( pszFileName, &pszFree, NULL );

   while( ( c = *pszFileName ) != '\0' )
   {
      ++pszFileName;
      if( c == '"' )
         cQuote = cQuote ? 0 : c;
      else
      {
         if( cQuote == 0 && HB_ISSPACE( c ) )
            break;
         if( nLen < sizeof( szFileBuf ) - 1 )
            szFileBuf[ nLen++ ] = c;
      }
   }
   szFileBuf[ nLen ] = '\0';

   while( HB_ISSPACE( *pszFileName ) )
      ++pszFileName;
   nLen2 = strlen( pszFileName );

   pFilepath = hb_fsFNameSplit( szFileBuf );
   if( pFilepath->szPath && ! pFilepath->szExtension )
   {
      pFilepath->szExtension = ".com";
      if( ! hb_fsFileExists( hb_fsFNameMerge( szFileBuf, pFilepath ) ) )
      {
         pFilepath->szExtension = ".exe";
         if( ! hb_fsFileExists( hb_fsFNameMerge( szFileBuf, pFilepath ) ) )
         {
            pFilepath->szExtension = NULL;
            hb_fsFNameMerge( szFileBuf, pFilepath );
         }
      }
      nLen = strlen( szFileBuf );
   }
   hb_xfree( pFilepath );

   *ret = DosAllocMem( &pMem, nLen + nLen2 + 3,
                       PAG_COMMIT | PAG_READ | PAG_WRITE | OBJ_TILE );
   if( *ret == NO_ERROR )
   {
      pArgs = ( char * ) pMem;
      memcpy( pArgs, szFileBuf, nLen + 1 );
      memcpy( pArgs + nLen + 1, pszFileName, nLen2 + 1 );
      pArgs[ nLen + nLen2 + 2 ] = '\0';
   }

   if( pszFree )
      hb_xfree( pszFree );

   return pArgs;
}
Exemplo n.º 3
0
/* set current process environment variable, if szValue is NULL delete
 * environment variable
 */
HB_BOOL hb_setenv( const char * szName, const char * szValue )
{
   if( szName == NULL )
      return HB_FALSE;

#if defined( HB_OS_WIN )
   {
      LPTSTR lpName = HB_CHARDUP( szName );
      LPTSTR lpValue = szValue ? HB_CHARDUP( szValue ) : NULL;
      HB_BOOL fResult = ( SetEnvironmentVariable( lpName, lpValue ) != 0 );
      if( lpValue )
         hb_xfree( lpValue );
      hb_xfree( lpName );
      return fResult;
   }
#elif defined( _BSD_SOURCE ) || _POSIX_C_SOURCE >= 200112L || \
   _XOPEN_SOURCE >= 600 || \
   defined( __WATCOMC__ ) || defined( __DJGPP__ ) || \
   defined( HB_OS_SUNOS ) || defined( HB_OS_BSD ) || \
   defined( HB_OS_DARWIN ) || defined( HB_OS_BEOS ) || \
   defined( HB_OS_QNX ) || defined( HB_OS_VXWORKS ) || \
   defined( HB_OS_CYGWIN ) || defined( HB_OS_MINIX ) || \
   defined( HB_OS_ANDROID )
   {
      HB_BOOL fResult;
      char * pszNameFree = NULL, * pszValueFree = NULL;

      szName = hb_osEncodeCP( szName, &pszNameFree, NULL );
      if( szValue )
      {
         szValue = hb_osEncodeCP( szValue, &pszValueFree, NULL );
         fResult = setenv( szName, szValue, 1 ) == 0;
         if( pszValueFree )
            hb_xfree( pszValueFree );
      }
      else
      {
#  if ( defined( __DJGPP__ ) && \
        ( __DJGPP__ < 2 || ( __DJGPP__ == 2 && __DJGPP_MINOR__ < 4 ) ) ) || \
      defined( __WATCOMC__ )
         szValue = getenv( szName );
         if( szValue && *szValue )
            fResult = setenv( szName, "", 1 ) == 0;
         else
            fResult = HB_TRUE;
#  elif defined( __OpenBSD__ ) || defined( HB_OS_QNX ) || \
        ( defined( __FreeBSD_version ) && __FreeBSD_version < 700050 ) || \
        ( defined( HB_OS_DARWIN ) && !( defined( __DARWIN_UNIX03 ) && __DARWIN_UNIX03 ) )
         unsetenv( szName );
         fResult = HB_TRUE;
#  else
         fResult = unsetenv( szName ) == 0;
#  endif
      }

      if( pszNameFree )
         hb_xfree( pszNameFree );

      return fResult;
   }
#elif defined( _HB_NO_SETENV_ )

   HB_SYMBOL_UNUSED( szValue );

   return HB_FALSE;

#else
   /* please add support for other C compilers
    * if such functionality does not exists for given platform/C compiler
    * then please simply added C compiler with necessary OS/version checking
    * to the above #elif ... to eliminate warning [druzus]
    */

   int iTODO;

   HB_SYMBOL_UNUSED( szValue );

   return HB_FALSE;

#endif
}
Exemplo n.º 4
0
HB_BOOL hb_getenv_buffer( const char * szName, char * szBuffer, int nSize )
{
   HB_BOOL fRetVal;

#if defined( HB_OS_WIN )
   {
      LPTSTR lpName = HB_CHARDUP( szName ), lpBuffer;

      if( szBuffer != NULL || nSize > 0 )
         lpBuffer = ( LPTSTR ) hb_xgrab( nSize * sizeof( TCHAR ) );
      else
         lpBuffer = NULL;

      fRetVal = GetEnvironmentVariable( lpName, lpBuffer, nSize ) != 0;

      if( lpBuffer )
      {
         if( fRetVal )
         {
            lpBuffer[ nSize - 1 ] = TEXT( '\0' );
            HB_OSSTRDUP2( lpBuffer, szBuffer, nSize - 1 );
         }
         hb_xfree( lpBuffer );
      }
      hb_xfree( lpName );
   }
#elif defined( HB_OS_OS2 )
   {
      PSZ EnvValue = ( PSZ ) "";
      char * pszNameFree = NULL;

      szName = hb_osEncodeCP( szName, &pszNameFree, NULL );
      fRetVal = DosScanEnv( ( PCSZ ) szName, &EnvValue ) == NO_ERROR;
      if( pszNameFree )
         hb_xfree( pszNameFree );

      if( fRetVal && szBuffer != NULL && nSize != 0 )
         hb_osStrDecode2( ( char * ) EnvValue, szBuffer, nSize - 1 );
   }
#else
   {
      char * pszTemp, * pszNameFree = NULL;

      szName = hb_osEncodeCP( szName, &pszNameFree, NULL );
      pszTemp = getenv( szName );
      if( pszNameFree )
         hb_xfree( pszNameFree );

      if( pszTemp != NULL )
      {
         fRetVal = HB_TRUE;
         if( szBuffer != NULL && nSize != 0 )
            hb_osStrDecode2( pszTemp, szBuffer, nSize - 1 );
      }
      else
         fRetVal = HB_FALSE;
   }
#endif

   if( ! fRetVal && szBuffer != NULL && nSize != 0 )
      szBuffer[ 0 ] = '\0';

   return fRetVal;
}