Successfully cross-compiled for Windows CE. Not tested at all.
authorThomas Lopatic <thomas@lopatic.de>
Mon, 21 Mar 2005 02:17:37 +0000 (02:17 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Mon, 21 Mar 2005 02:17:37 +0000 (02:17 +0000)
Makefile
src/cfgparser/Makefile
src/main.c
src/win32/apm.c
src/win32/ce/ws2tcpip.h [new file with mode: 0644]
src/win32/compat.c
src/win32/ifnet.c
src/win32/misc.c
src/win32/net.c
src/win32/sys/time.h

index 84f4c76..7342a97 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -35,7 +35,7 @@
 # to the project. For more information see the website or contact
 # the copyright holders.
 #
-# $Id: Makefile,v 1.51 2005/03/10 06:55:44 kattemat Exp $
+# $Id: Makefile,v 1.52 2005/03/21 02:17:36 tlopatic Exp $
 
 VERS =         0.4.9
 
@@ -192,6 +192,17 @@ olsr-${VERS}-setup.exe:    gui/win32/Main/Release/Switch.exe \
                C:/Program\ Files/NSIS/makensis gui\win32\Inst\installer.nsi
                mv olsr-setup.exe olsr-${VERS}-setup.exe
 
+else
+ifeq ($(OS), wince)
+
+SRCS +=                $(wildcard src/win32/*.c)
+HDRS +=                $(wildcard src/win32/*.h)
+INCLUDES +=    -Isrc/win32 -Isrc/win32/ce
+DEFINES =      -DWIN32 -DWINCE
+CFLAGS ?=      $(CCWARNINGS) -O2 -g
+LIBS =         -lwinsock -liphlpapi
+MAKEDEPEND =   makedepend -f $(DEPFILE) $(DEFINES) $(INCLUDES) $(SRCS)
+
 else
 
 all:   help
@@ -202,6 +213,7 @@ endif
 endif
 endif
 endif
+endif
 
 ifneq ($(NODEBUG), )
 CFLAGS += -DNODEBUG
index d9aa29e..85abfbe 100644 (file)
@@ -36,7 +36,7 @@
 # to the project. For more information see the website or contact
 # the copyright holders.
 #
-# $Id: Makefile,v 1.17 2005/03/14 21:24:22 kattemat Exp $
+# $Id: Makefile,v 1.18 2005/03/21 02:17:36 tlopatic Exp $
 
 CC ?=          gcc
 BISON ?=       bison
@@ -83,6 +83,19 @@ PORT_LIBS =  -lws2_32
 DEPFLAGS +=    -DWIN32_STDIO_HACK -DWIN32
 INCLUDES +=    ../win32
 
+else
+ifeq ($(OS), wince)
+
+LIBNAME ?=
+BINNAME ?=
+
+PORT_CFLAGS =  -I../win32 -I../win32/ce
+PORT_LDFLAGS =
+PORT_OBJS =
+PORT_LIBS =
+DEPFLAGS +=    -DWIN32 -DWINCE
+INCLUDES +=    ../win32 ../win32/ce
+
 else
 
 LIBNAME ?=     olsrd_cfgparser.so.0.1
@@ -94,6 +107,7 @@ PORT_OBJS =
 PORT_LIBS =    -lm -lc
 
 endif
+endif
 
 
 ifdef MAKELIB
index 0e668e5..0438145 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: main.c,v 1.69 2005/03/10 18:09:32 kattemat Exp $
+ * $Id: main.c,v 1.70 2005/03/21 02:17:36 tlopatic Exp $
  */
 
 #include <unistd.h>
@@ -165,11 +165,15 @@ main(int argc, char *argv[])
    * check if a configfile name was given as parameter
    */
 #ifdef WIN32
+#ifndef WINCE
   GetWindowsDirectory(conf_file_name, FILENAME_MAX - 11);
+#else
+  conf_file_name[0] = 0;
+#endif
   
   len = strlen(conf_file_name);
   
-  if (conf_file_name[len - 1] != '\\')
+  if (len == 0 || conf_file_name[len - 1] != '\\')
     conf_file_name[len++] = '\\';
   
   strcpy(conf_file_name + len, "olsrd.conf");
@@ -326,8 +330,10 @@ main(int argc, char *argv[])
 
   /* Print heartbeat to stdout */
 
+#if !defined WINCE
   if(olsr_cnf->debug_level > 0 && isatty(STDOUT_FILENO))
     olsr_register_scheduler_event(&generate_stdout_pulse, NULL, STDOUT_PULSE_INT, 0, NULL);
+#endif
   
   gettimeofday(&now, NULL);
 
@@ -367,7 +373,9 @@ main(int argc, char *argv[])
 
   /* ctrl-C and friends */
 #ifdef WIN32
+#ifndef WINCE
   SetConsoleCtrlHandler(SignalHandler, OLSR_TRUE);
+#endif
 #else
   signal(SIGHUP, olsr_reconfigure);  
   signal(SIGINT, olsr_shutdown);  
index db55c50..2f9f1ee 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: apm.c,v 1.9 2005/02/27 10:48:05 kattemat Exp $
+ * $Id: apm.c,v 1.10 2005/03/21 02:17:36 tlopatic Exp $
  */
 
 #include "apm.h"
@@ -71,6 +71,7 @@ void apm_printinfo(struct olsr_apm_info *ApmInfo)
 
 int apm_read(struct olsr_apm_info *ApmInfo)
 {
+#if !defined WINCE
   SYSTEM_POWER_STATUS PowerStat;
 
   memset(ApmInfo, 0, sizeof (struct olsr_apm_info));
@@ -85,4 +86,7 @@ int apm_read(struct olsr_apm_info *ApmInfo)
     PowerStat.BatteryLifePercent : 0;
 
   return 1;
+#else
+  return 0;
+#endif
 }
diff --git a/src/win32/ce/ws2tcpip.h b/src/win32/ce/ws2tcpip.h
new file mode 100644 (file)
index 0000000..53906fe
--- /dev/null
@@ -0,0 +1,39 @@
+#if !defined TL_WS2TCPIP_INCLUDED
+
+#define TL_WS2TCPIP_INCLUDED
+
+#define AF_INET6 23
+
+struct in6_addr
+{
+  unsigned char s6_addr[16];
+};
+
+struct sockaddr_in6
+{
+  short sin6_family;
+  unsigned short sin6_port;
+  unsigned long sin6_flowinfo;
+  struct in6_addr sin6_addr;
+  unsigned long sin6_scope_id;
+};
+
+typedef int socklen_t;
+
+struct sockaddr_storage
+{
+  unsigned char dummy[128];
+};
+
+#define IPPROTO_IPV6 41
+
+#define IPV6_MULTICAST_IF 9
+#define IPV6_ADD_MEMBERSHIP 12
+
+struct ipv6_mreq
+{
+  struct in6_addr ipv6mr_multiaddr;
+  unsigned int ipv6mr_interface;
+};
+
+#endif
index 10b0ef2..62b9aac 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: compat.c,v 1.11 2005/01/17 10:58:48 tlopatic Exp $
+ * $Id: compat.c,v 1.12 2005/03/21 02:17:36 tlopatic Exp $
  */
 
 /*
@@ -82,7 +82,7 @@ unsigned int random(void)
 {
   RandState = RandState * 1103515245 + 12345;
 
-  return (RandState ^ (RandState >> 16)) % (RAND_MAX + 1);
+  return (RandState ^ (RandState >> 16)) & RAND_MAX;
 }
 
 int getpid(void)
@@ -133,51 +133,48 @@ int inet_aton(char *AddrStr, struct in_addr *Addr)
 char *StrError(unsigned int ErrNo)
 {
   static char Msg[1000];
-  
+
+#if !defined WINCE
   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrNo,
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), Msg,
-               sizeof (Msg), NULL);
-       
+                sizeof (Msg), NULL);
+#else
+  short WideMsg[1000];
+
+  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrNo,
+               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), WideMsg,
+                sizeof (WideMsg) / 2, NULL);
+
+  if (WideCharToMultiByte(CP_ACP, 0, WideMsg, -1, Msg, sizeof (Msg),
+                          NULL, NULL) == 0)
+    strcpy(Msg, "[cannot convert string]");
+#endif
+
   return Msg;
 }
 
 void PError(char *Str)
 {
-  char Msg[1000];
-  int Len;
-
-  sprintf(Msg, "ERROR - %s: ", Str);
-
-  Len = strlen(Msg);
-
-  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
-                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), Msg + Len,
-                sizeof (Msg) - Len, NULL);
-
-  fprintf(stderr, "%s\n", Msg);
+  fprintf(stderr, "ERROR - %s: %s", Str, StrError(GetLastError()));
 }
 
 void WinSockPError(char *Str)
 {
-  char Msg[1000];
-  int Len;
-
-  sprintf(Msg, "ERROR - %s: ", Str);
-
-  Len = strlen(Msg);
-
-  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(),
-                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), Msg + Len,
-                sizeof (Msg) - Len, NULL);
-
-  fprintf(stderr, "%s\n", Msg);
+  fprintf(stderr, "ERROR - %s: %s", Str, StrError(WSAGetLastError()));
 }
 
 // XXX - not thread-safe, which is okay for our purposes
  
 void *dlopen(char *Name, int Flags)
 {
+#if !defined WINCE
   return (void *)LoadLibrary(Name);
+#else
+  short WideName[1000];
+
+  MultiByteToWideChar(CP_ACP, 0, Name, -1, WideName, sizeof (WideName));
+  return (void *)LoadLibrary(WideName);
+#endif
 }
 
 int dlclose(void *Handle)
@@ -188,7 +185,14 @@ int dlclose(void *Handle)
 
 void *dlsym(void *Handle, char *Name)
 {
+#if !defined WINCE
   return GetProcAddress((HMODULE)Handle, Name);
+#else
+  short WideName[1000];
+
+  MultiByteToWideChar(CP_ACP, 0, Name, -1, WideName, sizeof (WideName));
+  return GetProcAddress((HMODULE)Handle, WideName);
+#endif
 }
 
 char *dlerror(void)
@@ -490,6 +494,7 @@ char *inet_ntop(int af, void *src, char *dst, int size)
 
 int isatty(int fd)
 {
+#if !defined WINCE
   HANDLE Hand;
   CONSOLE_SCREEN_BUFFER_INFO Info;
   unsigned long Events;
@@ -513,4 +518,7 @@ int isatty(int fd)
   }
 
   return -1;
+#else
+  return 0;
+#endif
 }
index 7633e7b..287677a 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: ifnet.c,v 1.22 2005/03/21 00:39:14 tlopatic Exp $
+ * $Id: ifnet.c,v 1.23 2005/03/21 02:17:36 tlopatic Exp $
  */
 
 #include "interfaces.h"
@@ -236,6 +236,7 @@ int GetIntInfo(struct InterfaceInfo *Info, char *Name)
 
 static int IsWireless(char *IntName)
 {
+#if !defined WINCE
   struct InterfaceInfo Info;
   char DevName[43];
   HANDLE DevHand;
@@ -290,6 +291,7 @@ static int IsWireless(char *IntName)
   }
 
   CloseHandle(DevHand);
+#endif
   return 1;
 }
 
index 68b1dff..ba51fe4 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: misc.c,v 1.3 2005/02/14 17:49:51 tlopatic Exp $
+ * $Id: misc.c,v 1.4 2005/03/21 02:17:37 tlopatic Exp $
  */
 
 #define WIN32_LEAN_AND_MEAN
@@ -47,6 +47,7 @@
 
 void clear_console(void)
 {
+#if !defined WINCE
   HANDLE Hand;
   CONSOLE_SCREEN_BUFFER_INFO Info;
   unsigned long Written;
@@ -71,4 +72,5 @@ void clear_console(void)
     return;
 
   SetConsoleCursorPosition(Hand, Home);
+#endif
 }
index 1d63fb8..c721c26 100644 (file)
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: net.c,v 1.17 2005/03/04 21:30:17 kattemat Exp $
+ * $Id: net.c,v 1.18 2005/03/21 02:17:37 tlopatic Exp $
  */
 
+#if defined WINCE
+#include <sys/types.h> // for time_t
+#endif
+
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <winsock2.h>
 #include "defs.h"
 #include "net_os.h"
 
+#if defined WINCE
+#define WIDE_STRING(s) L##s
+#else
+#define WIDE_STRING(s) s
+#endif
 
 void WinSockPError(char *Str);
 void PError(char *);
 
-
 void DisableIcmpRedirects(void);
 int disable_ip_forwarding(int Ver);
 
@@ -162,14 +170,14 @@ int enable_ip_forwarding(int Ver)
   HANDLE Hand;
 
   Ver = Ver;
-  
-  Lib = LoadLibrary("iphlpapi.dll");
+
+  Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
 
   if (Lib == NULL)
     return 0;
 
-  EnableRouter = (unsigned int _stdcall (*)(HANDLE *, OVERLAPPED *))
-    GetProcAddress(Lib, "EnableRouter");
+  EnableRouter = (unsigned int __stdcall (*)(HANDLE *, OVERLAPPED *))
+    GetProcAddress(Lib, WIDE_STRING("EnableRouter"));
 
   if (EnableRouter == NULL)
     return 0;
@@ -204,13 +212,13 @@ int disable_ip_forwarding(int Ver)
 
   Ver = Ver;
   
-  Lib = LoadLibrary("iphlpapi.dll");
+  Lib = LoadLibrary(WIDE_STRING("iphlpapi.dll"));
 
   if (Lib == NULL)
     return 0;
 
-  UnenableRouter = (unsigned int _stdcall (*)(OVERLAPPED *, unsigned int *))
-    GetProcAddress(Lib, "UnenableRouter");
+  UnenableRouter = (unsigned int __stdcall (*)(OVERLAPPED *, unsigned int *))
+    GetProcAddress(Lib, WIDE_STRING("UnenableRouter"));
 
   if (UnenableRouter == NULL)
     return 0;
@@ -235,6 +243,7 @@ int restore_settings(int Ver)
 
 static int SetEnableRedirKey(unsigned long New)
 {
+#if !defined WINCE
   HKEY Key;
   unsigned long Type;
   unsigned long Len;
@@ -261,6 +270,9 @@ static int SetEnableRedirKey(unsigned long New)
 
   RegCloseKey(Key);
   return Old;
+#else
+  return 0;
+#endif
 }
 
 void DisableIcmpRedirects(void)
index 0d28d06..ebe495b 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: time.h,v 1.6 2004/11/21 01:21:10 tlopatic Exp $
+ * $Id: time.h,v 1.7 2005/03/21 02:17:37 tlopatic Exp $
  */
 
 #if !defined TL_SYS_TIME_H_INCLUDED
   }                                             \
   while (0)
 
+#if !defined WINCE
 struct timespec
 {
   unsigned int tv_sec;
   unsigned int tv_nsec;
 };
+#else
+#include <time.h>
+#endif
 
 int nanosleep(struct timespec *Req, struct timespec *Rem);
+
 void gettimeofday(struct timeval *TVal, void *TZone);
 
 #endif