Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}