From 3102a5d8d5af3d51cd6c5a56d7ec174e35602915 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 27 Feb 2006 19:19:22 +0000 Subject: [PATCH] Date: Mon, 27 Feb 2006 17:01:43 +0100 From: "William Petiot [exoide]" Subject: Re: [SDL] cvs version: standard win32 SDL.DLL file test [patch] I found a bug or two in previous patch, so here is a patch to correct this. --- VisualC.zip | Bin 39792 -> 42437 bytes include/SDL_rwops.h | 1 - src/file/SDL_rwops.c | 8 +- test/Makefile.in | 5 +- test/testfile.c | 178 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 187 insertions(+), 5 deletions(-) create mode 100644 test/testfile.c diff --git a/VisualC.zip b/VisualC.zip index bb977c2db939cb36df3a01c7ffbea5f3d0565eee..a9db1f643144d1936b6256e4baf96fd1e28afa7c 100644 GIT binary patch delta 3626 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 IKZol57ri#%%K!iX delta 1084 zcmX?ln(4zfrU~XOZ0z3gr&!M1oep75wlWHVm~hQHbMtSb`%tUz znazPJsI!JB*nG{}4XRtgVJ1{^uZthVXnxmFsAPucR;Z++Ulc^L-Y)6DIS!N=>#a;N0w(s0~$AklN0|=gkmd zV!>~5*Nc&XL4#}Z!fdI@@>v}9eS7~o-vtI2EU2zd_02xyAkg-{>3`y^xM;yu;)bl5 zi+H!XnOyPKzin~rs&CrO9A2e=-?PrNf4kz``Y!HSZTihbxoJ0RpDtX~A|@qsXMsW| z*Ro&P=Qz`rTh$)?PDxjW&o!xS6WM~7y(ZA}Rbi4A#SvWAx8Y7MbE2Vzr{9x>f0I@ z@T*zvfBpR7ufH|S;E0o7C^30ywiYDfE@yv)B$~-5@*}`Ppy=9cS6~c{s?rizauKS8 zq|(Xf!<8rRYvS8Hy;2COXl*StwNCbIf}|;sqRso7fO!CvU^d@v3t`!uJ0+PJoFgtz zH)00nh{=I-6gO+mSjEAMk`yLCSYXHkN(GZe7wR!JW={@SBr-X2p$$`UK9DIhdGkVZ zrUM|R#$=I2R*Za;{THP%9jpK=JH5!7iK`OKlv(V?hidden.win32io.h = INVALID_HANDLE_VALUE; if (win32_file_open(rwops,file,mode)) { SDL_FreeRW(rwops); diff --git a/test/Makefile.in b/test/Makefile.in index 2824797ef..c88e461b9 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -7,7 +7,7 @@ EXE = @EXE@ CFLAGS = @CFLAGS@ LIBS = @LIBS@ -TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcdrom$(EXE) testdyngl$(EXE) testerror$(EXE) testgamma$(EXE) testgl$(EXE) testhread$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE) +TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcdrom$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl$(EXE) testhread$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE) all: $(TARGETS) @@ -38,6 +38,9 @@ testdyngl$(EXE): $(srcdir)/testdyngl.c testerror$(EXE): $(srcdir)/testerror.c $(CC) -o $@ $? $(CFLAGS) $(LIBS) +testfile$(EXE): $(srcdir)/testfile.c + $(CC) -o $@ $? $(CFLAGS) $(LIBS) + testgamma$(EXE): $(srcdir)/testgamma.c $(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@ diff --git a/test/testfile.c b/test/testfile.c new file mode 100644 index 000000000..99fe5e512 --- /dev/null +++ b/test/testfile.c @@ -0,0 +1,178 @@ + +/* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */ + + + +#include "SDL.h" +#include "SDL_endian.h" + + +#include + +/* WARNING ! those 2 files will be destroyed by this test program */ +#define FBASENAME1 "sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "sdldata2" /* this file should not exists before starting test */ + + +#ifndef NULL +#define NULL ((void *)0) +#endif + +static void cleanup( void ) { + + unlink(FBASENAME1); + unlink(FBASENAME2); +} + +static void rwops_error_quit( unsigned line, SDL_RWops *rwops) { + + printf("testfile.c(%d): failed\n",line); + if (rwops) { + rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */ + } + cleanup(); + exit(1); /* quit with rwops error (test failed) */ +} + +#define RWOP_ERR_QUIT(x) rwops_error_quit( __LINE__, (x) ) + + + +int main(int argc, char *argv[]) +{ + SDL_RWops *rwops = NULL; + char test_buf[30]; + + cleanup(); + +/* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */ + + rwops = SDL_RWFromFile(NULL,NULL); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL,"a+" WIN32_FILE_MODE); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL,"sldfkjsldkfj"); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something",""); + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something",NULL); + if (rwops) RWOP_ERR_QUIT(rwops); + printf("test1 OK\n"); + +/* test 2 : check that inexistant file is not successfully opened/created when required */ +/* modes : r, r+ implie that file MUST exist + modes : a, a+, w, w+ checks that it succeeds (file may not exists) + + */ + rwops = SDL_RWFromFile(FBASENAME2,"rb"); /* this file doesn't exist that call must fail */ + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2,"rb+"); /* this file doesn't exist that call must fail */ + if (rwops) RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2,"wb"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2,"wb+"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2,"ab"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2,"ab+"); + if (!rwops) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); unlink(FBASENAME2); + printf("test2 OK\n"); + +/* test 3 : creation, writing , reading, seeking, + test : w mode, r mode, w+ mode + */ + rwops = SDL_RWFromFile(FBASENAME1,"wb"); /* write only */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in write only mode */ + rwops->close(rwops); + + rwops = SDL_RWFromFile(FBASENAME1,"rb"); /* read mode, file must exists */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->write(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* readonly mode */ + rwops->close(rwops); + +/* test 3: same with w+ mode */ + rwops = SDL_RWFromFile(FBASENAME1,"wb+"); /* write + read + truncation */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + printf("test3 OK\n"); + +/* test 4: same in r+ mode */ + rwops = SDL_RWFromFile(FBASENAME1,"rb+"); /* write + read + file must exists, no truncation */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (20!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + if (2!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"12345678901234567890",20)) RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + printf("test4 OK\n"); + +/* test5 : append mode */ + rwops = SDL_RWFromFile(FBASENAME1,"ab+"); /* write + read + append */ + if (!rwops) RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops,"1234567890",10,1) ) RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops,"1234567890",1,10) ) RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops,"1234567",1,7) ) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + + if (1!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + + if (20+27!=rwops->seek(rwops,-7,RW_SEEK_END)) RWOP_ERR_QUIT(rwops); + if (7!=rwops->read(rwops,test_buf,1,7)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"1234567",7)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,1,1)) RWOP_ERR_QUIT(rwops); + if (0!=rwops->read(rwops,test_buf,10,100)) RWOP_ERR_QUIT(rwops); + + if (27!=rwops->seek(rwops,-27,RW_SEEK_CUR)) RWOP_ERR_QUIT(rwops); + + if (0!=rwops->seek(rwops,0L,RW_SEEK_SET)) RWOP_ERR_QUIT(rwops); + if (3!=rwops->read(rwops,test_buf,10,3)) RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf,"123456789012345678901234567123",30)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + printf("test5 OK\n"); + cleanup(); + return 0; /* all ok */ +}