Esempio n. 1
0
int file_alloc_load(const char *file_path, uint8_t **buf, unsigned int *size)
{
    int       ret, fd;
    sysFSStat status;
    uint64_t  read_length;

    ret = sysFsOpen(file_path, SYS_O_RDONLY, &fd, 0, 0);
    if (ret != 0)
    {
        LOG(lm_main, LOG_ERROR, ("file %s open error : 0x%x\n", file_path, ret));
        return -1;
    }

    ret = sysFsFStat(fd, &status);
    if (ret != 0)
    {
        LOG(lm_main, LOG_ERROR, ("file %s get stat error : 0x%x\n", file_path, ret));
        sysFsClose(fd);
        return -1;
    }

    *buf = malloc(status.st_size);
    if (*buf == NULL)
    {
        LOG(lm_main, LOG_ERROR, ("alloc failed\n"));
        sysFsClose(fd);
        return -1;
    }

    ret = sysFsRead(fd, *buf, status.st_size, &read_length);
    if (ret != 0 || status.st_size != read_length)
    {
        LOG(lm_main, LOG_ERROR, ("file %s read error : 0x%x\n", file_path, ret));
        sysFsClose(fd);
        free(*buf);
        *buf = NULL;
        return -1;
    }

    ret = sysFsClose(fd);
    if (ret != 0)
    {
        LOG(lm_main, LOG_ERROR, ("file %s close error : 0x%x\n", file_path, ret));
        free(*buf);
        *buf = NULL;
        return -1;
    }

    *size = status.st_size;
    return 0;
}
Esempio n. 2
0
u8* ReadFile( const char* path, u32 *size )
{
	u8* ret = NULL;
	sysFSStat stat;
	s32 fd;
	u64 read;
	if( size )
		*size = 0;

	int i = sysFsStat( path, &stat );

	if( i < 0 || !stat.st_size || ( stat.st_mode & S_IFDIR ) )
	{
		//printf("sysFsStat( %s ): %i\n", path, i );
		return ret;
	}
	ret = (u8*)malloc( stat.st_size );
	if( !ret )
	{
		printf("failed to allocate %u bytes\n", (unsigned int)stat.st_size );
		return NULL;

	}
	i = sysFsOpen( path, SYS_O_RDONLY, &fd, NULL, 0 );
	if( i )
	{
		printf("sysFsOpen( %s ) %i\n", path, i );
		free( ret );
		return NULL;
	}
	i = sysFsRead( fd, ret, stat.st_size, &read );
	if( i || read != stat.st_size )
	{
		printf("sysFsRead( %u ): %i ( %u )\n", (unsigned int)stat.st_size, i, (unsigned int)read );
		free( ret );
		sysFsClose( fd );
		return NULL;
	}
	sysFsClose( fd );

	if( size )
		*size = stat.st_size;

	return ret;
}
Esempio n. 3
0
Buffer ReadFileToBuffer( const std::string &path )
{
	Buffer ret;
	sysFSStat stat;
	s32 fd;
	u64 read;

	int i = sysFsStat( path.c_str(), &stat );

	if( i < 0 || !stat.st_size || ( stat.st_mode & S_IFDIR ) )
	{
		//printf("sysFsStat( %s ): %08x\n", path.c_str(), i );
		return ret;
	}
	ret.Resize( stat.st_size );
	if( ret.IsEmpty() )
	{
		printf("ReadFileToBuffer() failed to resize buffer\n");
		return ret;
	}
	i = sysFsOpen( path.c_str(), SYS_O_RDONLY, &fd, NULL, 0 );
	if( i )
	{
		printf("sysFsOpen( %s ) %i\n", path.c_str(), i );
		ret.Free();
		return ret;
	}
	i = sysFsRead( fd, ret.Data(), stat.st_size, &read );
	if( i || read != stat.st_size )
	{
		printf("sysFsRead( %u ): %i ( %u )\n", (unsigned int)stat.st_size, i, (unsigned int)read );
		ret.Free();
		sysFsClose( fd );
		return ret;
	}
	sysFsClose( fd );
	return ret;
}
Esempio n. 4
0
int get_system_language(void)
{
    s32 ret = - 1;
    int reg = -1;
    u32 val_lang = 0x66;
    int ret_lang = 0;

    ret = sysFsOpen( "/dev_flash2/etc/xRegistry.sys", SYS_O_RDONLY, &reg, NULL, 0);
    if( ret == 0 )
    {
        int entry_name = 0x10002;

        while(true)
        {
            u64 pos;
            sysFsLseek( reg, (s64)entry_name, 0, &pos );

            //Leggo offset stringa
            u16 off_string = 0;
            u64 read;
            sysFsRead( reg, &off_string, 2, &read );

            //Leggo lunghezza stringa
            u16 len_string = 0;
            sysFsLseek( reg, (s64)off_string + (s64)0x12, 0, &pos );
            sysFsRead( reg, &len_string, 2, &read );

            //Avanzo di uno e leggo stringa
            char string[ 256 ];
            memset( string, 0, sizeof(string) );
            sysFsLseek( reg, (s64)off_string + (s64)0x15, 0, &pos );
            sysFsRead( reg, string, len_string, &read );

            //Comparo stringa
            if( strcmp(string, "/setting/system/language") == 0 )
            {
                sysFsLseek( reg, (s64)entry_name + (s64)0x7, 0, &pos );
                sysFsRead( reg, &val_lang, 4, &read );
                break;
            }

            //Non è uguale, avanzo l'offset da entry_name di 4 e leggo lunghezza data
            u16 len_data = 0;
            entry_name += 4;
            sysFsLseek( reg, (s64)entry_name, 0, &pos );
            sysFsRead( reg, &len_data, 2, &read );

            //Vado al prossimo offset stringa
            entry_name = entry_name + 6 + len_data;

            if( off_string == 0xCCDD ) break;
        }
    }

    switch( val_lang )
    {
        case 0x0:
        //  strcpy( lang, "ger_language.ini" );
            ret_lang = 5;
            break;
        case 0x1:
        //  strcpy( lang, "eng-us_language.ini" );
            ret_lang = 0;
            break;
        case 0x2:
        //  strcpy( lang, "spa_language.ini" );
            ret_lang = 1;
            break;
        case 0x3:
        //  strcpy( lang, "fre_language.ini" );
            ret_lang = 2;
            break;
        case 0x4:
        //  strcpy( lang, "ita_language.ini" );
            ret_lang = 3;
            break;
        case 0x5:
        //  strcpy( lang, "dut_language.ini" ); //Olandese
            ret_lang = 0;
            break;
        case 0x6:
        //  strcpy( lang, "por-por_language.ini" );
            ret_lang = 6;
            break;
        case 0x7:
        //  strcpy( lang, "rus_language.ini" );
            ret_lang = 0;
            break;
        case 0x8:
        //  strcpy( lang, "jap_language.ini" );
            ret_lang = 0;
            break;
        case 0x9:
        //  strcpy( lang, "kor_language.ini" );
            ret_lang = 12;
            break;
        case 0xA:
        //  strcpy( lang, "chi-tra_language.ini" );
            ret_lang = 9;
            break;
        case 0xB:
        //  strcpy( lang, "chi-sim_language.ini" );
            ret_lang = 8;
            break;
        case 0xC:
        //  strcpy( lang, "fin_language.ini" );
            ret_lang = 11;
            break;
        case 0xD:
        //  strcpy( lang, "swe_language.ini" );
            ret_lang = 0;
            break;
        case 0xE:
        //  strcpy( lang, "dan_language.ini" );
            ret_lang = 0;
            break;
        case 0xF:
        //  strcpy( lang, "nor_language.ini" );
            ret_lang = 4;
            break;
        case 0x10:
        //  strcpy( lang, "pol_language.ini" );
            ret_lang = 0;
            break;
        case 0x11:
        //  strcpy( lang, "por-bra_language.ini" );
            ret_lang = 6;
            break;
        case 0x12:
        //  strcpy( lang, "eng-uk_language.ini" );
            ret_lang = 0;
            break;
        default:
        //  strcpy( lang, "language.ini" );
            ret_lang = 0;
            break;
    }
    sysFsClose( reg );

    return ret_lang;
}