Sync to Wine:
- switch to UNICODE compilaton in Wine
- remove separate unixcalls.c file
- don't crash in set_curdir() for NULL in the 'entry' pointer
Deleted: trunk/reactos/subsys/system/winefile/unixcalls.c
Modified: trunk/reactos/subsys/system/winefile/winefile.c
Modified: trunk/reactos/subsys/system/winefile/winefile.h

Deleted: trunk/reactos/subsys/system/winefile/unixcalls.c
--- trunk/reactos/subsys/system/winefile/unixcalls.c	2005-07-07 18:21:44 UTC (rev 16492)
+++ trunk/reactos/subsys/system/winefile/unixcalls.c	2005-07-07 18:44:08 UTC (rev 16493)
@@ -1,90 +0,0 @@
-/*
- * Winefile
- *
- * Copyright 2004 Martin Fuchs
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifdef __WINE__
-
-#include <unistd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <dirent.h>
-
-
-void call_getcwd(char* buffer, size_t len)
-{
-	getcwd(buffer, len);
-}
-
-
-#ifndef _NO_EXTENSIONS
-
-/* proxy functions to call UNIX readdir() */
-
-void* call_opendir(const char* path)
-{
-	DIR* pdir = opendir(path);
-
-	return pdir;
-}
-
-int call_readdir(void* pdir, char* name, unsigned* inode)
-{
-	struct dirent* ent = readdir((DIR*)pdir);
-
-	if (!ent)
-		return 0;
-
-	strcpy(name, ent->d_name);
-	*inode = ent->d_ino;
-
-	return 1;
-}
-
-void call_closedir(void* pdir)
-{
-	closedir((DIR*)pdir);
-}
-
-
-/* proxy function to call UNIX stat() */
-int call_stat(
-	const char* path, int* pis_dir,
-	unsigned long* psize_low, unsigned long* psize_high,
-	time_t* patime, time_t* pmtime,
-	unsigned long* plinks
-)
-{
-	struct stat st;
-
-	if (stat(path, &st))
-		return 1;
-
-	*pis_dir = S_ISDIR(st.st_mode);
-	*psize_low = st.st_size & 0xFFFFFFFF;
-	*psize_high = 0; /*st.st_size >> 32;*/
-	*patime = st.st_atime;
-	*pmtime = st.st_mtime;
-
-	return 0;
-}
-
-#endif /* _NO_EXTENSIONS */
-
-#endif /* __WINE__ */

Modified: trunk/reactos/subsys/system/winefile/winefile.c
--- trunk/reactos/subsys/system/winefile/winefile.c	2005-07-07 18:21:44 UTC (rev 16492)
+++ trunk/reactos/subsys/system/winefile/winefile.c	2005-07-07 18:44:08 UTC (rev 16493)
@@ -21,6 +21,11 @@
 #ifdef __WINE__
 #include "config.h"
 #include "wine/port.h"
+
+/* for unix filesystem function calls */
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <dirent.h>
 #endif
 
 #include "winefile.h"
@@ -501,8 +506,9 @@
 	Entry* first_entry = NULL;
 	Entry* last = NULL;
 	Entry* entry;
-	void* pdir;
+	DIR* pdir;
 
+	int level = dir->level + 1;
 #ifdef UNICODE
 	char cpath[MAX_PATH];
 
@@ -511,17 +517,13 @@
 	const char* cpath = path;
 #endif
 
-	pdir = call_opendir(cpath);
+	pdir = opendir(cpath);
 
