comparison playsound/physfsrwops.c @ 296:d8c0315deba9

Updated to fix bugs and deal with API breakage in PhysicsFS.
author Ryan C. Gordon <icculus@icculus.org>
date Mon, 25 Mar 2002 08:39:11 +0000
parents a6453cae7512
children 35dfa9d9782e
comparison
equal deleted inserted replaced
295:5a7d5055823d 296:d8c0315deba9
32 pos = offset; 32 pos = offset;
33 } /* if */ 33 } /* if */
34 34
35 else if (whence == SEEK_CUR) 35 else if (whence == SEEK_CUR)
36 { 36 {
37 int current = PHYSFS_tell(handle); 37 PHYSFS_sint64 current = PHYSFS_tell(handle);
38 if (current == -1) 38 if (current == -1)
39 { 39 {
40 SDL_SetError("Can't find position in file: %s", 40 SDL_SetError("Can't find position in file: %s",
41 PHYSFS_getLastError()); 41 PHYSFS_getLastError());
42 return(-1); 42 return(-1);
43 } /* if */ 43 } /* if */
44 44
45 pos = (int) current;
46 if ( ((PHYSFS_sint64) pos) != current )
47 {
48 SDL_SetError("Can't fit current file position in an int!");
49 return(-1);
50 } /* if */
51
45 if (offset == 0) /* this is a "tell" call. We're done. */ 52 if (offset == 0) /* this is a "tell" call. We're done. */
46 return(offset); 53 return(pos);
47 54
48 pos = current + offset; 55 pos += offset;
49 } /* else if */ 56 } /* else if */
50 57
51 else if (whence == SEEK_END) 58 else if (whence == SEEK_END)
52 { 59 {
53 int len = PHYSFS_fileLength(handle); 60 PHYSFS_sint64 len = PHYSFS_fileLength(handle);
54 if (len == -1) 61 if (len == -1)
55 { 62 {
56 SDL_SetError("Can't find end of file: %s", PHYSFS_getLastError()); 63 SDL_SetError("Can't find end of file: %s", PHYSFS_getLastError());
57 return(-1); 64 return(-1);
58 } /* if */ 65 } /* if */
59 66
60 pos = len + offset; 67 pos = (int) len;
68 if ( ((PHYSFS_sint64) pos) != len )
69 {
70 SDL_SetError("Can't fit end-of-file position in an int!");
71 return(-1);
72 } /* if */
73
74 pos += offset;
61 } /* else if */ 75 } /* else if */
62 76
63 else 77 else
64 { 78 {
65 SDL_SetError("Invalid 'whence' parameter."); 79 SDL_SetError("Invalid 'whence' parameter.");
66 return(-1); 80 return(-1);
67 } /* else */ 81 } /* else */
68 82
69 if (!PHYSFS_seek(handle, pos)) 83 if ( pos < 0 )
84 {
85 SDL_SetError("Attempt to seek past start of file.");
86 return(-1);
87 } /* if */
88
89 if (!PHYSFS_seek(handle, (PHYSFS_uint64) pos))
70 { 90 {
71 SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); 91 SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError());
72 return(-1); 92 return(-1);
73 } /* if */ 93 } /* if */
74 94
77 97
78 98
79 static int physfsrwops_read(SDL_RWops *rw, void *ptr, int size, int maxnum) 99 static int physfsrwops_read(SDL_RWops *rw, void *ptr, int size, int maxnum)
80 { 100 {
81 PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1; 101 PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1;
82 int rc = PHYSFS_read(handle, ptr, size, maxnum); 102 PHYSFS_sint64 rc = PHYSFS_read(handle, ptr, size, maxnum);
83 if (rc != maxnum) 103 if (rc != maxnum)
84 { 104 {
85 if (!PHYSFS_eof(handle)) /* not EOF? Must be an error. */ 105 if (!PHYSFS_eof(handle)) /* not EOF? Must be an error. */
86 SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); 106 SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError());
87 } /* if */ 107 } /* if */
88 108
89 return(rc); 109 return((int) rc);
90 } /* physfsrwops_read */ 110 } /* physfsrwops_read */
91 111
92 112
93 static int physfsrwops_write(SDL_RWops *rw, const void *ptr, int size, int num) 113 static int physfsrwops_write(SDL_RWops *rw, const void *ptr, int size, int num)
94 { 114 {
95 PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1; 115 PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1;
96 int rc = PHYSFS_write(handle, ptr, size, num); 116 PHYSFS_sint64 rc = PHYSFS_write(handle, ptr, size, num);
97 if (rc != num) 117 if (rc != num)
98 SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); 118 SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError());
99 119
100 return(rc); 120 return((int) rc);
101 } /* physfsrwops_write */ 121 } /* physfsrwops_write */
102 122
103 123
104 static int physfsrwops_close(SDL_RWops *rw) 124 static int physfsrwops_close(SDL_RWops *rw)
105 { 125 {