/* Run the test. */ static void * do_start (void *arg) { SCM port; scm_t_bits port_type; char buffer[PORT_BUFFER_SIZE + (PORT_BUFFER_SIZE / 2)]; size_t read, last_read; port_type = scm_make_port_type ("custom-input-port", fill_input, NULL); port = make_port (port_type); read = 0; do { last_read = scm_c_read (port, &buffer[read], 123); assert (last_read <= 123); assert (zeroed_buffer_p (&buffer[read], last_read)); read += last_read; } while (last_read > 0 && read < sizeof (buffer)); /* We shouldn't be able to read more than what's in PORT's buffer. */ assert (read == PORT_BUFFER_SIZE); return NULL; }
/* This callback function sends some data from a port over to curl. */ static size_t read_callback (void *ptr, size_t size, size_t nmemb, void *userdata) { size_t length1; SCM port; port = PTR2SCM(userdata); length1 = scm_c_read (port, ptr, size * nmemb); return length1; }
static const char * gdbscm_disasm_read_memory_worker (void *datap) { struct gdbscm_disasm_read_data *data = (struct gdbscm_disasm_read_data *) datap; struct disassemble_info *dinfo = data->dinfo; struct gdbscm_disasm_data *disasm_data = (struct gdbscm_disasm_data *) dinfo->application_data; SCM seekto, newpos, port = disasm_data->port; size_t bytes_read; seekto = gdbscm_scm_from_ulongest (data->memaddr - disasm_data->offset); newpos = scm_seek (port, seekto, scm_from_int (SEEK_SET)); if (!scm_is_eq (seekto, newpos)) return "seek error"; bytes_read = scm_c_read (port, data->myaddr, data->length); if (bytes_read != data->length) return "short read"; /* If we get here the read succeeded. */ return NULL; }