Changeset 8e3498b in mainline for uspace/lib/c
- Timestamp:
- 2017-12-04T18:44:24Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bde5c04
- Parents:
- 40feeac
- Location:
- uspace/lib/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/elf/elf_mod.c
r40feeac r8e3498b 137 137 elf_header_t *header = &header_buf; 138 138 aoff64_t pos = 0; 139 size_t nr; 139 140 int i, rc; 140 141 141 rc = vfs_read(elf->fd, &pos, header, sizeof(elf_header_t) );142 if (rc != sizeof(elf_header_t)) {142 rc = vfs_read(elf->fd, &pos, header, sizeof(elf_header_t), &nr); 143 if (rc != EOK || nr != sizeof(elf_header_t)) { 143 144 DPRINTF("Read error.\n"); 144 145 return EE_INVALID; … … 199 200 pos = header->e_phoff + i * sizeof(elf_segment_header_t); 200 201 rc = vfs_read(elf->fd, &pos, &segment_hdr, 201 sizeof(elf_segment_header_t) );202 if (rc != sizeof(elf_segment_header_t)) {202 sizeof(elf_segment_header_t), &nr); 203 if (rc != EOK || nr != sizeof(elf_segment_header_t)) { 203 204 DPRINTF("Read error.\n"); 204 205 return EE_INVALID; … … 218 219 pos = header->e_shoff + i * sizeof(elf_section_header_t); 219 220 rc = vfs_read(elf->fd, &pos, §ion_hdr, 220 sizeof(elf_section_header_t) );221 if (rc != sizeof(elf_section_header_t)) {221 sizeof(elf_section_header_t), &nr); 222 if (rc != EOK || nr != sizeof(elf_section_header_t)) { 222 223 DPRINTF("Read error.\n"); 223 224 return EE_INVALID; … … 330 331 size_t mem_sz; 331 332 aoff64_t pos; 332 ssize_t rc; 333 int rc; 334 size_t nr; 333 335 334 336 bias = elf->bias; … … 388 390 */ 389 391 pos = entry->p_offset; 390 rc = vfs_read(elf->fd, &pos, seg_ptr, entry->p_filesz );391 if (rc < 0) {392 rc = vfs_read(elf->fd, &pos, seg_ptr, entry->p_filesz, &nr); 393 if (rc != EOK || nr != entry->p_filesz) { 392 394 DPRINTF("read error\n"); 393 395 return EE_INVALID; -
uspace/lib/c/generic/io/io.c
r40feeac r8e3498b 430 430 static size_t _fread(void *buf, size_t size, size_t nmemb, FILE *stream) 431 431 { 432 int rc; 433 size_t nread; 434 432 435 if (size == 0 || nmemb == 0) 433 436 return 0; 434 437 435 ssize_t rd = vfs_read(stream->fd, &stream->pos, buf, size * nmemb);436 if (r d < 0) {437 errno = r d;438 rc = vfs_read(stream->fd, &stream->pos, buf, size * nmemb, &nread); 439 if (rc != EOK) { 440 errno = rc; 438 441 stream->error = true; 439 rd = 0; 440 } else if (rd == 0) { 442 } else if (nread == 0) { 441 443 stream->eof = true; 442 444 } 443 444 return ( rd / size);445 446 return (nread / size); 445 447 } 446 448 … … 457 459 static size_t _fwrite(const void *buf, size_t size, size_t nmemb, FILE *stream) 458 460 { 461 int rc; 462 size_t nwritten; 463 459 464 if (size == 0 || nmemb == 0) 460 465 return 0; 461 466 462 ssize_t wr;463 467 if (stream->kio) { 464 size_t nwritten; 465 wr = kio_write(buf, size * nmemb, &nwritten); 466 if (wr != EOK) { 468 rc = kio_write(buf, size * nmemb, &nwritten); 469 if (rc != EOK) { 467 470 stream->error = true; 468 wr = 0; 469 } else { 470 wr = nwritten; 471 nwritten = 0; 471 472 } 472 473 } else { 473 wr = vfs_write(stream->fd, &stream->pos, buf, size * nmemb); 474 if (wr < 0) { 475 errno = wr; 474 rc = vfs_write(stream->fd, &stream->pos, buf, size * nmemb, 475 &nwritten); 476 if (rc != EOK) { 477 errno = rc; 476 478 stream->error = true; 477 wr = 0;478 479 } 479 480 } 480 481 481 if ( wr> 0)482 if (nwritten > 0) 482 483 stream->need_sync = true; 483 484 return ( wr/ size);484 485 return (nwritten / size); 485 486 } 486 487 … … 491 492 static void _ffillbuf(FILE *stream) 492 493 { 493 ssize_t rc; 494 int rc; 495 size_t nread; 494 496 495 497 stream->buf_head = stream->buf_tail = stream->buf; 496 498 497 rc = vfs_read(stream->fd, &stream->pos, stream->buf, stream->buf_size); 498 if (rc < 0) { 499 rc = vfs_read(stream->fd, &stream->pos, stream->buf, stream->buf_size, 500 &nread); 501 if (rc != EOK) { 499 502 errno = rc; 500 503 stream->error = true; … … 502 505 } 503 506 504 if ( rc== 0) {507 if (nread == 0) { 505 508 stream->eof = true; 506 509 return; 507 510 } 508 511 509 stream->buf_head += rc;512 stream->buf_head += nread; 510 513 stream->buf_state = _bs_read; 511 514 } -
uspace/lib/c/generic/vfs/vfs.c
r40feeac r8e3498b 86 86 * and consume system resources. 87 87 * 88 * Functions that return int return a negativeerror code on error and do not88 * Functions that return int return an error code on error and do not 89 89 * set errno. Depending on function, success is signalled by returning either 90 90 * EOK or a non-negative file handle. … … 104 104 * aoff64_t pos = 42; 105 105 * char buf[512]; 106 * ssize_t size = vfs_read(file, &pos, buf, sizeof(buf)); 107 * if (size < 0) { 106 * size_t nread; 107 * rc = vfs_read(file, &pos, buf, sizeof(buf), &nread); 108 * if (rc != EOK) { 108 109 * vfs_put(file); 109 * return size;110 * return rc; 110 111 * } 111 112 * 112 * // buf is now filled with datafrom file113 * // buf is now filled with nread bytes from file 113 114 * 114 115 * vfs_put(file); … … 808 809 * @param buf Buffer, @a nbytes bytes long 809 810 * @param nbytes Number of bytes to read 810 * 811 * @return On success, non-negative number of bytes read 812 * @return On failure, a negative error code 813 */ 814 ssize_t vfs_read(int file, aoff64_t *pos, void *buf, size_t nbyte) 811 * @param nread Place to store number of bytes actually read 812 * 813 * @return On success, EOK and @a *nread is filled with number 814 * of bytes actually read. 815 * @return On failure, an error code 816 */ 817 int vfs_read(int file, aoff64_t *pos, void *buf, size_t nbyte, size_t *nread) 815 818 { 816 819 ssize_t cnt = 0; 817 size_t nr ead= 0;820 size_t nr = 0; 818 821 uint8_t *bp = (uint8_t *) buf; 819 822 int rc; … … 821 824 do { 822 825 bp += cnt; 823 nr ead+= cnt;826 nr += cnt; 824 827 *pos += cnt; 825 rc = vfs_read_short(file, *pos, bp, nbyte - nread, &cnt); 826 } while (rc == EOK && cnt > 0 && (nbyte - nread - cnt) > 0); 827 828 if (rc != EOK) 828 rc = vfs_read_short(file, *pos, bp, nbyte - nr, &cnt); 829 } while (rc == EOK && cnt > 0 && (nbyte - nr - cnt) > 0); 830 831 if (rc != EOK) { 832 *nread = nr; 829 833 return rc; 830 834 } 835 836 nr += cnt; 831 837 *pos += cnt; 832 return nread + cnt; 838 *nread = nr; 839 return EOK; 833 840 } 834 841 … … 1247 1254 * @param buf Data, @a nbytes bytes long 1248 1255 * @param nbytes Number of bytes to write 1249 * 1250 * @return On success, non-negative number of bytes written 1251 * @return On failure, a negative error code 1252 */ 1253 ssize_t vfs_write(int file, aoff64_t *pos, const void *buf, size_t nbyte) 1256 * @param nwritten Place to store number of bytes written 1257 * 1258 * @return On success, EOK, @a *nwr is filled with number 1259 * of bytes written 1260 * @return On failure, an error code 1261 */ 1262 int vfs_write(int file, aoff64_t *pos, const void *buf, size_t nbyte, 1263 size_t *nwritten) 1254 1264 { 1255 1265 ssize_t cnt = 0; 1256 ssize_t nwr itten= 0;1266 ssize_t nwr = 0; 1257 1267 const uint8_t *bp = (uint8_t *) buf; 1258 1268 int rc; … … 1260 1270 do { 1261 1271 bp += cnt; 1262 nwr itten+= cnt;1272 nwr += cnt; 1263 1273 *pos += cnt; 1264 rc = vfs_write_short(file, *pos, bp, nbyte - nwritten, &cnt); 1265 } while (rc == EOK && ((ssize_t )nbyte - nwritten - cnt) > 0); 1266 1267 if (rc != EOK) 1274 rc = vfs_write_short(file, *pos, bp, nbyte - nwr, &cnt); 1275 } while (rc == EOK && ((ssize_t )nbyte - nwr - cnt) > 0); 1276 1277 if (rc != EOK) { 1278 *nwritten = nwr; 1268 1279 return rc; 1269 1280 } 1281 1282 nwr += cnt; 1270 1283 *pos += cnt; 1271 return nbyte; 1284 *nwritten = nwr; 1285 return EOK; 1272 1286 } 1273 1287 -
uspace/lib/c/include/vfs/vfs.h
r40feeac r8e3498b 104 104 extern int vfs_pass_handle(async_exch_t *, int, async_exch_t *); 105 105 extern int vfs_put(int); 106 extern ssize_t vfs_read(int, aoff64_t *, void *, size_t);106 extern int vfs_read(int, aoff64_t *, void *, size_t, size_t *); 107 107 extern int vfs_read_short(int, aoff64_t, void *, size_t, ssize_t *); 108 108 extern int vfs_receive_handle(bool); … … 121 121 extern int vfs_unmount_path(const char *); 122 122 extern int vfs_walk(int, const char *, int); 123 extern ssize_t vfs_write(int, aoff64_t *, const void *, size_t);123 extern int vfs_write(int, aoff64_t *, const void *, size_t, size_t *); 124 124 extern int vfs_write_short(int, aoff64_t, const void *, size_t, ssize_t *); 125 125
Note:
See TracChangeset
for help on using the changeset viewer.