summaryrefslogtreecommitdiff
path: root/navit/support/libc/chsize.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/support/libc/chsize.c')
-rw-r--r--navit/support/libc/chsize.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/navit/support/libc/chsize.c b/navit/support/libc/chsize.c
new file mode 100644
index 000000000..778949a46
--- /dev/null
+++ b/navit/support/libc/chsize.c
@@ -0,0 +1,51 @@
+/*
+ * chsize.c: _chsize and chsize implementations for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public
+ * Domain. This file is a part of the mingw32ce package. No
+ * warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> 24 Jun 2007
+ *
+ */
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+int
+_chsize (int fd, long size)
+{
+ DWORD cur;
+ DWORD new;
+ HANDLE h;
+ BOOL ret;
+
+ h = (HANDLE) fd;
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ SetLastError (ERROR_INVALID_PARAMETER);
+ return -1;
+ }
+
+ cur = SetFilePointer (h, 0, NULL, FILE_CURRENT);
+ if (cur == 0xffffffff)
+ return -1;
+
+ /* Move to where we want it. */
+ new = SetFilePointer (h, size, NULL, FILE_BEGIN);
+ if (new == 0xffffffff)
+ return -1;
+
+ /* And commit it as eof, effectivelly growing or shrinking. */
+ ret = SetEndOfFile (h);
+
+ SetFilePointer (h, cur, NULL, FILE_BEGIN);
+
+ return ret ? 0 : -1;
+}
+
+int
+chsize (int fd, long size)
+{
+ return _chsize (fd, size);
+}