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; }
static void set_translate_table_item(char ***table, char *linebuf, int pos, int nr_trans) { if(*table == NULL) { *table = (char**)vpl_alloc(sizeof(char*) * nr_trans); memset(*table, 0, sizeof(char*) * nr_trans); } (*table)[pos] = vpl_strdup(linebuf); }
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; }
char *vpl_strdup(const char *str) { int len; char *p; len = strlen(str) + 1; p = vpl_alloc(len); if(p == NULL) { return p; } strcpy(p, str); return p; }