Mercurial > hg > dmlib
comparison dmres.c @ 732:2f02d9b4caa3
More work.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 21 Apr 2013 19:58:59 +0300 |
parents | 0e164aaa7409 |
children | b505b81a43de |
comparison
equal
deleted
inserted
replaced
731:0e164aaa7409 | 732:2f02d9b4caa3 |
---|---|
172 f->error = dmGetErrno(); | 172 f->error = dmGetErrno(); |
173 return ret; | 173 return ret; |
174 } | 174 } |
175 | 175 |
176 | 176 |
177 static int dm_stdio_freset(DMResource * f) | |
178 { | |
179 if (f->fh != NULL) | |
180 return dm_stdio_fseek(f, 0L, SEEK_SET); | |
181 else | |
182 return DMERR_OK; | |
183 } | |
184 | |
185 | |
177 static off_t dm_stdio_fsize(DMResource *f) | 186 static off_t dm_stdio_fsize(DMResource *f) |
178 { | 187 { |
179 off_t savePos, fileSize; | 188 off_t savePos, fileSize; |
180 | 189 |
181 // Check if the size is cached | 190 // Check if the size is cached |
267 | 276 |
268 DMResourceOps dfStdioFileOps = | 277 DMResourceOps dfStdioFileOps = |
269 { | 278 { |
270 "Stdio", | 279 "Stdio", |
271 | 280 |
281 dm_stdio_freset, | |
272 dm_stdio_ferror, | 282 dm_stdio_ferror, |
273 dm_stdio_fseek, | 283 dm_stdio_fseek, |
274 dm_stdio_fsize, | 284 dm_stdio_fsize, |
275 dm_stdio_ftell, | 285 dm_stdio_ftell, |
276 dm_stdio_feof, | 286 dm_stdio_feof, |
286 | 296 |
287 DMResourceOps dfStdioFHOps = | 297 DMResourceOps dfStdioFHOps = |
288 { | 298 { |
289 "StdioFH", | 299 "StdioFH", |
290 | 300 |
301 dm_stdio_freset, | |
291 dm_stdio_ferror, | 302 dm_stdio_ferror, |
292 dm_stdio_fseek, | 303 dm_stdio_fseek, |
293 dm_stdio_fsize, | 304 dm_stdio_fsize, |
294 dm_stdio_ftell, | 305 dm_stdio_ftell, |
295 dm_stdio_feof, | 306 dm_stdio_feof, |
419 dmResourceFreeRawData(f); | 430 dmResourceFreeRawData(f); |
420 } | 431 } |
421 #endif | 432 #endif |
422 | 433 |
423 | 434 |
435 static int dm_mem_freset(DMResource * f) | |
436 { | |
437 f->rawOffset = 0; | |
438 return DMERR_OK; | |
439 } | |
440 | |
441 | |
424 static int dm_mem_ferror(DMResource * f) | 442 static int dm_mem_ferror(DMResource * f) |
425 { | 443 { |
426 return f->error; | 444 return f->error; |
427 } | 445 } |
428 | 446 |
546 #ifdef DM_USE_PACKFS | 564 #ifdef DM_USE_PACKFS |
547 DMResourceOps dfPackFileOps = | 565 DMResourceOps dfPackFileOps = |
548 { | 566 { |
549 "PackFS", | 567 "PackFS", |
550 | 568 |
569 dm_mem_freset, | |
551 dm_mem_ferror, | 570 dm_mem_ferror, |
552 dm_mem_fseek, | 571 dm_mem_fseek, |
553 dm_mem_fsize, | 572 dm_mem_fsize, |
554 dm_mem_ftell, | 573 dm_mem_ftell, |
555 dm_mem_feof, | 574 dm_mem_feof, |
558 dm_mem_fread, | 577 dm_mem_fread, |
559 NULL, | 578 NULL, |
560 | 579 |
561 dm_pack_fopen, | 580 dm_pack_fopen, |
562 dm_pack_fclose, | 581 dm_pack_fclose, |
563 dm_pack_preload | 582 dm_pack_preload, |
564 }; | 583 }; |
565 #endif | 584 #endif |
566 | 585 |
567 | 586 |
568 DMResourceOps dfMemIOFileOps = | 587 DMResourceOps dfMemIOFileOps = |
569 { | 588 { |
570 "MemIO", | 589 "MemIO", |
571 | 590 |
591 dm_mem_freset, | |
572 dm_mem_ferror, | 592 dm_mem_ferror, |
573 dm_mem_fseek, | 593 dm_mem_fseek, |
574 dm_mem_fsize, | 594 dm_mem_fsize, |
575 dm_mem_ftell, | 595 dm_mem_ftell, |
576 dm_mem_feof, | 596 dm_mem_feof, |
586 | 606 |
587 | 607 |
588 /* FS file handling functions. These functions call the actual | 608 /* FS file handling functions. These functions call the actual |
589 * functions depending on where the file is located. | 609 * functions depending on where the file is located. |
590 */ | 610 */ |
591 static void dmResourceReset(DMResource *handle) | |
592 { | |
593 if (handle != NULL && handle->fops != NULL) | |
594 dmfseek(handle, 0, SEEK_SET); | |
595 } | |
596 | |
597 | |
598 static int dmResourcePreload(DMResource *handle) | 611 static int dmResourcePreload(DMResource *handle) |
599 { | 612 { |
600 int ret = DMERR_INIT_FAIL; | 613 int ret = DMERR_INIT_FAIL; |
601 | 614 |
602 // Check if we want to preload raw data? | 615 // Check if we want to preload raw data? |
610 ret = handle->fops->preload(handle); | 623 ret = handle->fops->preload(handle); |
611 if (ret == DMERR_OK) | 624 if (ret == DMERR_OK) |
612 handle->flags |= DMF_LOADED_RAW | DMF_PERSIST; | 625 handle->flags |= DMF_LOADED_RAW | DMF_PERSIST; |
613 } | 626 } |
614 | 627 |
615 dmResourceReset(handle); | 628 dmfreset(handle); |
616 } | 629 } |
617 | 630 |
618 // Check if resource data is to be preloaded | 631 // Check if resource data is to be preloaded |
619 if (handle->lib->flags & DRF_PRELOAD_RES) | 632 if (handle->lib->flags & DRF_PRELOAD_RES) |
620 { | 633 { |
632 | 645 |
633 if (ret == DMERR_OK) | 646 if (ret == DMERR_OK) |
634 handle->flags |= DMF_LOADED_RES; | 647 handle->flags |= DMF_LOADED_RES; |
635 } | 648 } |
636 | 649 |
637 dmResourceReset(handle); | 650 dmfreset(handle); |
638 } | 651 } |
639 | 652 |
640 return ret; | 653 return ret; |
641 } | 654 } |
642 | 655 |
705 dmResourceInsert(lib, handle); | 718 dmResourceInsert(lib, handle); |
706 } | 719 } |
707 | 720 |
708 // Increase refcount | 721 // Increase refcount |
709 dmResourceRef(handle); | 722 dmResourceRef(handle); |
710 dmResourceReset(handle); | 723 dmfreset(handle); |
711 return DMERR_OK; | 724 return DMERR_OK; |
712 } | 725 } |
713 | 726 |
714 | 727 |
715 #ifdef DM_USE_STDIO | 728 #ifdef DM_USE_STDIO |
757 f->fops->fclose(f); | 770 f->fops->fclose(f); |
758 | 771 |
759 dmResourceUnref(f); | 772 dmResourceUnref(f); |
760 } | 773 } |
761 | 774 |
775 | |
776 int dmfreset(DMResource *f) | |
777 { | |
778 if (f == NULL) | |
779 return DMERR_NULLPTR; | |
780 | |
781 if (f->fops == NULL || f->fops->freset == NULL) | |
782 return DMERR_OK; | |
783 | |
784 return f->fops->freset(f); | |
785 } | |
762 | 786 |
763 int dmferror(DMResource * f) | 787 int dmferror(DMResource * f) |
764 { | 788 { |
765 f->atime = time(NULL); | 789 f->atime = time(NULL); |
766 return f->fops->ferror(f); | 790 return f->fops->ferror(f); |