19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */
39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <stdlib.h>
59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef _MSC_VER
79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <unistd.h>
89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "SDL.h"
119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include "SDL_endian.h"
129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <stdio.h>
159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* WARNING ! those 2 files will be destroyed by this test program */
179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define FBASENAME1	"sdldata1"		/* this file will be created during tests */
189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define FBASENAME2	"sdldata2"		/* this file should not exists before starting test */
199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef NULL
229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define NULL ((void *)0)
239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic void cleanup( void ) {
269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	unlink(FBASENAME1);
289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	unlink(FBASENAME2);
299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallstatic void rwops_error_quit( unsigned line, SDL_RWops *rwops) {
329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	printf("testfile.c(%d): failed\n",line);
349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) {
359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall		rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */
369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	}
379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	cleanup();
389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	exit(1); /* quit with rwops error (test failed) */
399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define RWOP_ERR_QUIT(x)	rwops_error_quit( __LINE__, (x) )
429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallint main(int argc, char *argv[])
469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall{
479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	SDL_RWops *rwops = NULL;
489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	char test_buf[30];
499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	cleanup();
519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */
539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(NULL,NULL);
559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(NULL,"ab+");
579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(NULL,"sldfkjsldkfj");
599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile("something","");
619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile("something",NULL);
639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	printf("test1 OK\n");
659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* test 2 : check that inexistant file is not successfully opened/created when required */
679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* modes : r, r+ implie that file MUST exist
689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall   modes : a, a+, w, w+ checks that it succeeds (file may not exists)
699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall */
719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME2,"rb"); /* this file doesn't exist that call must fail */
729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME2,"rb+"); /* this file doesn't exist that call must fail */
749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (rwops) RWOP_ERR_QUIT(rwops);
759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME2,"wb");
769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops) RWOP_ERR_QUIT(rwops);
779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops); unlink(FBASENAME2);
789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME2,"wb+");
799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops) RWOP_ERR_QUIT(rwops);
809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops); unlink(FBASENAME2);
819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME2,"ab");
829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops) RWOP_ERR_QUIT(rwops);
839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops); unlink(FBASENAME2);
849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME2,"ab+");
859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops) RWOP_ERR_QUIT(rwops);
869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops); unlink(FBASENAME2);
879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	printf("test2 OK\n");
889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* test 3 : creation, writing , reading, seeking,
909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	        test : w mode, r mode, w+ mode
919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall */
929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME1,"wb"); /* write only */
939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops)											RWOP_ERR_QUIT(rwops);
949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1 != rwops->write(rwops,"1234567890",10,1) )	RWOP_ERR_QUIT(rwops);
959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (10 != rwops->write(rwops,"1234567890",1,10) )	RWOP_ERR_QUIT(rwops);
969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7 != rwops->write(rwops,"1234567",1,7) )		RWOP_ERR_QUIT(rwops);
979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops); /* we are in write only mode */
999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops);
1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME1,"rb"); /* read mode, file must exists */
1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops)											RWOP_ERR_QUIT(rwops);
1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (20!=rwops->seek(rwops,-7,RW_SEEK_END))			RWOP_ERR_QUIT(rwops);
1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7!=rwops->read(rwops,test_buf,1,7))				RWOP_ERR_QUIT(rwops);
1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"1234567",7))				RWOP_ERR_QUIT(rwops);
1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops);
1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,10,100))			RWOP_ERR_QUIT(rwops);
1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR))			RWOP_ERR_QUIT(rwops);
1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (2!=rwops->read(rwops,test_buf,10,3))			RWOP_ERR_QUIT(rwops);
1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"12345678901234567890",20))	RWOP_ERR_QUIT(rwops);
1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->write(rwops,test_buf,1,1))			RWOP_ERR_QUIT(rwops); /* readonly mode */
1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops);
1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* test 3: same with w+ mode */
1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME1,"wb+"); /* write + read + truncation */
1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops)											RWOP_ERR_QUIT(rwops);
1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1 != rwops->write(rwops,"1234567890",10,1) )	RWOP_ERR_QUIT(rwops);
1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (10 != rwops->write(rwops,"1234567890",1,10) )	RWOP_ERR_QUIT(rwops);
1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7 != rwops->write(rwops,"1234567",1,7) )		RWOP_ERR_QUIT(rwops);
1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops); /* we are in read/write mode */
1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (20!=rwops->seek(rwops,-7,RW_SEEK_END))			RWOP_ERR_QUIT(rwops);
1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7!=rwops->read(rwops,test_buf,1,7))				RWOP_ERR_QUIT(rwops);
1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"1234567",7))				RWOP_ERR_QUIT(rwops);
1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops);
1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,10,100))			RWOP_ERR_QUIT(rwops);
1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR))			RWOP_ERR_QUIT(rwops);
1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (2!=rwops->read(rwops,test_buf,10,3))			RWOP_ERR_QUIT(rwops);
1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"12345678901234567890",20))	RWOP_ERR_QUIT(rwops);
1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops);
1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	printf("test3 OK\n");
1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* test 4: same in r+ mode */
1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME1,"rb+"); /* write + read + file must exists, no truncation */
1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops)											RWOP_ERR_QUIT(rwops);
1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1 != rwops->write(rwops,"1234567890",10,1) )	RWOP_ERR_QUIT(rwops);
1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (10 != rwops->write(rwops,"1234567890",1,10) )	RWOP_ERR_QUIT(rwops);
1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7 != rwops->write(rwops,"1234567",1,7) )		RWOP_ERR_QUIT(rwops);
1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops); /* we are in read/write mode */
1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (20!=rwops->seek(rwops,-7,RW_SEEK_END))			RWOP_ERR_QUIT(rwops);
1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7!=rwops->read(rwops,test_buf,1,7))				RWOP_ERR_QUIT(rwops);
1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"1234567",7))				RWOP_ERR_QUIT(rwops);
1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops);
1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,10,100))			RWOP_ERR_QUIT(rwops);
1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR))			RWOP_ERR_QUIT(rwops);
1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (2!=rwops->read(rwops,test_buf,10,3))			RWOP_ERR_QUIT(rwops);
1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"12345678901234567890",20))	RWOP_ERR_QUIT(rwops);
1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops);
1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	printf("test4 OK\n");
1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* test5 : append mode */
1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops = SDL_RWFromFile(FBASENAME1,"ab+"); /* write + read + append */
1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (!rwops)											RWOP_ERR_QUIT(rwops);
1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1 != rwops->write(rwops,"1234567890",10,1) )	RWOP_ERR_QUIT(rwops);
1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (10 != rwops->write(rwops,"1234567890",1,10) )	RWOP_ERR_QUIT(rwops);
1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7 != rwops->write(rwops,"1234567",1,7) )		RWOP_ERR_QUIT(rwops);
1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (1!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops);
1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (20+27!=rwops->seek(rwops,-7,RW_SEEK_END))		RWOP_ERR_QUIT(rwops);
1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (7!=rwops->read(rwops,test_buf,1,7))				RWOP_ERR_QUIT(rwops);
1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"1234567",7))				RWOP_ERR_QUIT(rwops);
1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,1,1))				RWOP_ERR_QUIT(rwops);
1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->read(rwops,test_buf,10,100))			RWOP_ERR_QUIT(rwops);
1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (27!=rwops->seek(rwops,-27,RW_SEEK_CUR))			RWOP_ERR_QUIT(rwops);
1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (0!=rwops->seek(rwops,0L,RW_SEEK_SET))			RWOP_ERR_QUIT(rwops);
1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (3!=rwops->read(rwops,test_buf,10,3))			RWOP_ERR_QUIT(rwops);
1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	if (SDL_memcmp(test_buf,"123456789012345678901234567123",30))
1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall														RWOP_ERR_QUIT(rwops);
1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	rwops->close(rwops);
1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	printf("test5 OK\n");
1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	cleanup();
1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	return 0; /* all ok */
1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall}
183