Fix msvcrt file test, take 2
Ferenc Wagner
wferi at afavant.elte.hu
Mon Dec 22 08:11:57 CST 2003
Here is a review of write_read subtest. It supercedes
my previous patch, which should not be applied. I wrote:
> On Windows, files opened with _O_RDONLY receive the
> read-only attribute and hence can't be unlinked.
Of course it's not _O_RDONLY what counts, but the lack of
_S_IWRITE in the mode argument. I must have been drunk, sorry.
> What's more, errno is set to ENOENT on XP, contrary to MSDN.
Which gave me a hard time finding out the real problem. :)
> So we have to change the mode before attempting the deletion.
ChangeLog: Fix undeleted temporary file.
Correct error messages and comments, break long lines.
> Feri.
Index: dlls/msvcrt/tests/file.c
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/tests/file.c,v
retrieving revision 1.6
diff -u -r1.6 file.c
--- dlls/msvcrt/tests/file.c 24 Oct 2003 00:24:08 -0000 1.6
+++ dlls/msvcrt/tests/file.c 22 Dec 2003 14:01:34 -0000
@@ -185,35 +185,50 @@
char btext[LLEN];
tempf=_tempnam(".","wne");
- ok((tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_TEXT|_O_RDWR,_S_IREAD | _S_IWRITE)) != -1,"Can't open"); /* open in TEXT mode */
- ok(_write(tempfd,mytext,strlen(mytext)) == lstrlenA(mytext), "_write _O_TEXT bad return value");
+ ok((tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_TEXT|_O_RDWR,
+ _S_IREAD | _S_IWRITE)) != -1,
+ "Can't open '%s': %d", tempf, errno); /* open in TEXT mode */
+ ok(_write(tempfd,mytext,strlen(mytext)) == lstrlenA(mytext),
+ "_write _O_TEXT bad return value");
_close(tempfd);
tempfd = _open(tempf,_O_RDONLY|_O_BINARY,0); /* open in BINARY mode */
- ok(_read(tempfd,btext,LLEN) == lstrlenA(dostext), "_read _O_BINARY got bad length");
- ok( memcmp(dostext,btext,strlen(dostext)) == 0,"problems with _O_TEXT _write and _O_BINARY _write");
- ok( btext[strlen(dostext)-2] == '\r', "CR not written");
+ ok(_read(tempfd,btext,LLEN) == lstrlenA(dostext),
+ "_read _O_BINARY got bad length");
+ ok( memcmp(dostext,btext,strlen(dostext)) == 0,
+ "problems with _O_TEXT _write / _O_BINARY _read");
+ ok( btext[strlen(dostext)-2] == '\r', "CR not written or read");
_close(tempfd);
tempfd = _open(tempf,_O_RDONLY|_O_TEXT); /* open in TEXT mode */
- ok(_read(tempfd,btext,LLEN) == lstrlenA(mytext), "_read _O_TEXT got bad length");
- ok( memcmp(mytext,btext,strlen(mytext)) == 0,"problems with _O_TEXT _write / _write");
+ ok(_read(tempfd,btext,LLEN) == lstrlenA(mytext),
+ "_read _O_TEXT got bad length");
+ ok( memcmp(mytext,btext,strlen(mytext)) == 0,
+ "problems with _O_TEXT _write / _read");
_close(tempfd);
- ok(unlink(tempf) !=-1 ,"Can't unlink");
+ ok(unlink(tempf) !=-1 ,"Can't unlink '%s': %d", tempf, errno);
tempf=_tempnam(".","wne");
- ok((tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_BINARY|_O_RDWR,0)) != -1,"Can't open %s",tempf); /* open in BINARY mode */
- ok(_write(tempfd,dostext,strlen(dostext)) == lstrlenA(dostext), "_write _O_TEXT bad return value");
+ ok((tempfd = _open(tempf,_O_CREAT|_O_TRUNC|_O_BINARY|_O_RDWR,0)) != -1,
+ "Can't open '%s': %d", tempf, errno); /* open in BINARY mode */
+ ok(_write(tempfd,dostext,strlen(dostext)) == lstrlenA(dostext),
+ "_write _O_BINARY bad return value");
_close(tempfd);
tempfd = _open(tempf,_O_RDONLY|_O_BINARY,0); /* open in BINARY mode */
- ok(_read(tempfd,btext,LLEN) == lstrlenA(dostext), "_read _O_BINARY got bad length");
- ok( memcmp(dostext,btext,strlen(dostext)) == 0,"problems with _O_TEXT _write and _O_BINARY _write");
- ok( btext[strlen(dostext)-2] == '\r', "CR not written");
+ ok(_read(tempfd,btext,LLEN) == lstrlenA(dostext),
+ "_read _O_BINARY got bad length");
+ ok( memcmp(dostext,btext,strlen(dostext)) == 0,
+ "problems with _O_BINARY _write / _read");
+ ok( btext[strlen(dostext)-2] == '\r', "CR not written or read");
_close(tempfd);
tempfd = _open(tempf,_O_RDONLY|_O_TEXT); /* open in TEXT mode */
- ok(_read(tempfd,btext,LLEN) == lstrlenA(mytext), "_read _O_TEXT got bad length");
- ok( memcmp(mytext,btext,strlen(mytext)) == 0,"problems with _O_TEXT _write / _write");
+ ok(_read(tempfd,btext,LLEN) == lstrlenA(mytext),
+ "_read _O_TEXT got bad length");
+ ok( memcmp(mytext,btext,strlen(mytext)) == 0,
+ "problems with _O_BINARY _write / _O_TEXT _read");
_close(tempfd);
- unlink(tempf);
+ ok(_chmod (tempf, _S_IREAD | _S_IWRITE) == 0,
+ "Can't chmod '%s' to read-write: %d", tempf, errno);
+ ok(unlink(tempf) !=-1 ,"Can't unlink '%s': %d", tempf, errno);
}
static void test_tmpnam( void )
More information about the wine-patches
mailing list