-	int level = dir->level + 1;
-
 	if (pdir) {
-		char buffer[MAX_PATH];
-		time_t atime, mtime;
-		unsigned inode;
-		int is_dir;
+		struct stat st;
+		struct dirent* ent;
+		char buffer[MAX_PATH], *p;
 		const char* s;
-		char* p;
 
 		for(p=buffer,s=cpath; *s; )
 			*p++ = *s++;
@@ -529,7 +531,7 @@
 		if (p==buffer || p[-1]!='/')
 			*p++ = '/';
 
-		while(call_readdir(pdir, p, &inode)) {
+		while((ent=readdir(pdir))) {
 			entry = alloc_entry();
 
 			if (!first_entry)
@@ -540,28 +542,31 @@
 
 			entry->etype = ET_UNIX;
 
+			strcpy(p, ent->d_name);
 #ifdef UNICODE
 			MultiByteToWideChar(CP_UNIXCP, 0, p, -1, entry->data.cFileName, MAX_PATH);
 #else
 			lstrcpy(entry->data.cFileName, p);
 #endif
 
-			entry->data.dwFileAttributes = p[0]=='.'? FILE_ATTRIBUTE_HIDDEN: 0;
+			if (!stat(buffer, &st)) {
+				entry->data.dwFileAttributes = p[0]=='.'? FILE_ATTRIBUTE_HIDDEN: 0;
 
-			if (!call_stat(buffer, &is_dir,
-				&entry->data.nFileSizeLow, &entry->data.nFileSizeHigh,
-				&atime, &mtime, &entry->bhfi.nNumberOfLinks))
-			{
-				if (is_dir)
+				if (S_ISDIR(st.st_mode))
 					entry->data.dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
 
+				entry->data.nFileSizeLow = st.st_size & 0xFFFFFFFF;
+				entry->data.nFileSizeHigh = st.st_size >> 32;
+
 				memset(&entry->data.ftCreationTime, 0, sizeof(FILETIME));
-				time_to_filetime(&atime, &entry->data.ftLastAccessTime);
-				time_to_filetime(&mtime, &entry->data.ftLastWriteTime);
+				time_to_filetime(&st.st_atime, &entry->data.ftLastAccessTime);
+				time_to_filetime(&st.st_mtime, &entry->data.ftLastWriteTime);
 
-				entry->bhfi.nFileIndexLow = inode;
+				entry->bhfi.nFileIndexLow = ent->d_ino;
 				entry->bhfi.nFileIndexHigh = 0;
 
+				entry->bhfi.nNumberOfLinks = st.st_nlink;
+
 				entry->bhfi_valid = TRUE;
 			} else {
 				entry->data.nFileSizeLow = 0;
@@ -581,7 +586,7 @@
 		if (last)
 			last->next = NULL;
 
-		call_closedir(pdir);
+		closedir(pdir);
 	}
 
 	dir->down = first_entry;
@@ -2348,10 +2353,10 @@
 
 
 #ifdef UNICODE
-					call_getcwd(cpath, MAX_PATH);
+					getcwd(cpath, MAX_PATH);
 					MultiByteToWideChar(CP_UNIXCP, 0, cpath, -1, path, MAX_PATH);
 #else
-					call_getcwd(path, MAX_PATH);
+					getcwd(path, MAX_PATH);
 #endif
 					child = alloc_child_window(path, NULL, hwnd);
 
@@ -2717,7 +2722,7 @@
 	return TRUE;
 }
 
-static BOOL pattern_match_ncase(LPCTSTR str, LPCTSTR pattern)
+static BOOL pattern_imatch(LPCTSTR str, LPCTSTR pattern)
 {
 	TCHAR b1[BUFFER_LEN], b2[BUFFER_LEN];
 
@@ -2773,7 +2778,7 @@
 
 		/* filter using the file name pattern */
 		if (pattern)
-			if (!pattern_match_ncase(entry->data.cFileName, pattern))
+			if (!pattern_imatch(entry->data.cFileName, pattern))
 				continue;
 
 		/* filter system and hidden files */
@@ -3691,6 +3696,9 @@
 {
 	TCHAR path[MAX_PATH];
 
+	if (!entry)
+		return;
+
 	path[0] = '\0';
 
 	child->left.cur = entry;

Modified: trunk/reactos/subsys/system/winefile/winefile.h
--- trunk/reactos/subsys/system/winefile/winefile.h	2005-07-07 18:21:44 UTC (rev 16492)
+++ trunk/reactos/subsys/system/winefile/winefile.h	2005-07-07 18:44:08 UTC (rev 16493)
@@ -163,21 +163,6 @@
 #define _stprintf sprintf
 #endif
 
-
-/* functions in unixcalls.c */
-
-extern void call_getcwd(char* buffer, size_t len);
-extern void* call_opendir(const char* path);
-extern int call_readdir(void* pdir, char* name, unsigned* pinode);
-extern void call_closedir(void* pdir);
-
-extern int call_stat(
-        const char* path, int* pis_dir,
-        unsigned long* psize_low, unsigned long* psize_high,
-        time_t* patime, time_t* pmtime,
-        unsigned long* plinks
-);
-
 #else
 
 #include <tchar.h>	/* for _tsplitpath() */