static int palette_copy(palette_t *dest, const palette_t *src) { unsigned int i; if (dest->num_entries != src->num_entries) { log_error(palette_log, "Number of entries of src and dest palette do not match."); return -1; } for (i = 0; i < src->num_entries; i++) palette_set_entry(dest, i, src->entries[i].red, src->entries[i].green, src->entries[i].blue, src->entries[i].dither); return 0; }
static int palette_load_core(FILE *f, const char *file_name, palette_t *tmp_palette, palette_t *palette_return) { char buf[1024]; unsigned int line_num = 0; unsigned int entry_num = 0; while (1) { int i; BYTE values[4]; const char *p1; int line_len = util_get_line(buf, 1024, f); if (line_len < 0) { break; } line_num++; if (*buf == '#') { continue; } p1 = next_nonspace(buf); if (*p1 == '\0') { /* empty line */ continue; } for (i = 0; i < 4; i++) { long result; const char *p2; if (util_string_to_long(p1, &p2, 16, &result) < 0) { log_error(palette_log, "%s, %d: number expected.", file_name, line_num); return -1; } if (result < 0 || (i == 3 && result > 0xf) || result > 0xff || result < 0) { log_error(palette_log, "%s, %d: invalid value %lx.", file_name, line_num, result); return -1; } values[i] = (BYTE)result; p1 = p2; } p1 = next_nonspace(p1); if (*p1 != '\0') { log_error(palette_log, "%s, %d: garbage at end of line.", file_name, line_num); return -1; } if (entry_num >= palette_return->num_entries) { log_error(palette_log, "%s: too many entries, %d expected.", file_name, palette_return->num_entries); return -1; } if (palette_set_entry(tmp_palette, entry_num, values[0], values[1], values[2], values[3]) < 0) { log_error(palette_log, "Failed to set palette entry."); return -1; } entry_num++; } if (line_num == 0) { log_error(palette_log, "Could not read from palette file."); return -1; } if (entry_num < palette_return->num_entries) { log_error(palette_log, "%s: too few entries, %d found, %d expected.", file_name, entry_num, palette_return->num_entries); return -1; } if (palette_copy(palette_return, tmp_palette) < 0) { log_error(palette_log, "Failed to copy palette."); return -1; } return 0; }