changeset 34:e1e151a1c097 draft

dhcpcd is reported to work on Darwin :)
author Roy Marples <roy@marples.name>
date Fri, 15 Dec 2006 18:28:54 +0000
parents ad8baa1bbf62
children f33e29e1609c
files ChangeLog Makefile common.c configure.c dhcpcd.h interface.c socket.c
diffstat 7 files changed, 42 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Dec 15 14:47:45 2006 +0000
+++ b/ChangeLog	Fri Dec 15 18:28:54 2006 +0000
@@ -1,3 +1,4 @@
+Dawin is now reported to work.
 cleanmetas now inserts a \ when it finds a ' so we get the proper
 values in our .info files when read by a shell.
 Add new CFLAGS to ensure that the code quality is good.
--- a/Makefile	Fri Dec 15 14:47:45 2006 +0000
+++ b/Makefile	Fri Dec 15 18:28:54 2006 +0000
@@ -34,8 +34,12 @@
 dhcpcd_OBJS = arp.o client.o common.o configure.o dhcp.o dhcpcd.o \
 		interface.o logger.o signals.o socket.o
 
+# By default we don't need to link to anything
+# Except on Darwin where we need -lresolv, so they need to uncomment this
+#dhcpcd_LIBS = -lresolv
+
 dhcpcd: $(dhcpcd_H) $(dhcpcd_OBJS)
-	$(CC) $(LDFLAGS) $(dhcpcd_OBJS) -o dhcpcd
+	$(CC) $(LDFLAGS) $(dhcpcd_OBJS) $(dhcpcd_LIBS) -o dhcpcd
 
 version.h:
 	echo '#define VERSION "$(VERSION)"' > version.h
--- a/common.c	Fri Dec 15 14:47:45 2006 +0000
+++ b/common.c	Fri Dec 15 18:28:54 2006 +0000
@@ -37,6 +37,25 @@
   sysinfo (&info);
   return info.uptime;
 }
+#elif __APPLE__
+/* Darwin doesn't appear to have an uptime, so try and make one ourselves */
+#include <sys/time.h>
+long uptime (void)
+{
+  struct timeval tv;
+  static long start = 0;
+
+  if (gettimeofday (&tv, NULL) == -1)
+    {
+      logger (LOG_ERR, "gettimeofday: %s", strerror (errno));
+      return -1;
+    }
+
+  if (start == 0)
+    start = tv.tv_sec;
+
+  return tv.tv_sec - start;
+}
 #else
 #include <time.h>
 long uptime (void)
@@ -45,17 +64,17 @@
 
   if (clock_gettime(CLOCK_MONOTONIC, &tp) == -1)
     {
-      logger (LOG_ERR, "Unable to get uptime: %s", strerror (errno));
+      logger (LOG_ERR, "clock_gettime: %s", strerror (errno));
       return -1;
     }
 
   return tp.tv_sec;
 }
-#endif /* __linux__ */
+#endif
 
 void *xmalloc (size_t size)
 {
-  register void *value = malloc (size);
+  void *value = malloc (size);
 
   if (value)
     return value;
--- a/configure.c	Fri Dec 15 14:47:45 2006 +0000
+++ b/configure.c	Fri Dec 15 18:28:54 2006 +0000
@@ -51,14 +51,13 @@
   /* The largest single element we can have is 256 bytes according to the RFC,
      so this buffer size should be safe even if it's all ' */
   char buffer[1024] = {0};
-  register char *c = (char *) cstr;
-  register char *b = buffer;
+  char *b = buffer;
 
   if (! cstr || strlen (cstr) == 0)
       return b;
 
   do
-    if (*c == 39)
+    if (*cstr == 39)
       {
 	*b++ = '\'';
 	*b++ = '\\';
@@ -66,8 +65,8 @@
 	*b++ = '\'';
       }
     else
-      *b++ = *c;
-  while (*c++);
+      *b++ = *cstr;
+  while (*cstr++);
 
   *b++ = 0;
   b = buffer;
@@ -80,8 +79,6 @@
 {
   struct stat buf;
   pid_t pid;
-  char *const argc[4] =
-    { (char *) script, (char *) infofile, (char *) arg, NULL };
 
   if (! script || ! infofile || ! arg)
     return;
@@ -100,9 +97,9 @@
      causing the script to fail */
   if ((pid = fork ()) == 0)
     {
-      if (execv (script, argc))
+      if (execle (script, script, infofile, arg, NULL, NULL))
 	logger (LOG_ERR, "error executing \"%s %s %s\": %s",
-		argc[0], argc[1], argc[2], strerror (errno));
+		script, infofile, arg, strerror (errno));
       exit (0);
     }
   else if (pid == -1)
@@ -161,8 +158,6 @@
 {
   struct stat buf;
   pid_t pid;
-  char *const argc[4] =
-    { (char *) RESOLVCONF, (char *) "-d", (char *) ifname, NULL };
 
   if (stat (RESOLVCONF, &buf) < 0)
     return;
@@ -176,9 +171,9 @@
      causing the script to fail */
   if ((pid = fork ()) == 0)
     {
-      if (execve (argc[0], argc, NULL))
-	logger (LOG_ERR, "error executing \"%s %s %s\": %s",
-		argc[0], argc[1], argc[2], strerror (errno));
+      if (execle (RESOLVCONF, RESOLVCONF, "-d", ifname, NULL, NULL))
+	logger (LOG_ERR, "error executing \"%s -d %s\": %s",
+		RESOLVCONF, ifname, strerror (errno));
       exit (0);
     }
   else if (pid == -1)
--- a/dhcpcd.h	Fri Dec 15 14:47:45 2006 +0000
+++ b/dhcpcd.h	Fri Dec 15 18:28:54 2006 +0000
@@ -30,7 +30,6 @@
 #include "common.h"
 
 #define DEFAULT_TIMEOUT		20
-// #define DEFAULT_LEASETIME	0xffffffff      /* infinite lease time */
 #define DEFAULT_LEASETIME	3600 		/* 1 hour */
 
 #define CLASS_ID_MAX_LEN	48
--- a/interface.c	Fri Dec 15 14:47:45 2006 +0000
+++ b/interface.c	Fri Dec 15 18:28:54 2006 +0000
@@ -211,7 +211,7 @@
   return iface;
 }
 
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__APPLE__)
 static int do_address (const char *ifname, struct in_addr address,
 		       struct in_addr netmask, struct in_addr broadcast, int del)
 {
--- a/socket.c	Fri Dec 15 14:47:45 2006 +0000
+++ b/socket.c	Fri Dec 15 18:28:54 2006 +0000
@@ -49,9 +49,9 @@
 
 static uint16_t checksum (unsigned char *addr, uint16_t len)
 {
-  register uint32_t sum = 0;
-  register uint16_t *w = (uint16_t *) addr;
-  register uint16_t nleft = len;
+  uint32_t sum = 0;
+  uint16_t *w = (uint16_t *) addr;
+  uint16_t nleft = len;
 
   while (nleft > 1)
     {
@@ -159,7 +159,7 @@
   return retval;
 }
 
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__APPLE__)
 
 /* Credit where credit is due :)
    The below BPF filter is taken from ISC DHCP */