uint8_t stream_read_uint8( stream_t* stream ) { uint8_t value = 0; if( stream_is_binary( stream ) ) stream_read( stream, &value, 1 ); else { char* str = stream_read_string( stream ); value = (uint8_t)string_to_uint( str, false ); string_deallocate( str ); } return value; }
float64_t stream_read_float64( stream_t* stream ) { float64_t value = 0; if( stream_is_binary( stream ) ) { stream_read( stream, &value, 8 ); if( stream && stream->swap ) byteorder_swap( &value, 8 ); } else { char* str = stream_read_string( stream ); value = string_to_real( str ); string_deallocate( str ); } return value; }
uint64_t stream_read_uint64( stream_t* stream ) { uint64_t value = 0; if( stream_is_binary( stream ) ) { stream_read( stream, &value, 8 ); if( stream && stream->swap ) value = byteorder_swap64( value ); } else { char* str = stream_read_string( stream ); value = string_to_uint64( str, false ); string_deallocate( str ); } return value; }
int32_t stream_read_int32( stream_t* stream ) { int32_t value = 0; if( stream_is_binary( stream ) ) { stream_read( stream, &value, 4 ); if( stream && stream->swap ) byteorder_swap( &value, 4 ); } else { char* str = stream_read_string( stream ); value = (int32_t)string_to_int( str ); string_deallocate( str ); } return value; }
bool stream_read_bool( stream_t* stream ) { bool value = false; FOUNDATION_ASSERT( stream ); if( stream_is_binary( stream ) ) { char c = 0; stream_read( stream, &c, 1 ); value = ( c ? true : false ); } else { char* str = stream_read_string( stream ); value = !( !str || !string_length( str ) || string_equal( str, "false" ) || ( string_equal( str, "0" ) ) ); string_deallocate( str ); } return value; }
// ### fasl-read-string stream character => value Value SYS_fasl_read_string(Value streamarg, Value character) { return stream_read_string(streamarg, char_value(character), FASL_READTABLE); }
int _environment_initialize( const application_t application ) { #if FOUNDATION_PLATFORM_WINDOWS int ia; int num_args = 0; DWORD ret = 0; wchar_t module_filename[FOUNDATION_MAX_PATHLEN]; LPWSTR* arg_list = CommandLineToArgvW( GetCommandLineW(), &num_args ); if( !arg_list ) return -1; for( ia = 0; ia < num_args; ++ia ) array_push( _environment_argv, string_allocate_from_wstring( arg_list[ia], 0 ) ); LocalFree( arg_list ); if( GetModuleFileNameW( 0, module_filename, FOUNDATION_MAX_PATHLEN ) ) { char* exe_path = string_allocate_from_wstring( module_filename, 0 ); char* dir_path = path_make_absolute( exe_path ); _environment_set_executable_paths( dir_path ); string_deallocate( dir_path ); string_deallocate( exe_path ); } else { log_errorf( ERROR_SYSTEM_CALL_FAIL, "Unable to get module filename" ); return -1; } #elif FOUNDATION_PLATFORM_APPLE int ia; int* argc_ptr = _NSGetArgc(); char*** argv_ptr = _NSGetArgv(); for( ia = 0; ia < *argc_ptr; ++ia ) array_push( _environment_argv, string_clone( (*argv_ptr)[ia] ) ); FOUNDATION_ASSERT( *argc_ptr > 0 ); char* exe_path = path_make_absolute( (*argv_ptr)[0] ); _environment_set_executable_paths( exe_path ); string_deallocate( exe_path ); #elif FOUNDATION_PLATFORM_POSIX stream_t* cmdline = fs_open_file( "/proc/self/cmdline", STREAM_IN | STREAM_BINARY ); if( !cmdline ) { log_errorf( ERROR_SYSTEM_CALL_FAIL, "Unable to read /proc/self/cmdline" ); return -1; } while( true ) { char* arg = stream_read_string( cmdline ); if( !string_length( arg ) ) { string_deallocate( arg ); break; } array_push( _environment_argv, arg ); } char exelink[FOUNDATION_MAX_PATHLEN] = {0}; if( readlink( "/proc/self/exe", exelink, FOUNDATION_MAX_PATHLEN ) < 0 ) { log_errorf( ERROR_SYSTEM_CALL_FAIL, "Unable to read /proc/self/exe link" ); return -1; } char* exe_path; char* dir_path; exe_path = path_clean( string_clone( exelink ), path_is_absolute( exelink ) ); dir_path = path_make_absolute( exe_path ); _environment_set_executable_paths( dir_path ); string_deallocate( dir_path ); string_deallocate( exe_path ); #else # error Not implemented /*if( array_size( _environment_argv ) > 0 ) { char* exe_path = path_clean( string_clone( _environment_argv[0] ), path_is_absolute( _environment_argv[0] ) ); char* dir_path = path_make_absolute( exe_path ); _environment_set_executable_paths( dir_path ); string_deallocate( dir_path ); string_deallocate( exe_path ); } else if( !string_length( _environment_executable_dir ) ) string_copy( _environment_executable_dir, environment_current_working_directory(), FOUNDATION_MAX_PATHLEN ); */ #endif _environment_app = application; if( uuid_is_null( _environment_app.instance ) ) _environment_app.instance = uuid_generate_random(); string_copy( _environment_initial_working_dir, environment_current_working_directory(), FOUNDATION_MAX_PATHLEN ); environment_temporary_directory(); return 0; }