libc.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "libc.h"
  2. #if _WIN32
  3. #include <windows.h>
  4. #include <bbstring.h>
  5. #endif
  6. void setenv_( const char *name,const char *value,int overwrite ){
  7. #if _WIN32
  8. if( !overwrite && getenv( name ) ) return;
  9. bbString tmp=bbString( name )+BB_T( "=" )+bbString( value );
  10. putenv( tmp.c_str() );
  11. #else
  12. setenv( name,value,overwrite );
  13. #endif
  14. }
  15. int system_( const char *cmd ){
  16. #if _WIN32
  17. bbString tmp;
  18. DWORD flags=0;
  19. bool inherit=false;
  20. PROCESS_INFORMATION pi={0};
  21. STARTUPINFOA si={sizeof(si)};
  22. if( GetStdHandle( STD_OUTPUT_HANDLE ) ){
  23. tmp=BB_T( "cmd /S /C\"" )+BB_T( cmd )+BB_T( "\"" );
  24. inherit=true;
  25. si.dwFlags=STARTF_USESTDHANDLES;
  26. si.hStdInput=GetStdHandle( STD_INPUT_HANDLE );
  27. si.hStdOutput=GetStdHandle( STD_OUTPUT_HANDLE );
  28. si.hStdError=GetStdHandle( STD_ERROR_HANDLE );
  29. }else{
  30. tmp=cmd;
  31. flags=CREATE_NO_WINDOW;
  32. }
  33. if( !CreateProcessA( 0,(LPSTR)tmp.c_str(),0,0,inherit,flags,0,0,&si,&pi ) ) return -1;
  34. WaitForSingleObject( pi.hProcess,INFINITE );
  35. int res=GetExitCodeProcess( pi.hProcess,(DWORD*)&res ) ? res : -1;
  36. CloseHandle( pi.hProcess );
  37. CloseHandle( pi.hThread );
  38. return res;
  39. #else
  40. return system( cmd );
  41. #endif
  42. }
  43. int mkdir_( const char *path,int mode ){
  44. #if _WIN32
  45. return mkdir( path );
  46. #else
  47. return mkdir( path,0777 );
  48. #endif
  49. }
  50. int gettimeofday_( timeval *tv ){
  51. return gettimeofday( tv,0 );
  52. }