"Hans Leidekker" hans@it.vu.nl wrote:
int _chsize(int fd, long size) {
- FIXME("(fd=%d, size=%ld): stub\n", fd, size);
- return -1;
- DWORD cur, pos;
- HANDLE handle;
- BOOL ret = FALSE;
- TRACE("(fd=%d, size=%ld)\n", fd, size);
- LOCK_FILES();
- handle = msvcrt_fdtoh(fd);
- if (handle == INVALID_HANDLE_VALUE) goto exit;
- /* save the current file pointer */
- cur = SetFilePointer(handle, 0, NULL, FILE_CURRENT);
- if (cur == INVALID_SET_FILE_POINTER) goto exit;
- pos = SetFilePointer(handle, size, NULL, FILE_BEGIN);
- if (pos == INVALID_SET_FILE_POINTER) goto restore;
- ret = SetEndOfFile(handle);
+restore:
- /* restore the file pointer */
- pos = SetFilePointer(handle, cur, NULL, FILE_BEGIN);
+exit:
- if (ret == FALSE)
- { UNLOCK_FILES(); return -1; }
- else
- { UNLOCK_FILES(); return 0; }
}
This a pure coding style comment, just ignore it if you are not agree.
In order to avoid goto's (absolutely not needed here IMO) and doubled UNLOCK_FILES():
LOCK_FILES();
handle = msvcrt_fdtoh(fd); if (handle != INVALID_HANDLE_VALUE) { /* save the current file pointer */ cur = SetFilePointer(handle, 0, NULL, FILE_CURRENT); if (cur != INVALID_SET_FILE_POINTER) { pos = SetFilePointer(handle, size, NULL, FILE_BEGIN); if (pos != INVALID_SET_FILE_POINTER) ret = SetEndOfFile(handle);
/* restore the file pointer */ pos = SetFilePointer(handle, cur, NULL, FILE_BEGIN); } }
UNLOCK_FILES(); return ret ? 0 : -1;