void fliplist_resources_shutdown(void) { int i; for (i = 0; i < NUM_DRIVES; i++) fliplist_clear_list(8 + i); lib_free(fliplist_file_name); lib_free((char *)(resources_string[0].factory_value)); }
int fliplist_load_list(unsigned int unit, const char *filename, int autoattach) { FILE *fp; char buffer[buffer_size]; int all_units = 0, i; int listok = 0; if (filename == NULL || *filename == 0 || (fp = fopen(filename, MODE_READ)) == NULL) { return -1; } buffer[0] = '\0'; if (fgets(buffer, buffer_size, fp) == NULL) { fclose(fp); return -1; } if (strncmp(buffer, flip_file_header, strlen(flip_file_header)) != 0) { log_message(LOG_DEFAULT, "File %s is not a fliplist file", filename); fclose(fp); return -1; } if (unit == FLIPLIST_ALL_UNITS) { all_units = 1; for (i = 0; i < NUM_DRIVES; i++) { fliplist_clear_list(i + 8); } } else { fliplist_clear_list(unit); } while (!feof(fp)) { char *b; buffer[0] = '\0'; if (fgets(buffer, buffer_size, fp) == NULL) { break; } if (strncmp("UNIT ", buffer, 5) == 0) { if (all_units != 0) { long unit_long; util_string_to_long(buffer + 5, NULL, 10, &unit_long); unit = (unsigned int)unit_long; } continue; } /* remove trailing whitespace (linefeeds etc) */ b = buffer + strlen(buffer); while ((b > buffer) && (isspace((unsigned int)(b[-1])))) { b--; } if (b > buffer) { fliplist_t tmp; *b = '\0'; if (unit == FLIPLIST_ALL_UNITS) { log_message(LOG_DEFAULT, "Fliplist has inconsistent view for unit, assuming 8.\n"); unit = 8; } tmp = lib_malloc(sizeof(struct fliplist_s)); tmp->image = lib_stralloc(buffer); tmp->unit = unit; if (fliplist[unit - 8] == NULL) { fliplist[unit - 8] = tmp; tmp->prev = tmp; tmp->next = tmp; } else { tmp->next = fliplist[unit - 8]; tmp->prev = fliplist[unit - 8]->prev; tmp->next->prev = tmp; tmp->prev->next = tmp; fliplist[unit - 8] = tmp; } listok = 1; } } fclose(fp); if (listok) { current_drive = unit; if (all_units) { for (i = 0; i < NUM_DRIVES; i++) { show_fliplist(i + 8); } } else { show_fliplist(unit); } if (autoattach) { fliplist_attach_head(unit, 1); } return 0; } return -1; }