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);