bool WriteFile( const std::string &path, const Buffer &buf ) { s32 fd; int i; u64 written; i = sysFsOpen( path.c_str(), SYS_O_WRONLY | SYS_O_CREAT | SYS_O_TRUNC, &fd, NULL, 0 ); if( i ) { printf("sysFsOpen( %s ): %i\n", path.c_str(), i ); return false; } i = sysFsWrite( fd, (void*)buf.ConstData(), buf.Size(), &written ); if( i ) { sysFsClose( fd ); sysFsUnlink( path.c_str() ); printf("sysFsWrite( %s ): %i\n", path.c_str(), i ); return false; } sysFsClose( fd ); if( written != buf.Size() ) { printf("WriteFile() failed to write all the data to \"%s\"\n", path.c_str() ); sysFsUnlink( path.c_str() ); return false; } return true; }
int file_simple_save(const char *filePath, void *buf, unsigned int fileSize) { int ret; int fd; uint64_t writelen; if (buf == NULL) { LOG(lm_main, LOG_ERROR, ("buffer is null\n")); } ret = sysFsOpen(filePath, SYS_O_WRONLY | SYS_O_CREAT | SYS_O_TRUNC, &fd, NULL, 0); if ((ret != 0)) // && (ret != EPERM) ){ { LOG(lm_main, LOG_ERROR, ("file %s open error : 0x%x\n", filePath, ret)); return -1; } ret = sysFsWrite(fd, buf, fileSize, &writelen); if (ret != 0 || fileSize != writelen) { LOG(lm_main, LOG_ERROR, ("file %s read error : 0x%x\n", filePath, ret)); sysFsClose(fd); return -1; } ret = sysFsClose(fd); if (ret != 0) { LOG(lm_main, LOG_ERROR, ("file %s close error : 0x%x\n", filePath, ret)); return -1; } return 0; }
bool WriteFile( const std::string &path, const u8* stuff, u32 size ) { //hexdump( stuff, size ); s32 fd; int i; u64 written; i = sysFsOpen( path.c_str(), SYS_O_WRONLY | SYS_O_CREAT | SYS_O_TRUNC, &fd, NULL, 0 ); if( i ) { printf("sysFsOpen( %s ): %i\n", path.c_str(), i ); return false; } i = sysFsWrite( fd, (void*)stuff, size, &written ); if( i ) { sysFsClose( fd ); sysFsUnlink( path.c_str() ); printf("sysFsWrite( %s ): %i\n", path.c_str(), i ); return false; } sysFsClose( fd ); if( written != size ) { printf("WriteFile() failed to write all the data to \"%s\"\n", path.c_str() ); sysFsUnlink( path.c_str() ); return false; } return true; }
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; }
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; }
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; }
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, ®, 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; }