* Update free_fd().
* Fixes some msvcrt:file tests.
CORE-8540

svn path=/trunk/; revision=64733
This commit is contained in:
Amine Khaldi 2014-10-13 18:08:34 +00:00
parent 2598a46b01
commit 6d6e0cda0c

View file

@ -233,40 +233,37 @@ static inline BOOL is_valid_fd(int fd)
/* INTERNAL: free a file entry fd */ /* INTERNAL: free a file entry fd */
static void free_fd(int fd) static void free_fd(int fd)
{ {
HANDLE old_handle;
ioinfo *fdinfo; ioinfo *fdinfo;
LOCK_FILES(); LOCK_FILES();
fdinfo = get_ioinfo(fd); fdinfo = get_ioinfo(fd);
old_handle = fdinfo->handle;
if(fdinfo != &__badioinfo) if(fdinfo != &__badioinfo)
{ {
fdinfo->handle = INVALID_HANDLE_VALUE; fdinfo->handle = INVALID_HANDLE_VALUE;
fdinfo->wxflag = 0; fdinfo->wxflag = 0;
} }
TRACE(":fd (%d) freed\n",fd); TRACE(":fd (%d) freed\n",fd);
if (fd < 3) /* don't use 0,1,2 for user files */
if (fd < 3)
{ {
switch (fd) switch (fd)
{ {
case 0: case 0:
if (GetStdHandle(STD_INPUT_HANDLE) == old_handle) SetStdHandle(STD_INPUT_HANDLE, 0); SetStdHandle(STD_INPUT_HANDLE, 0);
break; break;
case 1: case 1:
if (GetStdHandle(STD_OUTPUT_HANDLE) == old_handle) SetStdHandle(STD_OUTPUT_HANDLE, 0); SetStdHandle(STD_OUTPUT_HANDLE, 0);
break; break;
case 2: case 2:
if (GetStdHandle(STD_ERROR_HANDLE) == old_handle) SetStdHandle(STD_ERROR_HANDLE, 0); SetStdHandle(STD_ERROR_HANDLE, 0);
break; break;
} }
} }
else
{
if (fd == fdend - 1) if (fd == fdend - 1)
fdend--; fdend--;
if (fd < fdstart) if (fd < fdstart)
fdstart = fd; fdstart = fd;
}
UNLOCK_FILES(); UNLOCK_FILES();
} }