[ros-diffs] [sserapion] 35810: Commit WIP. Part 3 of ?? - Update crt to conform - add some amd64 stubs

sserapion at svn.reactos.org sserapion at svn.reactos.org
Sat Aug 30 18:55:35 CEST 2008


Author: sserapion
Date: Sat Aug 30 11:55:35 2008
New Revision: 35810

URL: http://svn.reactos.org/svn/reactos?rev=35810&view=rev
Log:
Commit WIP. Part 3 of ??
- Update crt to conform
- add some amd64 stubs

Added:
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s   (with props)
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/seh.s   (with props)
Modified:
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/crt.rbuild
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/process/process.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/file.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/find.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/errno.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/getenv.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/rot.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/swab.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/atol.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/ctype.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/scanf.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/ctime.c
    branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/difftime.c

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/crt.rbuild
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/crt.rbuild?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/crt.rbuild [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/crt.rbuild [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
-<module name="crt" type="staticlibrary">
+<module name="crt" type="staticlibrary" allowwarnings="true">
 	<include base="crt">.</include>
 	<include base="crt">include</include>
 	<define name="_DISABLE_TIDENTS" />
@@ -56,6 +56,12 @@
 				<file>chkstk_asm.s</file>
 			</directory>
 		</if>
+		<if property="ARCH" value="amd64">
+			<directory name="amd64">
+				<file>seh.s</file>
+				<file>chkstk_asm.s</file>
+			</directory>
+		</if>
 		<file>xcptfil.c</file>
 	</directory>
 	<directory name="float">
@@ -68,6 +74,14 @@
 		<file>nafter.c</file>
 		<file>scalb.c</file>
 		<if property="ARCH" value="i386">
+			<directory name="i386">
+				<file>clearfp.c</file>
+				<file>cntrlfp.c</file>
+				<file>logb.c</file>
+				<file>statfp.c</file>
+			</directory>
+		</if>
+		<if property="ARCH" value="amd64">
 			<directory name="i386">
 				<file>clearfp.c</file>
 				<file>cntrlfp.c</file>
@@ -112,8 +126,15 @@
 				<file>log10_asm.s</file>
 			</directory>
 		</if>
-		<ifnot property="ARCH" value="i386">
-		</ifnot>
+		<if property="ARCH" value="amd64">
+			<directory name="i386">
+				<file>atan2.c</file>
+				<file>exp.c</file>
+				<file>fmod.c</file>
+				<file>ldexp.c</file>
+			</directory>
+		</if>
+
 	</directory>
 
 	<directory name="mbstring">

Added: branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s?rev=35810&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s (added)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -1,0 +1,22 @@
+/*
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS kernel
+ * PURPOSE:           Stack checker
+ * FILE:              lib/ntdll/rtl/i386/chkstk.s
+ * PROGRAMER:         
+ */
+
+.globl _chkstk
+.globl _alloca_probe
+
+/*
+ _chkstk() is called by all stack allocations of more than 4 KB. It grows the
+ stack in areas of 4 KB each, trying to access each area. This ensures that the
+ guard page for the stack is hit, and the stack growing triggered
+ */
+_chkstk:
+_alloca_probe:
+        /* return */
+        ret
+
+/* EOF */

Propchange: branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s
------------------------------------------------------------------------------
    svn:eol-style = native

Added: branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/seh.s
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/seh.s?rev=35810&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/seh.s (added)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/seh.s [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -1,0 +1,84 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS CRT
+ * FILE:            lib/crt/misc/i386/seh.S
+ * PURPOSE:         SEH Support for the CRT
+ * PROGRAMMERS:     Alex Ionescu (alex.ionescu at reactos.org)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <ndk/asm.h>
+.intel_syntax noprefix
+
+#define DISPOSITION_DISMISS         0
+#define DISPOSITION_CONTINUE_SEARCH 1
+#define DISPOSITION_COLLIDED_UNWIND 3
+
+/* GLOBALS *******************************************************************/
+
+.globl __global_unwind2
+.globl __local_unwind2
+.globl __abnormal_termination
+.globl __except_handler2
+.globl __except_handler3
+
+/* FUNCTIONS *****************************************************************/
+
+.func unwind_handler
+_unwind_handler:
+    ret
+.endfunc
+
+.func _global_unwind2
+__global_unwind2:
+    ret
+.endfunc
+
+.func _abnormal_termination
+__abnormal_termination:
+    ret
+.endfunc
+
+.func _local_unwind2
+__local_unwind2:
+    ret
+.endfunc
+
+.func _except_handler2
+__except_handler2:
+    ret
+.endfunc
+
+.func _except_handler3
+__except_handler3:
+    ret
+.endfunc
+
+//
+//
+// REMOVE ME REMOVE ME REMOVE ME REMOVE ME REMOVE ME REMOVE ME REMOVE ME
+//
+//
+.func RtlpGetStackLimits at 8
+.globl _RtlpGetStackLimits at 8
+_RtlpGetStackLimits at 8:
+
+    /* Get the current thread */
+    mov eax, [fs:KPCR_CURRENT_THREAD]
+
+    /* Get the stack limits */
+    mov ecx, [eax+KTHREAD_STACK_LIMIT]
+    mov edx, [eax+KTHREAD_INITIAL_STACK]
+    sub edx, SIZEOF_FX_SAVE_AREA
+
+    /* Return them */
+    mov eax, [esp+4]
+    mov [eax], ecx
+
+    mov eax, [esp+8]
+    mov [eax], edx
+
+    /* return */
+    ret 8
+.endfunc

Propchange: branches/ros-amd64-bringup/reactos/lib/sdk/crt/except/amd64/seh.s
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/process/process.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/process/process.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/process/process.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/process/process.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -323,7 +323,7 @@
 /*
  * @implemented
  */
-int _tspawnl(int mode, const _TCHAR *cmdname, const _TCHAR* arg0, ...)
+intptr_t _tspawnl(int mode, const _TCHAR *cmdname, const _TCHAR* arg0, ...)
 {
    va_list argp;
    _TCHAR* args;
@@ -345,7 +345,7 @@
 /*
  * @implemented
  */
-int _tspawnv(int mode, const _TCHAR *cmdname, const _TCHAR* const* argv)
+intptr_t _tspawnv(int mode, const _TCHAR *cmdname, const _TCHAR* const* argv)
 {
    _TCHAR* args;
    int ret = -1;
@@ -365,7 +365,7 @@
 /*
  * @implemented
  */
-int _tspawnle(int mode, const _TCHAR *cmdname, const _TCHAR* arg0, ... /*, NULL, const char* const* envp*/)
+intptr_t _tspawnle(int mode, const _TCHAR *cmdname, const _TCHAR* arg0, ... /*, NULL, const char* const* envp*/)
 {
    va_list argp;
    _TCHAR* args;
@@ -400,7 +400,7 @@
 /*
  * @implemented
  */
-int _tspawnve(int mode, const _TCHAR *cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
+intptr_t _tspawnve(int mode, const _TCHAR *cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
 {
    _TCHAR *args;
    _TCHAR *envs;
@@ -426,7 +426,7 @@
 /*
  * @implemented
  */
-int _tspawnvp(int mode, const _TCHAR* cmdname, const _TCHAR* const* argv)
+intptr_t _tspawnvp(int mode, const _TCHAR* cmdname, const _TCHAR* const* argv)
 {
    _TCHAR pathname[FILENAME_MAX];
 
@@ -438,7 +438,7 @@
 /*
  * @implemented
  */
-int _tspawnlp(int mode, const _TCHAR* cmdname, const _TCHAR* arg0, .../*, NULL*/)
+intptr_t _tspawnlp(int mode, const _TCHAR* cmdname, const _TCHAR* arg0, .../*, NULL*/)
 {
    va_list argp;
    _TCHAR* args;
@@ -461,7 +461,7 @@
 /*
  * @implemented
  */
-int _tspawnlpe(int mode, const _TCHAR* cmdname, const _TCHAR* arg0, .../*, NULL, const char* const* envp*/)
+intptr_t _tspawnlpe(int mode, const _TCHAR* cmdname, const _TCHAR* arg0, .../*, NULL, const char* const* envp*/)
 {
    va_list argp;
    _TCHAR* args;
@@ -496,7 +496,7 @@
 /*
  * @implemented
  */
-int _tspawnvpe(int mode, const _TCHAR* cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
+intptr_t _tspawnvpe(int mode, const _TCHAR* cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
 {
    _TCHAR pathname[FILENAME_MAX];
 
@@ -508,7 +508,7 @@
 /*
  * @implemented
  */
-int _texecl(const _TCHAR* cmdname, const _TCHAR* arg0, ...)
+intptr_t _texecl(const _TCHAR* cmdname, const _TCHAR* arg0, ...)
 {
    _TCHAR* args;
    va_list argp;
@@ -530,7 +530,7 @@
 /*
  * @implemented
  */
-int _texecv(const _TCHAR* cmdname, const _TCHAR* const* argv)
+intptr_t _texecv(const _TCHAR* cmdname, const _TCHAR* const* argv)
 {
    TRACE(MK_STR(_texecv)"('%"sT"')\n", cmdname);
    return _tspawnv(P_OVERLAY, cmdname, argv);
@@ -539,7 +539,7 @@
 /*
  * @implemented
  */
-int _texecle(const _TCHAR* cmdname, const _TCHAR* arg0, ... /*, NULL, char* const* envp */)
+intptr_t _texecle(const _TCHAR* cmdname, const _TCHAR* arg0, ... /*, NULL, char* const* envp */)
 {
    va_list argp;
    _TCHAR* args;
@@ -573,7 +573,7 @@
 /*
  * @implemented
  */
-int _texecve(const _TCHAR* cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
+intptr_t _texecve(const _TCHAR* cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
 {
    TRACE(MK_STR(_texecve)"('%"sT"')\n", cmdname);
    return _tspawnve(P_OVERLAY, cmdname, argv, envp);
@@ -582,7 +582,7 @@
 /*
  * @implemented
  */
-int _texeclp(const _TCHAR* cmdname, const _TCHAR* arg0, ...)
+intptr_t _texeclp(const _TCHAR* cmdname, const _TCHAR* arg0, ...)
 {
    _TCHAR* args;
    va_list argp;
@@ -605,7 +605,7 @@
 /*
  * @implemented
  */
-int _texecvp(const _TCHAR* cmdname, const _TCHAR* const* argv)
+intptr_t _texecvp(const _TCHAR* cmdname, const _TCHAR* const* argv)
 {
    TRACE(MK_STR(_texecvp)"('%"sT"')\n", cmdname);
    return _tspawnvp(P_OVERLAY, cmdname, argv);
@@ -614,7 +614,7 @@
 /*
  * @implemented
  */
-int _texeclpe(const _TCHAR* cmdname, const _TCHAR* arg0, ... /*, NULL, char* const* envp */)
+intptr_t _texeclpe(const _TCHAR* cmdname, const _TCHAR* arg0, ... /*, NULL, char* const* envp */)
 {
    va_list argp;
    _TCHAR* args;
@@ -649,7 +649,7 @@
 /*
  * @implemented
  */
-int _texecvpe(const _TCHAR* cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
+intptr_t _texecvpe(const _TCHAR* cmdname, const _TCHAR* const* argv, const _TCHAR* const* envp)
 {
    TRACE(MK_STR(_texecvpe)"('%"sT"')\n", cmdname);
    return _tspawnvpe(P_OVERLAY, cmdname, argv, envp);

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/file.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/file.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/file.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/file.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -132,7 +132,8 @@
 #define LOCK_FILES()    do { EnterCriticalSection(&FILE_cs); } while (0)
 #define UNLOCK_FILES()  do { LeaveCriticalSection(&FILE_cs); } while (0)
 
-static void stat64_to_stat(const struct __stat64 *buf64, struct _stat *buf)
+#ifndef _WIN64
+static void stat64_to_stati64(const struct __stat64 *buf64, struct _stati64 *buf)
 {
     buf->st_dev   = buf64->st_dev;
     buf->st_ino   = buf64->st_ino;
@@ -146,21 +147,7 @@
     buf->st_mtime = buf64->st_mtime;
     buf->st_ctime = buf64->st_ctime;
 }
-
-static void stat64_to_stati64(const struct __stat64 *buf64, struct _stati64 *buf)
-{
-    buf->st_dev   = buf64->st_dev;
-    buf->st_ino   = buf64->st_ino;
-    buf->st_mode  = buf64->st_mode;
-    buf->st_nlink = buf64->st_nlink;
-    buf->st_uid   = buf64->st_uid;
-    buf->st_gid   = buf64->st_gid;
-    buf->st_rdev  = buf64->st_rdev;
-    buf->st_size  = buf64->st_size;
-    buf->st_atime = buf64->st_atime;
-    buf->st_mtime = buf64->st_mtime;
-    buf->st_ctime = buf64->st_ctime;
-}
+#endif
 
 static inline BOOL is_valid_fd(int fd)
 {
@@ -494,7 +481,7 @@
  */
 FILE * CDECL __p__iob(void)
 {
- return &_iob[0];
+ return _iob;
 }
 
 /*********************************************************************
@@ -1165,7 +1152,7 @@
 /*********************************************************************
  *		_fstat64 (MSVCRT.@)
  */
-int CDECL _fstat64(int fd, struct __stat64* buf)
+int CDECL _fstat64(int fd, struct _stat64* buf)
 {
   DWORD dw;
   DWORD type;
@@ -1238,14 +1225,60 @@
 /*********************************************************************
  *		_fstat (MSVCRT.@)
  */
-int CDECL _fstat(int fd, struct _stat* buf)
-{ int ret;
-  struct __stat64 buf64;
-
-  ret = _fstat64(fd, &buf64);
-  if (!ret)
-      stat64_to_stat(&buf64, buf);
-  return ret;
+int CDECL _fstat(int fd, struct _stat32* buf)
+{
+  DWORD dw;
+  DWORD type;
+  BY_HANDLE_FILE_INFORMATION hfi;
+  HANDLE hand = fdtoh(fd);
+
+  TRACE(":fd (%d) stat (%p)\n",fd,buf);
+  if (hand == INVALID_HANDLE_VALUE)
+    return -1;
+
+  if (!buf)
+  {
+    WARN(":failed-NULL buf\n");
+    __set_errno(ERROR_INVALID_PARAMETER);
+    return -1;
+  }
+
+  memset(&hfi, 0, sizeof(hfi));
+  memset(buf, 0, sizeof(struct _stat32));
+  type = GetFileType(hand);
+  if (type == FILE_TYPE_PIPE)
+  {
+    buf->st_dev = buf->st_rdev = fd;
+    buf->st_mode = S_IFIFO;
+    buf->st_nlink = 1;
+  }
+  else if (type == FILE_TYPE_CHAR)
+  {
+    buf->st_dev = buf->st_rdev = fd;
+    buf->st_mode = S_IFCHR;
+    buf->st_nlink = 1;
+  }
+  else /* FILE_TYPE_DISK etc. */
+  {
+    if (!GetFileInformationByHandle(hand, &hfi))
+    {
+      WARN(":failed-last error (%d)\n",GetLastError());
+      __set_errno(ERROR_INVALID_PARAMETER);
+      return -1;
+    }
+    buf->st_mode = S_IFREG | S_IREAD;
+    if (!(hfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
+      buf->st_mode |= S_IWRITE;
+    buf->st_size  = ((__int32)hfi.nFileSizeHigh << 16) + hfi.nFileSizeLow;
+    RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastAccessTime, &dw);
+    buf->st_atime = dw;
+    RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastWriteTime, &dw);
+    buf->st_mtime = buf->st_ctime = dw;
+    buf->st_nlink = hfi.nNumberOfLinks;
+  }
+  TRACE(":dwFileAttributes = 0x%x, mode set to 0x%x\n",hfi.dwFileAttributes,
+   buf->st_mode);
+  return 0;
 }
 
 /*********************************************************************
@@ -1286,7 +1319,7 @@
 /*********************************************************************
  *		_get_osfhandle (MSVCRT.@)
  */
-long CDECL _get_osfhandle(int fd)
+intptr_t CDECL _get_osfhandle(int fd)
 {
   HANDLE hand = fdtoh(fd);
   TRACE(":fd (%d) handle (%p)\n",fd,hand);
@@ -1641,7 +1674,7 @@
 /*********************************************************************
  *		_open_osfhandle (MSVCRT.@)
  */
-int CDECL _open_osfhandle(long handle, int oflags)
+int CDECL _open_osfhandle(intptr_t handle, int oflags)
 {
   int fd;
 
@@ -1879,14 +1912,67 @@
 /*********************************************************************
  *		_stat (MSVCRT.@)
  */
-int CDECL _stat(const char* path, struct _stat * buf)
-{ int ret;
-  struct __stat64 buf64;
-
-  ret = _stat64( path, &buf64);
-  if (!ret)
-      stat64_to_stat(&buf64, buf);
-  return ret;
+int CDECL _stat32(const char* path, struct _stat32 * buf)
+{
+  DWORD dw;
+  WIN32_FILE_ATTRIBUTE_DATA hfi;
+  unsigned short mode = ALL_S_IREAD;
+  int plen;
+
+  TRACE(":file (%s) buf(%p)\n",path,buf);
+
+  if (!GetFileAttributesExA(path, GetFileExInfoStandard, &hfi))
+  {
+      TRACE("failed (%d)\n",GetLastError());
+      __set_errno(ERROR_FILE_NOT_FOUND);
+      return -1;
+  }
+
+  memset(buf,0,sizeof(struct _stat32));
+
+  /* FIXME: rdev isn't drive num, despite what the docs say-what is it?
+     Bon 011120: This FIXME seems incorrect
+                 Also a letter as first char isn't enough to be classified
+		 as a drive letter
+  */
+  if (isalpha(*path)&& (*(path+1)==':'))
+    buf->st_dev = buf->st_rdev = toupper(*path) - 'A'; /* drive num */
+  else
+    buf->st_dev = buf->st_rdev = _getdrive() - 1;
+
+  plen = strlen(path);
+
+  /* Dir, or regular file? */
+  if ((hfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
+      (path[plen-1] == '\\'))
+    mode |= (_S_IFDIR | ALL_S_IEXEC);
+  else
+  {
+    mode |= _S_IFREG;
+    /* executable? */
+    if (plen > 6 && path[plen-4] == '.')  /* shortest exe: "\x.exe" */
+    {
+      unsigned int ext = tolower(path[plen-1]) | (tolower(path[plen-2]) << 8) |
+                                 (tolower(path[plen-3]) << 16);
+      if (ext == EXE || ext == BAT || ext == CMD || ext == COM)
+          mode |= ALL_S_IEXEC;
+    }
+  }
+
+  if (!(hfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
+    mode |= ALL_S_IWRITE;
+
+  buf->st_mode  = mode;
+  buf->st_nlink = 1;
+  buf->st_size  = ((__int32)hfi.nFileSizeHigh << 16) + hfi.nFileSizeLow;
+  RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastAccessTime, &dw);
+  buf->st_atime = dw;
+  RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastWriteTime, &dw);
+  buf->st_mtime = buf->st_ctime = dw;
+  TRACE("%d %d 0x%08lx%08lx %ld %ld %ld\n", buf->st_mode,buf->st_nlink,
+        (long)(buf->st_size >> 16),(long)buf->st_size,
+        (long)buf->st_atime,(long)buf->st_mtime,(long)buf->st_ctime);
+  return 0;
 }
 
 /*********************************************************************
@@ -1968,14 +2054,63 @@
 /*********************************************************************
  *		_wstat (MSVCRT.@)
  */
-int CDECL _wstat(const wchar_t* path, struct _stat * buf)
-{
-  int ret;
-  struct __stat64 buf64;
-
-  ret = _wstat64( path, &buf64 );
-  if (!ret) stat64_to_stat(&buf64, buf);
-  return ret;
+int CDECL _wstat32(const wchar_t* path, struct _stat32 * buf)
+{
+  DWORD dw;
+  WIN32_FILE_ATTRIBUTE_DATA hfi;
+  unsigned short mode = ALL_S_IREAD;
+  int plen;
+
+  TRACE(":file (%s) buf(%p)\n",debugstr_w(path),buf);
+
+  if (!GetFileAttributesExW(path, GetFileExInfoStandard, &hfi))
+  {
+      TRACE("failed (%d)\n",GetLastError());
+      __set_errno(ERROR_FILE_NOT_FOUND);
+      return -1;
+  }
+
+  memset(buf,0,sizeof(struct _stat32));
+
+  /* FIXME: rdev isn't drive num, despite what the docs says-what is it? */
+  if (iswalpha(*path))
+    buf->st_dev = buf->st_rdev = toupperW(*path - 'A'); /* drive num */
+  else
+    buf->st_dev = buf->st_rdev = _getdrive() - 1;
+
+  plen = strlenW(path);
+
+  /* Dir, or regular file? */
+  if ((hfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ||
+      (path[plen-1] == '\\'))
+    mode |= (_S_IFDIR | ALL_S_IEXEC);
+  else
+  {
+    mode |= _S_IFREG;
+    /* executable? */
+    if (plen > 6 && path[plen-4] == '.')  /* shortest exe: "\x.exe" */
+    {
+      ULONGLONG ext = tolowerW(path[plen-1]) | (tolowerW(path[plen-2]) << 16) |
+                               ((ULONGLONG)tolowerW(path[plen-3]) << 32);
+      if (ext == WCEXE || ext == WCBAT || ext == WCCMD || ext == WCCOM)
+        mode |= ALL_S_IEXEC;
+    }
+  }
+
+  if (!(hfi.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
+    mode |= ALL_S_IWRITE;
+
+  buf->st_mode  = mode;
+  buf->st_nlink = 1;
+  buf->st_size  = ((__int32)hfi.nFileSizeHigh << 16) + hfi.nFileSizeLow;
+  RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastAccessTime, &dw);
+  buf->st_atime = dw;
+  RtlTimeToSecondsSince1970((LARGE_INTEGER *)&hfi.ftLastWriteTime, &dw);
+  buf->st_mtime = buf->st_ctime = dw;
+  TRACE("%d %d 0x%08lx%08lx %ld %ld %ld\n", buf->st_mode,buf->st_nlink,
+        (long)(buf->st_size >> 16),(long)buf->st_size,
+        (long)buf->st_atime,(long)buf->st_mtime,(long)buf->st_ctime);
+  return 0;
 }
 
 /*********************************************************************

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/find.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/find.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/find.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdio/find.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -1,6 +1,6 @@
 #include <precomp.h>
 #include <tchar.h>
-
+#include <io.h>
 /*
  * @implemented
  */

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/errno.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/errno.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/errno.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/errno.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -13,9 +13,9 @@
 /*
  * @implemented
  */
-int* __doserrno(void)
+unsigned long* __doserrno(void)
 {
-  return (int*)(&GetThreadData()->tdoserrno);
+  return (unsigned long*)(&GetThreadData()->tdoserrno);
 }
 
 /*

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/getenv.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/getenv.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/getenv.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/getenv.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -9,7 +9,7 @@
  */
 
 #include <precomp.h>
-#undef environ
+//#undef environ
 
 /*
  * @implemented

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/rot.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/rot.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/rot.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/rot.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -10,6 +10,7 @@
 
 #include <stdlib.h>
 
+unsigned int _rotr( unsigned int value, int shift );
 /*
  * @implemented
  */

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/swab.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/swab.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/swab.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/stdlib/swab.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -15,8 +15,7 @@
  *
  * copy this swab from wine cvs 2006-05-24
  */
-void _swab (const char *  src,  char *  dst,  size_t  sizeToCopy
- )
+void _swab (char *  src,  char *  dst,  int  sizeToCopy)
 
 {
  if (sizeToCopy > 1)

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/atol.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/atol.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/atol.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/atol.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -11,9 +11,9 @@
   return (long)_ttoi64(str);
 }
 
-int _atoldbl(long double *value, const char *str)
+int _atoldbl(_LDOUBLE *value, char *str)
 {
     /* FIXME needs error checking for huge/small values */
    //*value = strtold(str,0);
-   return 0;
+   return -1;
 }

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/ctype.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/ctype.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/ctype.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/ctype.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -4,6 +4,7 @@
 #include <ctype.h>
 
 #undef _pctype
+#undef _pwctype
 
 /* MS's CRT header defines all that, and we actually implement that */
 #undef iswalnum
@@ -22,11 +23,13 @@
 #undef iswspace
 #undef iswxdigit
 #undef __toascii
+#undef _tolower
+#undef _toupper
 
 #define upalpha ('A' - 'a')
 
 
-unsigned short _ctype[] = {
+const unsigned short _ctype[] = {
 	0,			/* <EOF>, 0xFFFF */
 	_CONTROL,		/* CTRL+@, 0x00 */
 	_CONTROL,		/* CTRL+A, 0x01 */
@@ -545,7 +548,7 @@
  */
 int __toascii(int c)
 {
-   return((unsigned)(c) & 0x7f);
+   return((unsigned int)(c) & 0x7f);
 }
 
 /*

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/scanf.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/scanf.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/scanf.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/string/scanf.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -24,8 +24,6 @@
  */
 
 #include <precomp.h>
-
-#include <wchar.h>
 #include <ctype.h>
 
 // HACK for LIBCNT
@@ -183,7 +181,7 @@
 /*********************************************************************
  *		_cscanf (MSVCRT.@)
  */
-int _cscanf(/*const*/ char *format, ...)
+int _cscanf(const char *format, ...)
 {
     va_list valist;
     int res;

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/ctime.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/ctime.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/ctime.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/ctime.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -1450,12 +1450,12 @@
 /*********************************************************************
  *              _dstbias (MSVCRT.@)
  */
-int _dstbias = 0;
+long _dstbias = 0;
 
 /*********************************************************************
  *              __p_dstbias (MSVCRT.@)
  */
-int * __p__dstbias(void)
+long * __p__dstbias(void)
 {
     return &_dstbias;
 }

Modified: branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/difftime.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/difftime.c?rev=35810&r1=35809&r2=35810&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/difftime.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/sdk/crt/time/difftime.c [iso-8859-1] Sat Aug 30 11:55:35 2008
@@ -5,7 +5,7 @@
  * @implemented
  */
 double
-difftime(time_t time1, time_t time0)
+difftime(time_t time1, time_t time2)
 {
-  return time1-time0;
+  return (double)(time1 - time2);
 }



More information about the Ros-diffs mailing list