static event_list_state_t *network_create_event_list(BYTE *remote_event_buffer) { event_list_state_t *list; unsigned int type, size; CLOCK clk; BYTE *data; BYTE *bufptr = remote_event_buffer; list = lib_malloc(sizeof(event_list_state_t)); event_register_event_list(list); do { type = util_le_buf_to_dword(&bufptr[0]); clk = util_le_buf_to_dword(&bufptr[4]); size = util_le_buf_to_dword(&bufptr[8]); data = &bufptr[12]; bufptr += 12 + size; event_record_in_list(list, type, data, size); } while (type != EVENT_LIST_END); return list; }
static long fsimage_gcr_seek_half_track(fsimage_t *fsimage, unsigned int half_track, WORD *max_track_length, BYTE *num_half_tracks) { BYTE buf[12]; if (fsimage->fd == NULL) { log_error(fsimage_gcr_log, "Attempt to read without disk image."); return -1; } if (util_fpread(fsimage->fd, buf, 12, 0) < 0) { log_error(fsimage_gcr_log, "Could not read GCR disk image."); return -1; } if (memcmp(gcr_image_header_expected, buf, sizeof(gcr_image_header_expected)) != 0) { log_error(fsimage_gcr_log, "Unexpected GCR header found." ); return -1; } *num_half_tracks = buf[9]; if (*num_half_tracks > MAX_GCR_TRACKS) { log_error(fsimage_gcr_log, "Too many half tracks." ); return -1; } *max_track_length = util_le_buf_to_word(&buf[10]); if (*max_track_length > NUM_MAX_MEM_BYTES_TRACK) { log_error(fsimage_gcr_log, "Too large max track length."); return -1; } if (util_fpread(fsimage->fd, buf, 4, 12 + (half_track - 2) * 4) < 0) { log_error(fsimage_gcr_log, "Could not read GCR disk image."); return -1; } return util_le_buf_to_dword(buf); }