Add:support_libc:Missing functions for vc
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Fri, 30 Sep 2011 12:31:02 +0000 (12:31 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Fri, 30 Sep 2011 12:31:02 +0000 (12:31 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@4813 ffa7fe5e-494d-0410-b361-a75ebd5db220

28 files changed:
navit/navit/support/libc/CMakeLists.txt
navit/navit/support/libc/_mingw.h [new file with mode: 0644]
navit/navit/support/libc/abort.c [new file with mode: 0644]
navit/navit/support/libc/bsearch.c [new file with mode: 0644]
navit/navit/support/libc/calloc.c [new file with mode: 0644]
navit/navit/support/libc/chsize.c [new file with mode: 0644]
navit/navit/support/libc/close.c [new file with mode: 0644]
navit/navit/support/libc/fcntl.h [new file with mode: 0644]
navit/navit/support/libc/getopt.h [new file with mode: 0644]
navit/navit/support/libc/gmtime.c [new file with mode: 0644]
navit/navit/support/libc/io.h [new file with mode: 0644]
navit/navit/support/libc/libc.c
navit/navit/support/libc/localtime.c [new file with mode: 0644]
navit/navit/support/libc/lseek.c [new file with mode: 0644]
navit/navit/support/libc/math.h [new file with mode: 0644]
navit/navit/support/libc/mkdir.c [new file with mode: 0644]
navit/navit/support/libc/mktime.c [new file with mode: 0644]
navit/navit/support/libc/open.c [new file with mode: 0644]
navit/navit/support/libc/process.h [new file with mode: 0644]
navit/navit/support/libc/read.c [new file with mode: 0644]
navit/navit/support/libc/rename.c [new file with mode: 0644]
navit/navit/support/libc/stat.c [new file with mode: 0644]
navit/navit/support/libc/time.c [new file with mode: 0644]
navit/navit/support/libc/timeutil.c [new file with mode: 0644]
navit/navit/support/libc/timeutil.h [new file with mode: 0644]
navit/navit/support/libc/unistd.h [new file with mode: 0644]
navit/navit/support/libc/unlink.c [new file with mode: 0644]
navit/navit/support/libc/write.c [new file with mode: 0644]

index 44fb89c..81489da 100644 (file)
@@ -1 +1 @@
-supportlib_add_library(support_libc libc.c libc_init.c)
+supportlib_add_library(support_libc libc.c libc_init.c unlink.c rename.c time.c open.c abort.c mkdir.c lseek.c stat.c close.c chsize.c read.c write.c strcasecmp localtime.c gmtime.c mktime.c timeutil.c calloc.c bsearch.c)
diff --git a/navit/navit/support/libc/_mingw.h b/navit/navit/support/libc/_mingw.h
new file mode 100644 (file)
index 0000000..fb0638d
--- /dev/null
@@ -0,0 +1,307 @@
+#ifndef __MINGW_H
+/*
+ * _mingw.h
+ *
+ * Mingw specific macros included by ALL include files.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ *  Created by Mumit Khan  <khan@xraylith.wisc.edu>
+ *
+ *  THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ *  This source code is offered for use in the public domain. You may
+ *  use, modify or distribute it freely.
+ *
+ *  This code is distributed in the hope that it will be useful but
+ *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ *  DISCLAIMED. This includes but is not limited to warranties of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#define __MINGW_H
+
+#define __MINGW32_VERSION           3.16
+#define __MINGW32_MAJOR_VERSION     3
+#define __MINGW32_MINOR_VERSION     16
+#define __MINGW32_PATCHLEVEL        0
+
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* These are defined by the user (or the compiler)
+   to specify how identifiers are imported from a DLL.
+
+   __DECLSPEC_SUPPORTED            Defined if dllimport attribute is supported.
+   __MINGW_IMPORT                  The attribute definition to specify imported
+                                   variables/functions.
+   _CRTIMP                         As above.  For MS compatibility.
+   __MINGW32_VERSION               Runtime version.
+   __MINGW32_MAJOR_VERSION         Runtime major version.
+   __MINGW32_MINOR_VERSION         Runtime minor version.
+   __MINGW32_BUILD_DATE            Runtime build date.
+
+   Macros to enable MinGW features which deviate from standard MSVC
+   compatible behaviour; these may be specified directly in user code,
+   activated implicitly, (e.g. by specifying _POSIX_C_SOURCE or such),
+   or by inclusion in __MINGW_FEATURES__:
+
+   __USE_MINGW_ANSI_STDIO          Select a more ANSI C99 compatible
+                                   implementation of printf() and friends.
+
+   Other macros:
+
+   __int64                         define to be long long.  Using a typedef
+                                   doesn't work for "unsigned __int64"
+
+   All headers should include this first, and then use __DECLSPEC_SUPPORTED
+   to choose between the old ``__imp__name'' style or __MINGW_IMPORT
+   style declarations.  */
+
+
+/* Manifest definitions identifying the flag bits, controlling activation
+ * of MinGW features, as specified by the user in __MINGW_FEATURES__.
+ */
+#define __MINGW_ANSI_STDIO__           0x0000000000000001ULL
+/*
+ * The following three are not yet formally supported; they are
+ * included here, to document anticipated future usage.
+ */
+#define __MINGW_LC_EXTENSIONS__        0x0000000000000050ULL
+#define __MINGW_LC_MESSAGES__          0x0000000000000010ULL
+#define __MINGW_LC_ENVVARS__           0x0000000000000040ULL
+
+/* Try to avoid problems with outdated checks for GCC __attribute__ support.  */
+#undef __attribute__
+
+#if defined (__PCC__)
+#  undef __DECLSPEC_SUPPORTED
+# ifndef __MINGW_IMPORT
+#  define __MINGW_IMPORT extern
+# endif
+# ifndef _CRTIMP
+#  define _CRTIMP
+# endif
+# ifndef __cdecl 
+#  define __cdecl  _Pragma("cdecl")
+# endif
+# ifndef __stdcall
+#  define __stdcall _Pragma("stdcall")
+# endif
+# ifndef __int64
+#  define __int64 long long
+# endif
+# ifndef __int32
+#  define __int32 long
+# endif
+# ifndef __int16
+#  define __int16 short
+# endif
+# ifndef __int8
+#  define __int8 char
+# endif
+# ifndef __small
+#  define __small char
+# endif
+# ifndef __hyper
+#  define __hyper long long
+# endif
+# ifndef __volatile__
+#  define __volatile__ volatile
+# endif
+# ifndef __restrict__
+#  define __restrict__ restrict
+# endif
+# define NONAMELESSUNION
+#elif defined(__GNUC__)
+# ifdef __declspec
+#  ifndef __MINGW_IMPORT
+   /* Note the extern. This is needed to work around GCC's
+      limitations in handling dllimport attribute.  */
+#   define __MINGW_IMPORT  extern __attribute__ ((__dllimport__))
+#  endif
+#  ifndef _CRTIMP
+#   ifdef __USE_CRTIMP
+#    define _CRTIMP  __attribute__ ((dllimport))
+#   else
+#    define _CRTIMP
+#   endif
+#  endif
+#  define __DECLSPEC_SUPPORTED
+# else /* __declspec */
+#  undef __DECLSPEC_SUPPORTED
+#  undef __MINGW_IMPORT
+#  ifndef _CRTIMP
+#   define _CRTIMP
+#  endif
+# endif /* __declspec */
+/*
+ * The next two defines can cause problems if user code adds the
+ * __cdecl attribute like so:
+ * void __attribute__ ((__cdecl)) foo(void); 
+ */
+# ifndef __cdecl 
+#  define __cdecl  __attribute__ ((__cdecl__))
+# endif
+# ifndef __stdcall
+#  define __stdcall __attribute__ ((__stdcall__))
+# endif
+# ifndef __int64
+#  define __int64 long long
+# endif
+# ifndef __int32
+#  define __int32 long
+# endif
+# ifndef __int16
+#  define __int16 short
+# endif
+# ifndef __int8
+#  define __int8 char
+# endif
+# ifndef __small
+#  define __small char
+# endif
+# ifndef __hyper
+#  define __hyper long long
+# endif
+#else /* ! __GNUC__ && ! __PCC__ */
+# ifndef __MINGW_IMPORT
+#  define __MINGW_IMPORT  __declspec(dllimport)
+# endif
+# ifndef _CRTIMP
+#  define _CRTIMP  __declspec(dllimport)
+# endif
+# define __DECLSPEC_SUPPORTED
+# define __attribute__(x) /* nothing */
+#endif
+
+#if defined (__GNUC__) && defined (__GNUC_MINOR__)
+#define __MINGW_GNUC_PREREQ(major, minor) \
+  (__GNUC__ > (major) \
+   || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
+#else
+#define __MINGW_GNUC_PREREQ(major, minor)  0
+#endif
+
+#ifdef __cplusplus
+#abort1
+# define __CRT_INLINE inline
+#else
+# if __GNUC_STDC_INLINE__
+#abort2
+#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
+# else
+#  ifdef __COREDLL__
+#abort3
+   /* There isn't any out-of-line version of most of 
+      these functions in coredll.dll, so we need this for -O0,
+      or for -fno-inline.  This is still problematic if the user
+      tries t  o take the address of these functions.  We will slowly
+      add out-of-line copies as those cases are found.
+      Note: We can't use static inline here, as most of these functions
+      will be declared elsew   here with external linkage, and gcc will
+      barf on that.  */
+#   define __CRT_INLINE extern __inline__ __attribute__((__always_inline__))
+#  else
+#   define __CRT_INLINE
+#  endif
+# endif
+#endif
+
+#ifdef __cplusplus
+# define __UNUSED_PARAM(x)
+#else
+# ifdef __GNUC__
+#  define __UNUSED_PARAM(x) x __attribute__ ((__unused__))
+# else
+#  define __UNUSED_PARAM(x) x
+# endif
+#endif
+
+#ifdef __GNUC__
+#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))
+#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))
+#else
+#define __MINGW_ATTRIB_NORETURN
+#define __MINGW_ATTRIB_CONST
+#endif
+
+#if __MINGW_GNUC_PREREQ (3, 0)
+#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))
+#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))
+#else
+#define __MINGW_ATTRIB_MALLOC
+#define __MINGW_ATTRIB_PURE
+#endif
+
+/* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
+   variadiac macro facility, because variadic macros cause syntax
+   errors with  --traditional-cpp.  */
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))
+#else
+#define __MINGW_ATTRIB_NONNULL(arg)
+#endif /* GNUC >= 3.3 */
+
+#if defined(UNDER_CE) && defined(__arm__)
+/* ARM Windows CE is not underscored.  */
+# define __U(SYM) _ ## SYM
+# define __IMP(S) __imp_ ## S
+#elif defined(UNDER_CE) && defined(i386)
+/* i386 Windows CE versions are underscored.  */
+# define __U(SYM) SYM
+# define __IMP(S) _imp__ ## S
+#else
+/* Desktop i386 Windows versions are underscored.  */
+# define __U(SYM) SYM
+# define __IMP(S) _imp__ ## S
+#endif
+
+#if  __MINGW_GNUC_PREREQ (3, 1)
+#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))
+#else
+#define __MINGW_ATTRIB_DEPRECATED
+#endif /* GNUC >= 3.1 */
+#if  __MINGW_GNUC_PREREQ (3, 3)
+#define __MINGW_NOTHROW __attribute__ ((__nothrow__))
+#else
+#define __MINGW_NOTHROW
+#endif /* GNUC >= 3.3 */
+
+
+/* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW.  This will
+allow GCC to optimize away some EH unwind code, at least in DW2 case.  */
+
+#if defined __MSVCRT__ && !defined (__MSVCRT_VERSION__)
+/*  High byte is the major version, low byte is the minor. */
+# define __MSVCRT_VERSION__ 0x0600
+#endif
+
+/* Activation of MinGW specific extended features:
+ */
+#ifndef __USE_MINGW_ANSI_STDIO
+/*
+ * If user didn't specify it explicitly...
+ */
+# if   defined __STRICT_ANSI__  ||  defined _ISOC99_SOURCE \
+   ||  defined _POSIX_SOURCE    ||  defined _POSIX_C_SOURCE \
+   ||  defined _XOPEN_SOURCE    ||  defined _XOPEN_SOURCE_EXTENDED \
+   ||  defined _GNU_SOURCE      ||  defined _BSD_SOURCE \
+   ||  defined _SVID_SOURCE
+   /*
+    * but where any of these source code qualifiers are specified,
+    * then assume ANSI I/O standards are preferred over Microsoft's...
+    */
+#  define __USE_MINGW_ANSI_STDIO    1
+# else
+   /*
+    * otherwise use whatever __MINGW_FEATURES__ specifies...
+    */
+#  define __USE_MINGW_ANSI_STDIO    (__MINGW_FEATURES__ & __MINGW_ANSI_STDIO__)
+# endif
+#endif
+
+#endif /* __MINGW_H */
diff --git a/navit/navit/support/libc/abort.c b/navit/navit/support/libc/abort.c
new file mode 100644 (file)
index 0000000..11d405c
--- /dev/null
@@ -0,0 +1,9 @@
+#include <windows.h>
+
+/* Only needed on Windows CE. */
+
+void abort(void)
+{
+  TerminateProcess (GetCurrentProcess(), 1);
+  while (1); /* Kill 'noreturn function does return' warning.  */
+}
diff --git a/navit/navit/support/libc/bsearch.c b/navit/navit/support/libc/bsearch.c
new file mode 100644 (file)
index 0000000..2708688
--- /dev/null
@@ -0,0 +1,81 @@
+/*-
+ * Copyright (c) 1990, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* <wince> */
+
+/* bsearch is in both stdlib.h and search.h.  We include both
+   to catch possible differences.  */
+#include <stdlib.h>
+/* #include <search.h> */
+#include <stdint.h>
+
+/* </wince> */
+
+
+/*
+ * Perform a binary search.
+ *
+ * The code below is a bit sneaky.  After a comparison fails, we
+ * divide the work in half by moving either left or right. If lim
+ * is odd, moving left simply involves halving lim: e.g., when lim
+ * is 5 we look at item 2, so we change lim to 2 so that we will
+ * look at items 0 & 1.  If lim is even, the same applies.  If lim
+ * is odd, moving right again involes halving lim, this time moving
+ * the base up one item past p: e.g., when lim is 5 we change base
+ * to item 3 and make lim 2 so that we will look at items 3 and 4.
+ * If lim is even, however, we have to shrink it by one before
+ * halving: e.g., when lim is 4, we still looked at item 2, so we
+ * have to make lim 3, then halve, obtaining 1, so that we will only
+ * look at item 3.
+ */
+void *
+bsearch(key, base0, nmemb, size, compar)
+        const void *key;
+        const void *base0;
+        size_t nmemb;
+        size_t size;
+        int (*compar)(const void *, const void *);
+{
+        const char *base = base0;
+        size_t lim;
+        int cmp;
+        const void *p;
+
+        for (lim = nmemb; lim != 0; lim >>= 1) {
+                p = base + (lim >> 1) * size;
+                cmp = (*compar)(key, p);
+                if (cmp == 0)
+                        return ((void *)(unsigned int *)p);
+                if (cmp > 0) {  /* key > p: move right */
+                        base = (const char *)p + size;
+                        lim--;
+                }               /* else move left */
+        }
+        return (NULL);
+}
diff --git a/navit/navit/support/libc/calloc.c b/navit/navit/support/libc/calloc.c
new file mode 100644 (file)
index 0000000..147ea73
--- /dev/null
@@ -0,0 +1,8 @@
+void *
+calloc(int nelem, int size)
+{
+       void *ret=malloc(nelem*size);
+       if (ret) 
+               memset(ret, 0, nelem*size);
+       return ret;
+}
diff --git a/navit/navit/support/libc/chsize.c b/navit/navit/support/libc/chsize.c
new file mode 100644 (file)
index 0000000..778949a
--- /dev/null
@@ -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);
+}
diff --git a/navit/navit/support/libc/close.c b/navit/navit/support/libc/close.c
new file mode 100644 (file)
index 0000000..3b04734
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * close.c: close implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include <windows.h>
+#include <unistd.h>
+
+int
+_close (int fildes)
+{
+  if (CloseHandle ((HANDLE) fildes))
+    return 0;
+  return -1;
+}
+
+int
+close (int fildes)
+{
+  return _close (fildes);
+}
diff --git a/navit/navit/support/libc/fcntl.h b/navit/navit/support/libc/fcntl.h
new file mode 100644 (file)
index 0000000..9bff935
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * fcntl.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Access constants for _open. Note that the permissions constants are
+ * in sys/stat.h (ick).
+ *
+ */
+#ifndef _FCNTL_H_
+#define _FCNTL_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/*
+ * It appears that fcntl.h should include io.h for compatibility...
+ */
+#include <io.h>
+
+/* Specifiy one of these flags to define the access mode. */
+#define        _O_RDONLY       0
+#define _O_WRONLY      1
+#define _O_RDWR                2
+
+/* Mask for access mode bits in the _open flags. */
+#define _O_ACCMODE     (_O_RDONLY|_O_WRONLY|_O_RDWR)
+
+#define        _O_APPEND       0x0008  /* Writes will add to the end of the file. */
+
+#define        _O_RANDOM       0x0010
+#define        _O_SEQUENTIAL   0x0020
+#define        _O_TEMPORARY    0x0040  /* Make the file dissappear after closing.
+                                * WARNING: Even if not created by _open! */
+#define        _O_NOINHERIT    0x0080
+
+#define        _O_CREAT        0x0100  /* Create the file if it does not exist. */
+#define        _O_TRUNC        0x0200  /* Truncate the file if it does exist. */
+#define        _O_EXCL         0x0400  /* Open only if the file does not exist. */
+
+#define _O_SHORT_LIVED  0x1000
+
+/* NOTE: Text is the default even if the given _O_TEXT bit is not on. */
+#define        _O_TEXT         0x4000  /* CR-LF in file becomes LF in memory. */
+#define        _O_BINARY       0x8000  /* Input and output is not translated. */
+#define        _O_RAW          _O_BINARY
+
+#if (__MSVCRT_VERSION__ >= 0x0800)
+#define _O_WTEXT       0x10000
+#define _O_U16TEXT     0x20000
+#define _O_U8TEXT      0x40000
+#endif
+
+#ifndef        _NO_OLDNAMES
+
+/* POSIX/Non-ANSI names for increased portability */
+#define        O_RDONLY        _O_RDONLY
+#define O_WRONLY       _O_WRONLY
+#define O_RDWR         _O_RDWR
+#define O_ACCMODE      _O_ACCMODE
+#define        O_APPEND        _O_APPEND
+#define        O_CREAT         _O_CREAT
+#define        O_TRUNC         _O_TRUNC
+#define        O_EXCL          _O_EXCL
+#define        O_TEXT          _O_TEXT
+#define        O_BINARY        _O_BINARY
+#define        O_TEMPORARY     _O_TEMPORARY
+#define O_NOINHERIT    _O_NOINHERIT
+#define O_SEQUENTIAL   _O_SEQUENTIAL
+#define        O_RANDOM        _O_RANDOM
+
+#endif /* Not _NO_OLDNAMES */
+
+#endif /* Not _FCNTL_H_ */
diff --git a/navit/navit/support/libc/getopt.h b/navit/navit/support/libc/getopt.h
new file mode 100644 (file)
index 0000000..406bbf5
--- /dev/null
@@ -0,0 +1,111 @@
+#ifndef __GETOPT_H__
+/* 
+ * getopt.h
+ *
+ * $Id: getopt.h,v 1.4 2009/01/04 17:35:36 keithmarshall Exp $
+ *
+ * Defines constants and function prototypes required to implement
+ * the `getopt', `getopt_long' and `getopt_long_only' APIs.
+ *
+ * This file is part of the MinGW32 package set.
+ *
+ * Contributed by Keith Marshall <keithmarshall@users.sourceforge.net>
+ *
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * $Revision: 1.4 $
+ * $Author: keithmarshall $
+ * $Date: 2009/01/04 17:35:36 $
+ *
+ */
+#define __GETOPT_H__
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int optind;             /* index of first non-option in argv      */
+extern int optopt;             /* single option character, as parsed     */
+extern int opterr;             /* flag to enable built-in diagnostics... */
+                               /* (user may set to zero, to suppress)    */
+
+extern char *optarg;           /* pointer to argument of current option  */
+
+extern int getopt( int, char * const [], const char * );
+
+#ifdef _BSD_SOURCE
+/*
+ * BSD adds the non-standard `optreset' feature, for reinitialisation
+ * of `getopt' parsing.  We support this feature, for applications which
+ * proclaim their BSD heritage, before including this header; however,
+ * to maintain portability, developers are advised to avoid it.
+ */
+# define optreset  __mingw_optreset
+
+extern int optreset;
+#endif
+#ifdef __cplusplus
+}
+#endif
+/*
+ * POSIX requires the `getopt' API to be specified in `unistd.h';
+ * thus, `unistd.h' includes this header.  However, we do not want
+ * to expose the `getopt_long' or `getopt_long_only' APIs, when
+ * included in this manner.  Thus, close the standard __GETOPT_H__
+ * declarations block, and open an additional __GETOPT_LONG_H__
+ * specific block, only when *not* __UNISTD_H_SOURCED__, in which
+ * to declare the extended API.
+ */
+#endif /* !defined(__GETOPT_H__) */
+#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__)
+#define __GETOPT_LONG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct option          /* specification for a long form option...      */
+{
+  const char *name;            /* option name, without leading hyphens */
+  int         has_arg;         /* does it take an argument?            */
+  int        *flag;            /* where to save its status, or NULL    */
+  int         val;             /* its associated status value          */
+};
+
+enum                   /* permitted values for its `has_arg' field...  */
+{
+  no_argument = 0,             /* option never takes an argument       */
+  required_argument,           /* option always requires an argument   */
+  optional_argument            /* option may take an argument          */
+};
+
+extern int getopt_long( int, char * const [], const char *, const struct option *, int * );
+extern int getopt_long_only( int, char * const [], const char *, const struct option *, int * );
+/*
+ * Previous MinGW implementation had...
+ */
+#ifndef HAVE_DECL_GETOPT
+/*
+ * ...for the long form API only; keep this for compatibility.
+ */
+# define HAVE_DECL_GETOPT      1
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */
+/* $RCSfile: getopt.h,v $Revision: 1.4 $: end of file */
diff --git a/navit/navit/support/libc/gmtime.c b/navit/navit/support/libc/gmtime.c
new file mode 100644 (file)
index 0000000..aa33e09
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * gmtime.c: gmtime implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include "timeutil.h"
+
+struct tm *
+gmtime(const time_t *t)
+{
+  FILETIME f;
+  SYSTEMTIME s;
+  static struct tm tms;
+       
+  __time_t_to_FILETIME (*t, &f);
+  FileTimeToSystemTime (&f, &s);
+  __SYSTEMTIME_to_tm (&s, &tms);
+  return &tms;
+}
diff --git a/navit/navit/support/libc/io.h b/navit/navit/support/libc/io.h
new file mode 100644 (file)
index 0000000..9c3da7c
--- /dev/null
@@ -0,0 +1,372 @@
+/*
+ * io.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * System level I/O functions and types.
+ *
+ */
+#ifndef        _IO_H_
+#define        _IO_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+/* MSVC's io.h contains the stuff from dir.h, so I will too.
+ * NOTE: This also defines off_t, the file offset type, through
+ *       an inclusion of sys/types.h */
+
+#include <sys/types.h> /* To get time_t.  */
+
+/*
+ * Attributes of files as returned by _findfirst et al.
+ */
+#define        _A_NORMAL       0x00000000
+#define        _A_RDONLY       0x00000001
+#define        _A_HIDDEN       0x00000002
+#define        _A_SYSTEM       0x00000004
+#define        _A_VOLID        0x00000008
+#define        _A_SUBDIR       0x00000010
+#define        _A_ARCH         0x00000020
+
+
+#ifndef RC_INVOKED
+
+#ifndef _INTPTR_T_DEFINED
+#define _INTPTR_T_DEFINED
+#ifdef _WIN64
+  typedef __int64 intptr_t;
+#else
+  typedef int intptr_t;
+#endif
+#endif
+
+#ifndef        _FSIZE_T_DEFINED
+typedef        unsigned long   _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+/*
+ * The maximum length of a file name. You should use GetVolumeInformation
+ * instead of this constant. But hey, this works.
+ * Also defined in stdio.h.
+ */
+#ifndef FILENAME_MAX
+#define        FILENAME_MAX    (260)
+#endif
+
+/*
+ * The following structure is filled in by _findfirst or _findnext when
+ * they succeed in finding a match.
+ */
+#ifndef _FINDDATA_T_DEFINED
+struct _finddata_t
+{
+       unsigned        attrib;         /* Attributes, see constants above. */
+       time_t          time_create;
+       time_t          time_access;    /* always midnight local time */
+       time_t          time_write;
+       _fsize_t        size;
+       char            name[FILENAME_MAX];     /* may include spaces. */
+};
+
+#ifndef __COREDLL__
+
+struct _finddatai64_t {
+    unsigned    attrib;
+    time_t      time_create;
+    time_t      time_access;
+    time_t      time_write;
+    __int64     size;
+    char        name[FILENAME_MAX];
+};
+
+#if __MSVCRT_VERSION__ >= 0x0601
+struct __finddata64_t {
+        unsigned    attrib;
+        __time64_t  time_create;
+        __time64_t  time_access;
+        __time64_t  time_write;
+/* 8 bytes are returned so it can't be _fsize_t */
+        __int64    size;
+         char       name[FILENAME_MAX];
+};
+#endif
+
+#endif
+
+#define _FINDDATA_T_DEFINED
+#endif /* _FINDDATA_T_DEFINED */
+
+#ifndef _WFINDDATA_T_DEFINED
+struct _wfinddata_t {
+       unsigned        attrib;
+       time_t          time_create;    /* -1 for FAT file systems */
+       time_t          time_access;    /* -1 for FAT file systems */
+       time_t          time_write;
+       _fsize_t        size;
+       wchar_t         name[FILENAME_MAX];     /* may include spaces. */
+};
+
+#ifndef __COREDLL__
+
+struct _wfinddatai64_t {
+    unsigned    attrib;
+    time_t      time_create;
+    time_t      time_access;
+    time_t      time_write;
+    __int64     size;
+    wchar_t     name[FILENAME_MAX];
+};
+
+#if __MSVCRT_VERSION__ >= 0x0601
+struct __wfinddata64_t {
+        unsigned    attrib;
+        __time64_t  time_create;
+        __time64_t  time_access;
+        __time64_t  time_write;
+/* 8 bytes are returned so it can't be _fsize_t */
+        __int64    size;
+        wchar_t     name[FILENAME_MAX];
+};
+#endif
+
+#endif /* __COREDLL__ */
+
+#define _WFINDDATA_T_DEFINED
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Functions for searching for files. _findfirst returns -1 if no match
+ * is found. Otherwise it returns a handle to be used in _findnext and
+ * _findclose calls. _findnext also returns -1 if no match could be found,
+ * and 0 if a match was found. Call _findclose when you are finished.
+ */
+/*  FIXME: Should these all use intptr_t, as per recent MSDN docs?  */
+_CRTIMP long __cdecl __MINGW_NOTHROW _findfirst (const char*, struct _finddata_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _findnext (long, struct _finddata_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _findclose (long);
+
+#ifndef UNDER_CE
+_CRTIMP int __cdecl __MINGW_NOTHROW _chdir (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW _getcwd (char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW _mktemp (char*);
+#endif
+_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _rmdir (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _chmod (const char*, int);
+
+#ifdef __MSVCRT__
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW _filelengthi64(int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _findfirsti64(const char*, struct _finddatai64_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _findnexti64(long, struct _finddatai64_t*);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW _lseeki64(int, __int64, int);
+_CRTIMP __int64 __cdecl __MINGW_NOTHROW _telli64(int);
+/* These require newer versions of msvcrt.dll (6.1 or higher). */ 
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _findfirst64(const char*, struct __finddata64_t*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _findnext64(intptr_t, struct __finddata64_t*); 
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#ifndef __NO_MINGW_LFS
+__CRT_INLINE off64_t lseek64 (int, off64_t, int);
+__CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence)
+{
+  return _lseeki64(fd, (__int64) offset, whence);
+}
+#endif
+
+#endif /* __MSVCRT__ */
+
+#ifndef _NO_OLDNAMES
+
+#ifndef _UWIN
+#ifndef UNDER_CE
+_CRTIMP int __cdecl __MINGW_NOTHROW chdir (const char*);
+_CRTIMP char* __cdecl __MINGW_NOTHROW getcwd (char*, int);
+_CRTIMP char* __cdecl __MINGW_NOTHROW mktemp (char*);
+#endif
+_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW rmdir (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW chmod (const char*, int);
+#endif /* _UWIN */
+
+#endif /* Not _NO_OLDNAMES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+/* TODO: Maximum number of open handles has not been tested, I just set
+ * it the same as FOPEN_MAX. */
+#define        HANDLE_MAX      FOPEN_MAX
+
+/* Some defines for _access nAccessMode (MS doesn't define them, but
+ * it doesn't seem to hurt to add them). */
+#define        F_OK    0       /* Check for file existence */
+/* Well maybe it does hurt.  On newer versions of MSVCRT, an access mode
+   of 1 causes invalid parameter error. */   
+#define        X_OK    1       /* MS access() doesn't check for execute permission. */
+#define        W_OK    2       /* Check for write permission */
+#define        R_OK    4       /* Check for read permission */
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _access (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _chsize (int, long);
+_CRTIMP int __cdecl __MINGW_NOTHROW _close (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _commit(int);
+
+/* NOTE: The only significant bit in unPermissions appears to be bit 7 (0x80),
+ *       the "owner write permission" bit (on FAT). */
+_CRTIMP int __cdecl __MINGW_NOTHROW _creat (const char*, int);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _dup (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _dup2 (int, int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _filelength (int);
+_CRTIMP long __cdecl __MINGW_NOTHROW _get_osfhandle (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _isatty (int);
+
+/* In a very odd turn of events this function is excluded from those
+ * files which define _STREAM_COMPAT. This is required in order to
+ * build GNU libio because of a conflict with _eof in streambuf.h
+ * line 107. Actually I might just be able to change the name of
+ * the enum member in streambuf.h... we'll see. TODO */
+#ifndef        _STREAM_COMPAT
+_CRTIMP int __cdecl __MINGW_NOTHROW _eof (int);
+#endif
+
+/* LK_... locking commands defined in sys/locking.h. */
+_CRTIMP int __cdecl __MINGW_NOTHROW _locking (int, int, long);
+
+_CRTIMP long __cdecl __MINGW_NOTHROW _lseek (int, long, int);
+
+/* Optional third argument is unsigned unPermissions. */
+_CRTIMP int __cdecl __MINGW_NOTHROW _open (const char*, int, ...);
+
+#ifndef __COREDLL__
+_CRTIMP int __cdecl __MINGW_NOTHROW _open_osfhandle (long, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _pipe (int *, unsigned int, int);
+#endif /* __COREDLL__ */
+_CRTIMP int __cdecl __MINGW_NOTHROW _read (int, void*, unsigned int);
+#ifndef __COREDLL__
+_CRTIMP int __cdecl __MINGW_NOTHROW _setmode (int, int);
+/* MS puts remove & rename (but not wide versions) in io.h as well
+   as in stdio.h. */
+_CRTIMP int __cdecl __MINGW_NOTHROW    remove (const char*);
+#endif
+_CRTIMP int __cdecl __MINGW_NOTHROW    rename (const char*, const char*);
+#ifndef __COREDLL__
+/* SH_... flags for nShFlags defined in share.h
+ * Optional fourth argument is unsigned unPermissions */
+_CRTIMP int __cdecl __MINGW_NOTHROW _sopen (const char*, int, int, ...);
+
+_CRTIMP long __cdecl __MINGW_NOTHROW _tell (int);
+/* Should umask be in sys/stat.h and/or sys/types.h instead? */
+_CRTIMP int __cdecl __MINGW_NOTHROW _umask (int);
+#endif /* __COREDLL__ */
+_CRTIMP int __cdecl __MINGW_NOTHROW _unlink (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _write (int, const void*, unsigned int);
+
+/* Wide character versions. Also declared in wchar.h. */
+/* Not in crtdll.dll */
+#if !defined (_WIO_DEFINED)
+#if defined (__MSVCRT__)
+_CRTIMP int __cdecl __MINGW_NOTHROW _waccess(const wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wchmod(const wchar_t*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wcreat(const wchar_t*, int);
+#endif
+#if defined (__MSVCRT__) || defined (__COREDLL__)
+_CRTIMP long __cdecl __MINGW_NOTHROW _wfindfirst(const wchar_t*, struct _wfinddata_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wfindnext(long, struct _wfinddata_t *);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wopen(const wchar_t*, int, ...);
+#endif
+#if defined (__MSVCRT__)
+_CRTIMP int __cdecl __MINGW_NOTHROW _wunlink(const wchar_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wsopen(const wchar_t*, int, int, ...);
+_CRTIMP wchar_t * __cdecl __MINGW_NOTHROW _wmktemp(wchar_t*);
+_CRTIMP long __cdecl __MINGW_NOTHROW _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _wfindnexti64(long, struct _wfinddatai64_t*);
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wfindfirst64(const wchar_t*, struct __wfinddata64_t*); 
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _wfindnext64(intptr_t, struct __wfinddata64_t*);
+#endif
+#endif /* defined (__MSVCRT__) */
+#define _WIO_DEFINED
+#endif /* _WIO_DEFINED */
+
+#ifndef        _NO_OLDNAMES
+/*
+ * Non-underscored versions of non-ANSI functions to improve portability.
+ * These functions live in libmoldname.a.
+ */
+
+#ifndef _UWIN
+_CRTIMP int __cdecl __MINGW_NOTHROW access (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW chsize (int, long );
+_CRTIMP int __cdecl __MINGW_NOTHROW close (int);
+#ifndef __COREDLL__
+_CRTIMP int __cdecl __MINGW_NOTHROW creat (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW dup (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW dup2 (int, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW eof (int);
+_CRTIMP long __cdecl __MINGW_NOTHROW filelength (int);
+#endif /* __COREDLL__ */
+_CRTIMP int __cdecl __MINGW_NOTHROW isatty (int);
+_CRTIMP long __cdecl __MINGW_NOTHROW lseek (int, long, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW open (const char*, int, ...);
+_CRTIMP int __cdecl __MINGW_NOTHROW read (int, void*, unsigned int);
+#ifndef __COREDLL__
+_CRTIMP int __cdecl __MINGW_NOTHROW setmode (int, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW sopen (const char*, int, int, ...);
+_CRTIMP long __cdecl __MINGW_NOTHROW tell (int);
+_CRTIMP int __cdecl __MINGW_NOTHROW umask (int);
+#endif /* __COREDLL__ */
+_CRTIMP int __cdecl __MINGW_NOTHROW unlink (const char*);
+_CRTIMP int __cdecl __MINGW_NOTHROW write (int, const void*, unsigned int);
+#endif /* _UWIN */
+
+#ifdef __USE_MINGW_ACCESS
+/*  Old versions of MSVCRT access() just ignored X_OK, while the version
+    shipped with Vista, returns an error code.  This will restore the
+    old behaviour  */
+static inline int __mingw_access (const char* __fname, int __mode)
+  { return  _access (__fname, __mode & ~X_OK); }
+#define access(__f,__m)  __mingw_access (__f, __m)
+#endif
+
+/* Wide character versions. Also declared in wchar.h. */
+/* Where do these live? Not in libmoldname.a nor in libmsvcrt.a */
+#if 0
+int            waccess(const wchar_t *, int);
+int            wchmod(const wchar_t *, int);
+int            wcreat(const wchar_t *, int);
+long           wfindfirst(wchar_t *, struct _wfinddata_t *);
+int            wfindnext(long, struct _wfinddata_t *);
+int            wunlink(const wchar_t *);
+int            wrename(const wchar_t *, const wchar_t *);
+int            wopen(const wchar_t *, int, ...);
+int            wsopen(const wchar_t *, int, int, ...);
+wchar_t *      wmktemp(wchar_t *);
+#endif
+
+#endif /* Not _NO_OLDNAMES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+
+#endif /* _IO_H_ not defined */
index 17b2079..a71f329 100644 (file)
@@ -184,7 +184,7 @@ __int64 _lseeki64(int FileHandle, __int64 Offset, int Origin)
     return 0;
 }
 
-intptr_t _get_osfhandle(int FileHandle)
+int * _get_osfhandle(int FileHandle)
 {
     return 0;
 }
diff --git a/navit/navit/support/libc/localtime.c b/navit/navit/support/libc/localtime.c
new file mode 100644 (file)
index 0000000..245b51c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * localtime.c: localtime implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include "timeutil.h"
+
+struct tm *
+localtime(const time_t *timer)
+{
+  SYSTEMTIME ss, ls, s;
+  FILETIME sf, lf, f;
+  long long t, diff;
+
+  static struct tm tms;
+
+  GetSystemTime (&ss);
+  GetLocalTime (&ls);
+
+  SystemTimeToFileTime (&ss, &sf);
+  SystemTimeToFileTime (&ls, &lf);
+
+  diff = __FILETIME_to_ll (&sf) - __FILETIME_to_ll (&lf);
+
+  __time_t_to_FILETIME (*timer, &f);
+  t = __FILETIME_to_ll (&f) - diff;
+  __ll_to_FILETIME (t, &f);
+  FileTimeToSystemTime (&f, &s);
+  __SYSTEMTIME_to_tm (&s, &tms);
+
+  return &tms;
+}
diff --git a/navit/navit/support/libc/lseek.c b/navit/navit/support/libc/lseek.c
new file mode 100644 (file)
index 0000000..4600c0d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * lseek.c: lseek implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include <windows.h>
+#include <unistd.h>
+
+long
+_lseek (int fildes, long offset, int whence)
+{
+  DWORD mode;
+  switch (whence)
+    {
+    case SEEK_SET:
+      mode = FILE_BEGIN;
+      break;
+    case SEEK_CUR:
+      mode = FILE_CURRENT;
+      break;
+    case SEEK_END:
+      mode = FILE_END;
+      break;
+    default:
+      /* Specify an invalid mode so SetFilePointer catches it.  */
+      mode = (DWORD)-1;
+    }
+  return (long) SetFilePointer ((HANDLE) fildes, offset, NULL, mode);
+}
+
+long
+lseek (int fildes, long offset, int whence)
+{
+  return _lseek (fildes, offset, whence);
+}
diff --git a/navit/navit/support/libc/math.h b/navit/navit/support/libc/math.h
new file mode 100644 (file)
index 0000000..e85a894
--- /dev/null
@@ -0,0 +1,13 @@
+#define M_E            2.7182818284590452354
+#define M_LOG2E                1.4426950408889634074
+#define M_LOG10E       0.43429448190325182765
+#define M_LN2          0.69314718055994530942
+#define M_LN10         2.30258509299404568402
+#define M_PI           3.14159265358979323846
+#define M_PI_2         1.57079632679489661923
+#define M_PI_4         0.78539816339744830962
+#define M_1_PI         0.31830988618379067154
+#define M_2_PI         0.63661977236758134308
+#define M_2_SQRTPI     1.12837916709551257390
+#define M_SQRT2                1.41421356237309504880
+#define M_SQRT1_2      0.70710678118654752440
diff --git a/navit/navit/support/libc/mkdir.c b/navit/navit/support/libc/mkdir.c
new file mode 100644 (file)
index 0000000..ae8d21d
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * mkdir.c: mkdir implementation 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
+ *
+ */
+
+#include <windows.h>
+#include <io.h>
+
+int
+_mkdir (const char *dirname)
+{
+  wchar_t dirnamew[MAX_PATH];
+  mbstowcs (dirnamew, dirname, MAX_PATH);
+  if (!CreateDirectoryW (dirnamew, NULL))
+    return -1;
+  return 0;
+}
+
+int
+mkdir (const char *dirname)
+{
+  return _mkdir (dirname);
+}
diff --git a/navit/navit/support/libc/mktime.c b/navit/navit/support/libc/mktime.c
new file mode 100644 (file)
index 0000000..bd34fbf
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * mktime.c: mktime implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include "timeutil.h"
+
+time_t
+mktime (struct tm *pt)
+{
+  SYSTEMTIME ss, ls, s;
+  FILETIME sf, lf, f;
+  long long diff;
+
+  GetSystemTime (&ss);
+  GetLocalTime (&ls);
+  SystemTimeToFileTime (&ss, &sf);
+  SystemTimeToFileTime (&ls, &lf);
+
+  diff = __FILETIME_to_ll (&lf) - __FILETIME_to_ll (&sf);
+  diff /= _onesec_in100ns;
+
+  __tm_to_SYSTEMTIME (pt, &s);
+  SystemTimeToFileTime (&s, &f);
+  return __FILETIME_to_time_t (&f) - (time_t)diff;
+}
diff --git a/navit/navit/support/libc/open.c b/navit/navit/support/libc/open.c
new file mode 100644 (file)
index 0000000..2102817
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * open.c: open, _open and_wopen implementations for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include <windows.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+static int
+vwopen (const wchar_t *wpath, int oflag, va_list ap)
+{
+  DWORD fileaccess;
+  DWORD fileshare;
+  DWORD filecreate;
+  DWORD fileattrib;
+  HANDLE hnd;
+
+  switch (oflag & (O_RDONLY | O_WRONLY | O_RDWR))
+    {
+    case O_RDONLY:
+      fileaccess = GENERIC_READ;
+      break;
+    case O_WRONLY:
+      fileaccess = GENERIC_WRITE;
+      break;
+    case O_RDWR:
+      fileaccess = GENERIC_READ | GENERIC_WRITE;
+      break;
+    default:
+      return -1;
+    }
+
+  switch (oflag & (O_CREAT | O_EXCL | O_TRUNC))
+    {
+    case 0:
+    case O_EXCL:               /* ignore EXCL w/o CREAT */
+      filecreate = OPEN_EXISTING;
+      break;
+    case O_CREAT:
+      filecreate = OPEN_ALWAYS;
+      break;
+    case O_CREAT | O_EXCL:
+    case O_CREAT | O_TRUNC | O_EXCL:
+      filecreate = CREATE_NEW;
+      break;
+
+    case O_TRUNC:
+    case O_TRUNC | O_EXCL:     /* ignore EXCL w/o CREAT */
+      filecreate = TRUNCATE_EXISTING;
+      break;
+    case O_CREAT | O_TRUNC:
+      filecreate = CREATE_ALWAYS;
+      break;
+    default:
+      /* this can't happen ... all cases are covered */
+      return -1;
+    }
+
+  fileshare = 0;
+  if (oflag & O_CREAT)
+    {
+      int pmode = va_arg (ap, int);
+      if ((pmode & S_IREAD) == S_IREAD)
+       fileshare |= FILE_SHARE_READ;
+      if ((pmode & S_IWRITE) == S_IWRITE)
+       fileshare |= FILE_SHARE_WRITE;
+    }
+
+  fileattrib = FILE_ATTRIBUTE_NORMAL;
+
+  hnd = CreateFileW (wpath, fileaccess, fileshare, NULL, filecreate,
+                    fileattrib, NULL);
+  if (hnd == INVALID_HANDLE_VALUE)
+    return -1;
+
+  if (oflag & O_APPEND)
+    SetFilePointer (hnd, 0, NULL, FILE_END);
+
+  return (int) hnd;
+}
+
+static int
+vopen (const char *path, int oflag, va_list ap)
+{
+  wchar_t wpath[MAX_PATH];
+
+  size_t path_len = strlen (path);
+  if (path_len >= MAX_PATH)
+    return -1;
+
+  mbstowcs (wpath, path, path_len + 1);
+
+  return vwopen (wpath, oflag, ap);
+}
+
+int
+_open (const char *path, int oflag, ...)
+{
+  va_list ap;
+  int ret;
+  va_start (ap, oflag);
+  ret = vopen (path, oflag, ap);
+  va_end (ap);
+  return ret;
+}
+
+int
+open (const char *path, int oflag, ...)
+{
+  va_list ap;
+  int ret;
+  va_start (ap, oflag);
+  ret = vopen (path, oflag, ap);
+  va_end (ap);
+  return ret;
+}
+
+int
+_wopen (const wchar_t *path, int oflag, ...)
+{
+  va_list ap;
+  int ret;
+  va_start (ap, oflag);
+  ret = vwopen (path, oflag, ap);
+  va_end (ap);
+  return ret;
+}
diff --git a/navit/navit/support/libc/process.h b/navit/navit/support/libc/process.h
new file mode 100644 (file)
index 0000000..ecd67a5
--- /dev/null
@@ -0,0 +1,147 @@
+/* 
+ * process.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Function calls for spawning child processes.
+ *
+ */
+
+#ifndef        _PROCESS_H_
+#define        _PROCESS_H_
+#if 0
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#include <sys/types.h> /* For _pid_t and pid_t. */
+#include <stdint.h>  /* For intptr_t. */
+/*
+ * Constants for cwait actions.
+ * Obsolete for Win32.
+ */
+#define        _WAIT_CHILD             0
+#define        _WAIT_GRANDCHILD        1
+
+#ifndef        _NO_OLDNAMES
+#define        WAIT_CHILD              _WAIT_CHILD
+#define        WAIT_GRANDCHILD         _WAIT_GRANDCHILD
+#endif /* Not _NO_OLDNAMES */
+
+/*
+ * Mode constants for spawn functions.
+ */
+#define        _P_WAIT         0
+#define        _P_NOWAIT       1
+#define        _P_OVERLAY      2
+#define        _OLD_P_OVERLAY  _P_OVERLAY
+#define        _P_NOWAITO      3
+#define        _P_DETACH       4
+
+#ifndef        _NO_OLDNAMES
+#define        P_WAIT          _P_WAIT
+#define        P_NOWAIT        _P_NOWAIT
+#define        P_OVERLAY       _P_OVERLAY
+#define        OLD_P_OVERLAY   _OLD_P_OVERLAY
+#define        P_NOWAITO       _P_NOWAITO
+#define        P_DETACH        _P_DETACH
+#endif /* Not _NO_OLDNAMES */
+
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __COREDLL__
+
+_CRTIMP void __cdecl __MINGW_NOTHROW _cexit(void);
+_CRTIMP void __cdecl __MINGW_NOTHROW _c_exit(void);
+
+_CRTIMP int __cdecl __MINGW_NOTHROW _cwait (int*, _pid_t, int);
+
+_CRTIMP _pid_t __cdecl __MINGW_NOTHROW _getpid(void);
+
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execl        (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execle       (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execlp       (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execlpe      (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execv        (const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execve       (const char*, const char* const*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execvp       (const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _execvpe      (const char*, const char* const*, const char* const*);
+
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnl       (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnle      (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnlp      (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnlpe     (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnv       (int, const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnve      (int, const char*, const char* const*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnvp      (int, const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW _spawnvpe     (int, const char*, const char* const*, const char* const*);
+
+#endif /* !__COREDLL__*/
+
+/*
+ * The functions _beginthreadex and _endthreadex are not provided by CRTDLL.
+ * They are provided by MSVCRT.
+ *
+ * NOTE: Apparently _endthread calls CloseHandle on the handle of the thread,
+ * making for race conditions if you are not careful. Basically you have to
+ * make sure that no-one is going to do *anything* with the thread handle
+ * after the thread calls _endthread or returns from the thread function.
+ *
+ * NOTE: No old names for these functions. Use the underscore.
+ */
+#if defined    (__MSVCRT__) || defined (__CRTDLL__)
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW
+       _beginthread    (void (*)(void *), unsigned, void*);
+_CRTIMP void __cdecl __MINGW_NOTHROW _endthread        (void);
+#endif
+
+#ifdef __MSVCRT__
+_CRTIMP unsigned long __cdecl __MINGW_NOTHROW
+       _beginthreadex  (void *, unsigned, unsigned (__stdcall *) (void *), 
+                        void*, unsigned, unsigned*);
+_CRTIMP void __cdecl __MINGW_NOTHROW _endthreadex (unsigned);
+#endif
+
+
+#ifndef        _NO_OLDNAMES
+#ifndef __COREDLL__
+/*
+ * Functions without the leading underscore, for portability. These functions
+ * live in liboldnames.a.
+ */
+_CRTIMP int  __cdecl __MINGW_NOTHROW cwait (int*, pid_t, int);
+_CRTIMP pid_t __cdecl __MINGW_NOTHROW getpid (void);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execl (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execle        (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execlp        (const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execlpe       (const char*, const char*,...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execv (const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execve        (const char*, const char* const*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execvp        (const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW execvpe       (const char*, const char* const*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnl        (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnle       (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnlp       (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnlpe      (int, const char*, const char*, ...);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnv        (int, const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnve       (int, const char*, const char* const*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnvp       (int, const char*, const char* const*);
+_CRTIMP intptr_t __cdecl __MINGW_NOTHROW spawnvpe      (int, const char*, const char* const*, const char* const*);
+#endif  /* Not __COREDLL__ */
+
+#endif /* Not _NO_OLDNAMES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* Not RC_INVOKED */
+#endif
+
+#endif /* _PROCESS_H_ not defined */
diff --git a/navit/navit/support/libc/read.c b/navit/navit/support/libc/read.c
new file mode 100644 (file)
index 0000000..8ce99d8
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * read.c: read and _read implementations for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include <windows.h>
+#include <unistd.h>
+
+int
+_read (int fildes, void *buf, unsigned int bufsize)
+{
+  DWORD NumberOfBytesRead;
+  if (bufsize > 0x7fffffff)
+    bufsize = 0x7fffffff;
+  if (!ReadFile ((HANDLE) fildes, buf, bufsize, &NumberOfBytesRead, NULL))
+    return -1;
+  return (int) NumberOfBytesRead;
+}
+
+int
+read (int fildes, void *buf, unsigned int bufsize)
+{
+  return _read (fildes, buf, bufsize);
+}
diff --git a/navit/navit/support/libc/rename.c b/navit/navit/support/libc/rename.c
new file mode 100644 (file)
index 0000000..23ca196
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * rename.c: rename implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include <windows.h>
+
+/* We return an error if the TO file already exists, 
+   like the Windows NT/9x 'rename' does.  */
+
+int
+rename (const char* from, const char* to)
+{
+  wchar_t fromw[MAX_PATH + 1];
+  wchar_t tow[MAX_PATH + 1];
+  mbstowcs (fromw, from, MAX_PATH);
+  mbstowcs (tow, to, MAX_PATH);
+  if (MoveFileW (fromw, tow))
+    return 0;
+  return -1;
+}
diff --git a/navit/navit/support/libc/stat.c b/navit/navit/support/libc/stat.c
new file mode 100644 (file)
index 0000000..e6ed452
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * stat.c: _stat, stat and fstat implementations for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> 10 Feb 2007
+ *
+ */
+
+#include <windows.h>
+#include <time.h>
+#include <fcntl.h>
+#include <io.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include "debug.h"
+
+#include "timeutil.h"
+
+struct stat_file_info_t
+{
+  DWORD dwFileAttributes;
+  FILETIME ftLastWriteTime;
+  FILETIME ftCreationTime;
+  FILETIME ftLastAccessTime;
+  DWORD nFileSizeLow;
+};
+
+#define COPY_MEMBER(DEST, SRC, MEMBER)         \
+  do {                                         \
+    (DEST)->MEMBER = (SRC)->MEMBER;            \
+  } while (0)
+
+#define TO_STAT_FILE_INFO(DEST, SRC)           \
+  do {                                         \
+    COPY_MEMBER (DEST, SRC, dwFileAttributes); \
+    COPY_MEMBER (DEST, SRC, ftLastWriteTime);  \
+    COPY_MEMBER (DEST, SRC, ftCreationTime);   \
+    COPY_MEMBER (DEST, SRC, ftLastAccessTime); \
+    COPY_MEMBER (DEST, SRC, nFileSizeLow);     \
+  } while (0)
+
+static int
+__stat_by_file_info (struct stat_file_info_t *fi, struct _stat *st, int exec)
+{
+  int permission = _S_IREAD;
+
+  memset (st, 0, sizeof (*st));
+
+  st->st_size = fi->nFileSizeLow;
+  st->st_mode = _S_IFREG;
+
+  if((fi->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
+    st->st_mode = _S_IFDIR | _S_IEXEC;
+  else if (exec)
+    permission |= _S_IEXEC;
+
+  if((fi->dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0)
+    permission |= _S_IWRITE;
+
+  st->st_mode |= permission | (permission >> 3) | (permission >> 6);
+
+  st->st_nlink = 1; /* always 1? */
+  st->st_rdev = 1; /* Where to get drive info?  */
+  st->st_ino = 0; /* always 0 on Windows */
+
+  st->st_mtime = __FILETIME_to_time_t (&fi->ftLastWriteTime);
+  st->st_ctime = __FILETIME_to_time_t (&fi->ftCreationTime);
+  st->st_atime = __FILETIME_to_time_t (&fi->ftLastAccessTime);
+
+  /* Looks like the code below is never triggered.
+     Windows CE always only keeps the LastWriteTime, and
+     copies it to the CreationTime and LastAccessTime fields.  */
+  if (st->st_ctime == 0)
+    st->st_ctime = st->st_mtime;
+  if (st->st_atime == 0)
+    {
+      /* On XP, at least, the st_atime is always set to the same as
+        the st_mtime, except the hour/min/sec == 00:00:00.  */
+      SYSTEMTIME s;
+      FILETIME f = fi->ftLastWriteTime;
+      FileTimeToSystemTime (&f, &s);
+      s.wHour = 0; s.wMinute = 0;
+      s.wSecond = 0; s.wMilliseconds = 0;
+      SystemTimeToFileTime (&s, &f);
+      st->st_atime = __FILETIME_to_time_t (&f);
+      /* st->st_atime = st->st_mtime; */
+    }
+  return 0;
+}
+
+int
+_fstat (int fd, struct _stat *st)
+{
+  BY_HANDLE_FILE_INFORMATION fi;
+  struct stat_file_info_t sfi;
+
+  if (!GetFileInformationByHandle ((HANDLE) fd, &fi))
+    return -1;
+  TO_STAT_FILE_INFO (&sfi, &fi);
+  return __stat_by_file_info (&sfi, st, 0);
+}
+
+int
+fstat (int fd, struct stat *st)
+{
+  return _fstat (fd, (struct _stat *)st);
+}
+
+int
+_stat (const char *path, struct _stat *st)
+{
+  WIN32_FIND_DATAW fd;
+  HANDLE h;
+  int ret;
+  struct stat_file_info_t sfi;
+  wchar_t pathw[MAX_PATH + 1];
+  size_t len;
+  int exec;
+
+       dbg(0,"path=%s\n",path);
+  mbstowcs (pathw, path, MAX_PATH);
+       dbg(0,"wide path=%S\n",pathw);
+  if((h = FindFirstFileW (pathw, &fd)) == INVALID_HANDLE_VALUE)
+    {
+      DWORD dwError = GetLastError ();
+       dbg(0,"no file\n");
+      if(dwError == ERROR_NO_MORE_FILES)
+       /* Convert error to something more sensible.  */
+       SetLastError (ERROR_FILE_NOT_FOUND);
+      return -1;
+    }
+
+  TO_STAT_FILE_INFO (&sfi, &fd);
+
+  len = strlen (path);
+  exec = (len >= 4
+         && strcasecmp (path + len - 4, ".exe") == 0);
+  ret = __stat_by_file_info (&sfi, st, exec);
+       dbg(0,"ret=%d\n",ret);
+  FindClose (h);
+  return ret;
+}
+
+int
+stat (const char *path, struct stat *st)
+{
+  return _stat (path, (struct _stat *)st);
+}
diff --git a/navit/navit/support/libc/time.c b/navit/navit/support/libc/time.c
new file mode 100644 (file)
index 0000000..b167d5e
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * time.c: time implementation for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include "timeutil.h"
+
+time_t
+time (time_t *timer)
+{
+  SYSTEMTIME s;
+  FILETIME f;
+  time_t t;
+
+  if (timer == NULL)
+    timer = &t;
+
+  GetSystemTime (&s);
+  SystemTimeToFileTime (&s, &f);
+  *timer = __FILETIME_to_time_t (&f);
+  return *timer;
+}
diff --git a/navit/navit/support/libc/timeutil.c b/navit/navit/support/libc/timeutil.c
new file mode 100644 (file)
index 0000000..433bbbb
--- /dev/null
@@ -0,0 +1,126 @@
+#include "timeutil.h"
+
+/* Originally based on code found in the Ruby WinCE support, which
+   had the following notice: */
+
+/* start original header */
+
+/***************************************************************
+  time.c
+
+  author : uema2
+  date   : Nov 30, 2002
+
+  You can freely use, copy, modify, and redistribute
+  the whole contents.
+***************************************************************/
+
+/* end original header */
+
+/* Note: The original filename was: wince/time_wce.c  */
+
+/* Adapted to mingw32ce by Pedro Alves  <pedro_alves@portugalmail.pt>
+   10 Feb 2007 - Initial revision.  */
+
+#define DELTA_EPOCH 116444736000000000LL
+
+#if 0
+how_to_calc_delta_epoch ()
+{
+  FILETIME f1601, f1970;
+  __FILETIME_from_Year (1601, &f1601);
+  __FILETIME_from_Year (1970, &f1970);
+  DELTA_EPOCH = __FILETIME_to_ll (&f1970) - __FILETIME_to_ll (&f1601);
+}
+#endif
+
+long long
+__FILETIME_to_ll (const FILETIME *f)
+{
+  long long t;
+  t = (long long)f->dwHighDateTime << 32;
+  t |= f->dwLowDateTime;
+  return t;
+}
+
+void
+__ll_to_FILETIME (long long t, FILETIME* f)
+{
+  f->dwHighDateTime = (DWORD)((t >> 32) & 0x00000000FFFFFFFF);
+  f->dwLowDateTime = (DWORD)(t & 0x00000000FFFFFFFF);
+}
+
+void
+__tm_to_SYSTEMTIME (struct tm *t, SYSTEMTIME *s)
+{
+  s->wYear = t->tm_year + 1900;
+  s->wMonth = t->tm_mon  + 1;
+  s->wDayOfWeek = t->tm_wday;
+  s->wDay = t->tm_mday;
+  s->wHour = t->tm_hour;
+  s->wMinute = t->tm_min;
+  s->wSecond = t->tm_sec;
+  s->wMilliseconds = 0;
+}
+
+static void
+__FILETIME_from_Year (WORD year, FILETIME *f)
+{
+  SYSTEMTIME s = {0};
+
+  s.wYear = year;
+  s.wMonth = 1;
+  s.wDayOfWeek = 1;
+  s.wDay = 1;
+
+  SystemTimeToFileTime (&s, f);
+}
+
+static int
+__Yday_from_SYSTEMTIME (const SYSTEMTIME *s)
+{
+  long long t;
+  FILETIME f1, f2;
+
+  __FILETIME_from_Year (s->wYear, &f1);
+  SystemTimeToFileTime (s, &f2);
+
+  t = __FILETIME_to_ll (&f2) - __FILETIME_to_ll (&f1);
+
+  return ((t / _onesec_in100ns) / (60 * 60 * 24));
+}
+
+void
+__SYSTEMTIME_to_tm (SYSTEMTIME *s, struct tm *tm)
+{
+  tm->tm_year = s->wYear - 1900;
+  tm->tm_mon = s->wMonth- 1;
+  tm->tm_wday = s->wDayOfWeek;
+  tm->tm_mday = s->wDay;
+  tm->tm_yday = __Yday_from_SYSTEMTIME (s);
+  tm->tm_hour = s->wHour;
+  tm->tm_min = s->wMinute;
+  tm->tm_sec = s->wSecond;
+  tm->tm_isdst = 0;
+}
+
+time_t
+__FILETIME_to_time_t (const FILETIME* f)
+{
+  long long t;
+  t = __FILETIME_to_ll (f);
+  t -= DELTA_EPOCH;
+  return (time_t)(t / _onesec_in100ns);
+}
+
+void
+__time_t_to_FILETIME (time_t t, FILETIME *f)
+{
+  long long time;
+
+  time = t;
+  time *= _onesec_in100ns;
+  time += DELTA_EPOCH;
+
+  __ll_to_FILETIME (time, f);
+}
diff --git a/navit/navit/support/libc/timeutil.h b/navit/navit/support/libc/timeutil.h
new file mode 100644 (file)
index 0000000..9e5f708
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef __TIMEUTIL_H
+#define __TIMEUTIL_H
+
+#include <windows.h>
+#include <sys/time.h>
+#include <_mingw.h>
+
+#define _onesec_in100ns 10000000LL
+
+extern long long __FILETIME_to_ll (const FILETIME *f);
+extern void __ll_to_FILETIME (long long t, FILETIME* f);
+extern void __tm_to_SYSTEMTIME (struct tm *, SYSTEMTIME *);
+extern void __SYSTEMTIME_to_tm (SYSTEMTIME *, struct tm *);
+extern time_t __FILETIME_to_time_t (const FILETIME *);
+extern void __time_t_to_FILETIME (time_t, FILETIME *);
+
+#endif
diff --git a/navit/navit/support/libc/unistd.h b/navit/navit/support/libc/unistd.h
new file mode 100644 (file)
index 0000000..d1a4351
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef _UNISTD_H
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * unistd.h maps (roughly) to io.h
+ * Other headers included by unistd.h may be selectively processed;
+ * __UNISTD_H_SOURCED__ enables such selective processing.
+ */
+#define _UNISTD_H
+#define __UNISTD_H_SOURCED__ 1
+
+#include <io.h>
+#include <process.h>
+#include <getopt.h>
+
+/* These are also defined in stdio.h. */
+#ifndef        SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef        SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined __NO_ISOCEXT
+#include <sys/types.h> /* For useconds_t. */
+
+int __cdecl __MINGW_NOTHROW usleep(useconds_t useconds);
+#endif  /* Not __NO_ISOCEXT */
+
+/* This is defined as a real library function to allow autoconf
+   to verify its existence. */
+int ftruncate(int, off_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef __UNISTD_H_SOURCED__
+#endif /* _UNISTD_H */
diff --git a/navit/navit/support/libc/unlink.c b/navit/navit/support/libc/unlink.c
new file mode 100644 (file)
index 0000000..9e3f9b5
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * unlink.c: unlink and _unlink implementations for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+
+#include <stdio.h>
+#include <windows.h>
+
+int
+_unlink (const char *file)
+{
+  wchar_t wfile[MAX_PATH];
+  size_t conv = mbstowcs (wfile, file, MAX_PATH);
+  if (conv > 0 && conv < MAX_PATH && DeleteFileW (wfile))
+    return 0;
+  return -1;
+}
+
+int
+unlink (const char *file)
+{
+  return _unlink (file);
+}
diff --git a/navit/navit/support/libc/write.c b/navit/navit/support/libc/write.c
new file mode 100644 (file)
index 0000000..b9521ae
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * write.c: write and _write implementations for WinCE.
+ *
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Written by Pedro Alves <pedro_alves@portugalmail.pt> Feb 2007
+ *
+ */
+#include <windows.h>
+#include <unistd.h>
+
+int
+_write (int fildes, const void *buf, unsigned int bufsize)
+{
+  DWORD NumberOfBytesWritten;
+  if (bufsize > 0x7fffffff)
+    bufsize = 0x7fffffff;
+  if (!WriteFile ((HANDLE) fildes, buf, bufsize, &NumberOfBytesWritten, NULL))
+    return -1;
+  return (int) NumberOfBytesWritten;
+}
+
+int
+write (int fildes, const void *buf, unsigned int bufsize)
+{
+  return _write (fildes, buf, bufsize);
+}