Explorar o código

Removed use of tmp string functions.

woollybah %!s(int64=6) %!d(string=hai) anos
pai
achega
8c3818f256
Modificáronse 1 ficheiros con 204 adicións e 43 borrados
  1. 204 43
      stdc.mod/stdc.c

+ 204 - 43
stdc.mod/stdc.c

@@ -52,33 +52,85 @@ int getchar_(){
 }
 }
 
 
 int puts_( BBString *str ){
 int puts_( BBString *str ){
-	if( _bbusew ) return _putws( bbTmpWString(str) );
-	return puts( bbTmpCString(str) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( str );
+		int res = _putws( p );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( str );
+	int res = puts( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int putenv_( BBString *str ){
 int putenv_( BBString *str ){
-	if( _bbusew ) return _wputenv( bbTmpWString(str) );
-	return putenv( bbTmpCString(str) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( str );
+		int res = _wputenv( p );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( str );
+	int res = putenv( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 BBString *getenv_( BBString *str ){
 BBString *getenv_( BBString *str ){
-	if( _bbusew ) return bbStringFromWString( _wgetenv( bbTmpWString(str) ) );
-	return bbStringFromCString( getenv( bbTmpCString(str) ) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( str );
+		BBString * res = bbStringFromWString( _wgetenv( p ) );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( str );
+	BBString * res = bbStringFromCString( getenv( p ) );
+	bbMemFree(res);
+	return res;
 }
 }
 
 
 int fputs_( BBString *str,FILE* file ){
 int fputs_( BBString *str,FILE* file ){
-	if( _bbusew ) return fputws( bbTmpWString(str),file );
-	return fputs( bbTmpCString(str),file );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( str );
+		int res = fputws( p,file );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( str );
+	int res = fputs( p,file );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int chdir_( BBString *path ){
 int chdir_( BBString *path ){
-	if( _bbusew ) return _wchdir( bbTmpWString(path) );
-	return _chdir( bbTmpCString(path) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( path );
+		int res = _wchdir( p );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( path );
+	int res = _chdir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 FILE* fopen_( BBString *file,BBString *mode ){
 FILE* fopen_( BBString *file,BBString *mode ){
-	if( _bbusew ) return _wfopen( bbTmpWString(file),bbTmpWString(mode) );
-	return fopen( bbTmpCString(file),bbTmpCString(mode) );
+	if( _bbusew ) {
+		BBChar *f=bbStringToWString( file );
+		BBChar *m=bbStringToWString( mode );
+		FILE * res = _wfopen( f, m );
+		bbMemFree(m);
+		bbMemFree(f);
+		return res;
+	}
+	char *f=bbStringToCString( file );
+	char *m=bbStringToCString( mode );
+	FILE * res = fopen( f, m );
+	bbMemFree(m);
+	bbMemFree(f);
+	return res;
 }
 }
 
 
 BBString *getcwd_(){
 BBString *getcwd_(){
@@ -95,37 +147,85 @@ BBString *getcwd_(){
 }
 }
 
 
 int chmod_( BBString *path,int mode ){
 int chmod_( BBString *path,int mode ){
-	if( _bbusew ) return _wchmod( bbTmpWString(path),mode );
-	return _chmod( bbTmpCString(path),mode );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( path );
+		int res = _wchmod( p,mode );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( path );
+	int res = _chmod( p,mode );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int mkdir_( BBString *path,int mode ){
 int mkdir_( BBString *path,int mode ){
-	if( _bbusew ) return _wmkdir( bbTmpWString(path) );
-	return _mkdir( bbTmpCString(path) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( path );
+		int res = _wmkdir( p );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( path );
+	int res = _mkdir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int rmdir_( BBString *path ){
 int rmdir_( BBString *path ){
-	if( _bbusew ) return _wrmdir( bbTmpWString(path) );
-	return _rmdir( bbTmpCString(path) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( path );
+		int res = _wrmdir( p );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( path );
+	int res = _rmdir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int rename_( BBString *src,BBString *dst ){
 int rename_( BBString *src,BBString *dst ){
-	if( _bbusew ) return _wrename( bbTmpWString(src),bbTmpWString(dst) );
-	return rename( bbTmpCString(src),bbTmpCString(dst) );
+	if( _bbusew ) {
+		BBChar *s=bbStringToWString( src );
+		BBChar *d=bbStringToWString( dst );
+		int res = _wrename( s, d );
+		bbMemFree(d);
+		bbMemFree(s);
+		return res;
+	}
+	char *s=bbStringToCString( src );
+	char *d=bbStringToCString( dst );
+	int res = rename( s, d );
+	bbMemFree(d);
+	bbMemFree(s);
+	return res;
 }
 }
 
 
 void remove_( BBString *path ){
 void remove_( BBString *path ){
 	chmod_( path,0x1b6 );
 	chmod_( path,0x1b6 );
 	if( _bbusew ){
 	if( _bbusew ){
-		_wremove( bbTmpWString(path) );
+		BBChar *p=bbStringToWString( path );
+		_wremove( p );
+		bbMemFree(p);
 	}else{
 	}else{
-		remove( bbTmpCString(path) );
+		char *p=bbStringToCString( path );
+		remove( p );
+		bbMemFree(p);
 	}
 	}
 }
 }
 
 
 void* opendir_( BBString *path ){
 void* opendir_( BBString *path ){
-	if( _bbusew ) return _wopendir( bbTmpWString(path) );
-	return opendir( bbTmpCString(path) );
+	if( _bbusew ) {
+		BBChar *p=bbStringToWString( path );
+		void * res = _wopendir( p );
+		bbMemFree(p);
+		return res;
+	}
+	char *p=bbStringToCString( path );
+	void * res = opendir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int closedir_( void* dir ){
 int closedir_( void* dir ){
@@ -151,9 +251,19 @@ int stat_( BBString *path,int *t_mode,BBLONG *t_size,int *t_mtime,int *t_ctime )
 	}
 	}
 	
 	
 	if( _bbusew ){
 	if( _bbusew ){
-		if( _wstati64( bbTmpWString(path),&st ) ) return -1;
+		BBChar *p = bbStringToWString(path);
+		if( _wstati64( p,&st ) ) {
+			bbMemFree(p);
+			return -1;
+		}
+		bbMemFree(p);
 	}else{
 	}else{
-		if( _stati64( bbTmpCString(path),&st ) ) return -1;
+		char *p = bbStringToCString(path);
+		if( _stati64( p,&st ) ) {
+			bbMemFree(p);
+			return -1;
+		}
+		bbMemFree(p);
 	}
 	}
 
 
 	*t_mode=st.st_mode;
 	*t_mode=st.st_mode;
@@ -169,7 +279,7 @@ int system_( BBString *cmd ){
 	
 	
 	if( _bbusew ){
 	if( _bbusew ){
 		STARTUPINFOW si={sizeof(si)};
 		STARTUPINFOW si={sizeof(si)};
-		wchar_t *tmp=bbTmpWString(cmd);
+		wchar_t *tmp = bbStringToWString(cmd);
 	
 	
 		if( CreateProcessW( 0,tmp,0,0,1,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi ) ){
 		if( CreateProcessW( 0,tmp,0,0,1,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi ) ){
 			WaitForSingleObject( pi.hProcess,INFINITE );
 			WaitForSingleObject( pi.hProcess,INFINITE );
@@ -181,10 +291,11 @@ int system_( BBString *cmd ){
 		}else{
 		}else{
 			res=GetLastError();
 			res=GetLastError();
 		}
 		}
+		bbMemFree(tmp);
 		
 		
 	} else {
 	} else {
 		STARTUPINFO si={sizeof(si)};
 		STARTUPINFO si={sizeof(si)};
-		char *tmp=bbTmpCString(cmd);
+		char *tmp = bbStringToCString(cmd);
 	
 	
 		if( CreateProcessA( 0,tmp,0,0,1,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi ) ){
 		if( CreateProcessA( 0,tmp,0,0,1,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi ) ){
 			WaitForSingleObject( pi.hProcess,INFINITE );
 			WaitForSingleObject( pi.hProcess,INFINITE );
@@ -196,6 +307,7 @@ int system_( BBString *cmd ){
 		}else{
 		}else{
 			res=GetLastError();
 			res=GetLastError();
 		}
 		}
+		bbMemFree(tmp);
 	}
 	}
 	return res;
 	return res;
 }
 }
@@ -221,30 +333,48 @@ int getchar_(){
 }
 }
 
 
 int puts_( BBString *str ){
 int puts_( BBString *str ){
-	return puts( bbTmpUTF8String( str ) );
+	char *p = bbStringToUTF8String( str );
+	int res = puts( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int putenv_( BBString *str ){
 int putenv_( BBString *str ){
-	char *t=bbTmpUTF8String( str );
+	char *t=bbStringToUTF8String( str );
 	char *p=(char*)malloc( strlen(t)+1 );
 	char *p=(char*)malloc( strlen(t)+1 );
 	strcpy( p,t );
 	strcpy( p,t );
+	bbMemFree(t);
 	return putenv( p );
 	return putenv( p );
 }
 }
 
 
 BBString *getenv_( BBString *str ){
 BBString *getenv_( BBString *str ){
-	return bbStringFromUTF8String( getenv( bbTmpUTF8String(str) ) );
+	char *p = bbStringToUTF8String( str );
+	BBString * res = bbStringFromUTF8String( getenv( p ) );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 FILE* fopen_( BBString *file,BBString *mode ){
 FILE* fopen_( BBString *file,BBString *mode ){
-	return fopen( bbTmpUTF8String(file),bbTmpUTF8String(mode) );
+	char *f = bbStringToUTF8String( file );
+	char *m = bbStringToUTF8String( mode );
+	FILE * res = fopen( f, m );
+	bbMemFree(m);
+	bbMemFree(f);
+	return res;
 }
 }
 
 
 int fputs_( BBString *str,FILE* file ){
 int fputs_( BBString *str,FILE* file ){
-	return fputs( bbTmpUTF8String(str),file );
+	char *p = bbStringToUTF8String( str );
+	int res = fputs( p,file );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int chdir_( BBString *path ){
 int chdir_( BBString *path ){
-	return chdir( bbTmpUTF8String(path) );
+	char *p = bbStringToUTF8String( path );
+	int res = chdir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 BBString *getcwd_(){
 BBString *getcwd_(){
@@ -254,27 +384,47 @@ BBString *getcwd_(){
 }
 }
 
 
 int chmod_( BBString *path,int mode ){
 int chmod_( BBString *path,int mode ){
-	return chmod( bbTmpUTF8String(path),mode );
+	char *p = bbStringToUTF8String( path );
+	int res = chmod( p, mode );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int mkdir_( BBString *path,int mode ){
 int mkdir_( BBString *path,int mode ){
-	return mkdir( bbTmpUTF8String(path),mode );
+	char *p = bbStringToUTF8String( path );
+	int res = mkdir( p, mode );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int rmdir_( BBString *path ){
 int rmdir_( BBString *path ){
-	return rmdir( bbTmpUTF8String(path) );
+	char *p = bbStringToUTF8String( path );
+	int res = rmdir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int rename_( BBString *src,BBString *dst ){
 int rename_( BBString *src,BBString *dst ){
-	return rename( bbTmpUTF8String(src),bbTmpUTF8String(dst) );
+	char *s = bbStringToUTF8String( src );
+	char *d = bbStringToUTF8String( dst );
+	int res = rename( s, d );
+	bbMemFree(d);
+	bbMemFree(s);
+	return res;
 }
 }
 
 
 int remove_( BBString *path ){
 int remove_( BBString *path ){
-	return remove( bbTmpUTF8String(path) );
+	char *p = bbStringToUTF8String( path );
+	int res = remove( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 DIR* opendir_( BBString *path ){
 DIR* opendir_( BBString *path ){
-	return opendir( bbTmpUTF8String(path) );
+	char *p = bbStringToUTF8String( path );
+	DIR * res = opendir( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 BBString *readdir_( DIR* dir ){
 BBString *readdir_( DIR* dir ){
@@ -288,7 +438,12 @@ int closedir_( DIR* dir ){
 
 
 int stat_( BBString *path,int *t_mode,BBLONG *t_size,int *t_mtime,int *t_ctime ){
 int stat_( BBString *path,int *t_mode,BBLONG *t_size,int *t_mtime,int *t_ctime ){
 	struct stat st;
 	struct stat st;
-	if( stat( bbTmpUTF8String(path),&st ) ) return -1;
+	char *p = bbStringToUTF8String( path );
+	if( stat( p,&st ) ) {
+		bbMemFree(p);
+		return -1;
+	}
+	bbMemFree(p);
 	*t_mode=st.st_mode;
 	*t_mode=st.st_mode;
 	*t_size=st.st_size;
 	*t_size=st.st_size;
 	*t_mtime=st.st_mtime;
 	*t_mtime=st.st_mtime;
@@ -297,7 +452,10 @@ int stat_( BBString *path,int *t_mode,BBLONG *t_size,int *t_mtime,int *t_ctime )
 }
 }
 
 
 int system_( BBString *cmd ){
 int system_( BBString *cmd ){
-	return system( bbTmpUTF8String(cmd) );
+	char *p = bbStringToUTF8String( cmd );
+	int res = system( p );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int fseek_( FILE* stream, BBLONG offset, int origin ) {
 int fseek_( FILE* stream, BBLONG offset, int origin ) {
@@ -604,7 +762,10 @@ void *localtime_( void *ttime ){
 }
 }
 
 
 int strftime_( char *buf,int size,BBString *fmt,void *ttime ){
 int strftime_( char *buf,int size,BBString *fmt,void *ttime ){
-	return strftime( buf,size,bbTmpCString(fmt),ttime );
+	char *p = bbStringToCString( fmt );
+	int res = strftime( buf,size,p,ttime );
+	bbMemFree(p);
+	return res;
 }
 }
 
 
 int bmx_stdc_addrinfo_flags(struct addrinfo * info) {
 int bmx_stdc_addrinfo_flags(struct addrinfo * info) {