aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormshah@teja.com <mshah@teja.com>2004-09-25 13:12:12 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:03:22 -0700
commit0b992c5bbe7e5770550caa372cabccbdb02cde69 (patch)
treed96bc91f0bceaf28b5b3b2d4d6ae25a7a10f14c9 /compat-mingw.c
parentAdd system-specific compatibility functions to make (diff)
downloadsparse-0b992c5bbe7e5770550caa372cabccbdb02cde69.tar.gz
sparse-0b992c5bbe7e5770550caa372cabccbdb02cde69.tar.bz2
sparse-0b992c5bbe7e5770550caa372cabccbdb02cde69.zip
[PATCH] WinGW/CygWin compatibility support
First cut at CygWin/MinGW compat support. Currently, for mingw, I am using windows API to identify the files uniquely, which is somewhat heavy because I have to open both the files simultaneously to compare the indices, will replace it to a lighter version later if I find out how to do that.
Diffstat (limited to 'compat-mingw.c')
-rw-r--r--compat-mingw.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/compat-mingw.c b/compat-mingw.c
new file mode 100644
index 0000000..1941c0b
--- /dev/null
+++ b/compat-mingw.c
@@ -0,0 +1,60 @@
+/*
+ * Mingw Compatibility functions
+ *
+ *
+ * Licensed under the Open Software License version 1.1
+ */
+
+
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib.h"
+#include "token.h"
+
+void *blob_alloc(unsigned long size)
+{
+ void *ptr;
+ ptr = malloc(size);
+ if (ptr != NULL)
+ memset(ptr, 0, size);
+ return ptr;
+}
+
+void blob_free(void *addr, unsigned long size)
+{
+ free(addr);
+}
+
+long double string_to_ld(const char *nptr, char **endptr)
+{
+ return strtod(nptr, endptr);
+}
+
+int identical_files(struct stream* s, struct stat *st, const char * name)
+{
+ HANDLE file1 =CreateFile(s->name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+ if(file1==INVALID_HANDLE_VALUE)
+ return 0;
+ HANDLE file2=CreateFile(name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+ if(file2==INVALID_HANDLE_VALUE) {
+ CloseHandle(file1);
+ return 0;
+ }
+ BY_HANDLE_FILE_INFORMATION info1;
+ BY_HANDLE_FILE_INFORMATION info2;
+ int same=0;
+ if(GetFileInformationByHandle(file1,&info1) && GetFileInformationByHandle(file2,&info2)){
+ if(info1.nFileIndexLow==info2.nFileIndexLow &&
+ info1.nFileIndexHigh==info2.nFileIndexHigh &&
+ info1.dwVolumeSerialNumber==info2.dwVolumeSerialNumber)
+ same=1;
+ }
+ CloseHandle(file1);
+ CloseHandle(file2);
+ return same;
+}