void Board_load_board(int board_type) { FILE *fl; int i, len1 = 0, len2 = 0; char *tmp1 = 0, *tmp2 = 0; if (!(fl = fopen(FILENAME(board_type), "rb"))) { perror("Error reading board"); return; } fread(&(num_of_msgs[board_type]), sizeof(int), 1, fl); if (num_of_msgs[board_type] < 1 || num_of_msgs[board_type] > MAX_BOARD_MESSAGES) { log("Board file corrupt. Resetting."); Board_reset_board(board_type); return; } for (i = 0; i < num_of_msgs[board_type]; i++) { fread(&(msg_index[board_type][i]),sizeof(struct board_msginfo),1,fl); if (!(len1 = msg_index[board_type][i].heading_len)) { log("Board file corrupt! Resetting."); Board_reset_board(board_type); return; } if (!(tmp1 = (char *)malloc(sizeof(char) * len1))) { log("Error - malloc failed for board header"); exit(1); } fread(tmp1, sizeof(char), len1, fl); MSG_HEADING(board_type, i) = tmp1; if ((len2 = msg_index[board_type][i].message_len)) { if ((MSG_SLOTNUM(board_type, i) = find_slot()) == -1) { log("Out of slots booting board! Resetting.."); Board_reset_board(board_type); return; } if (!(tmp2 = (char *)malloc(sizeof(char) * len2))) { log("Error - malloc failed for board text"); exit(1); } fread(tmp2, sizeof(char), len2, fl); msg_storage[MSG_SLOTNUM(board_type, i)] = tmp2; } } fclose(fl); }
void Board_load_board(int board_type) { FILE *fl; int i, len1, len2; char *tmp1, *tmp2; if (!(fl = fopen(FILENAME(board_type), "rb"))) { if (errno != ENOENT) perror("SYSERR: Error reading board"); return; } fread(&(num_of_msgs[board_type]), sizeof(int), 1, fl); if (num_of_msgs[board_type] < 1 || num_of_msgs[board_type] > MAX_BOARD_MESSAGES) { log("SYSERR: Board file %d corrupt. Resetting.", board_type); Board_reset_board(board_type); return; } for (i = 0; i < num_of_msgs[board_type]; i++) { fread(&(msg_index[board_type][i]), sizeof(struct board_msginfo), 1, fl); if ((len1 = msg_index[board_type][i].heading_len) <= 0) { log("SYSERR: Board file %d corrupt! Resetting.", board_type); Board_reset_board(board_type); return; } CREATE(tmp1, char, len1); fread(tmp1, sizeof(char), len1, fl); MSG_HEADING(board_type, i) = tmp1; if ((MSG_SLOTNUM(board_type, i) = find_slot()) == -1) { log("SYSERR: Out of slots booting board %d! Resetting...", board_type); Board_reset_board(board_type); return; } if ((len2 = msg_index[board_type][i].message_len) > 0) { CREATE(tmp2, char, len2); fread(tmp2, sizeof(char), len2, fl); msg_storage[MSG_SLOTNUM(board_type, i)] = tmp2; } else msg_storage[MSG_SLOTNUM(board_type, i)] = NULL; } fclose(fl); }