void *vpl_realloc(void *ptr, size_t size) { void *p; if(size == 0 && ptr != NULL) { vpl_free(ptr); return NULL; } p = vpl_alloc(size); if(p == NULL) { return p; } if(ptr == NULL) { memset(p, 0, size); } else { memcpy(p, ptr, size); vpl_free(ptr); } return p; }
void free_translate_table(char **table, int nr_trans) { int i; if(table == NULL) return; for(i=0; i<nr_trans; ++i) { vpl_free(table[i]); } vpl_free(table); }
int load_translate_table(char ***table, char *file, int nr_trans) { SceUID fd; char linebuf[128]; char *read_alloc_buf; int i; if (table == NULL) { return -1; } *table = NULL; linebuf[sizeof(linebuf)-1] = '\0'; fd = sceIoOpen(file, PSP_O_RDONLY, 0); if(fd < 0) { return fd; } read_alloc_buf = vpl_alloc(READ_BUF_SIZE + 64); if(read_alloc_buf == NULL) { sceIoClose(fd); return -1; } read_buf = (void*)(((u32)read_alloc_buf & (~(64-1))) + 64); i = 0; while(i < nr_trans) { if (read_lines(fd, linebuf, sizeof(linebuf)-1) < 0) { break; } // printf("linebuf %s\n", linebuf); set_translate_table_item(table, linebuf, i, nr_trans); i++; } if (i < nr_trans) { sceIoClose(fd); vpl_free(read_alloc_buf); return -1; } sceIoClose(fd); vpl_free(read_alloc_buf); return 0; }