/* read_from_from: fd - file to read rom buffer - buffer to read into *length - maximum amount of data to read. On return *length becomes the amount of data actually read. Returns true if the file is finished, or error. false if there is still data to rbe read. */ static bool read_from_from(int fd, char *buffer, size_t *length) { size_t ret, data_read = 0; while (*length > 0) { ret = read(fd, buffer, *length); if (ret < 0) /* error */ { *length = 0; return true; } else if (ret == 0) { *length = data_read; return true; /* file finished */ } else { data_read += ret; *length -= ret; } } *length = data_read; return false; }