[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Unofficial GNU/Hurd release (#644657, updated patch for review)



> Should be updated: 
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=644657

Next package on the list: libmemcached

Attached is an updated patch for bug #644657, fix_FTBFS4Hurd.patch, to
the new release of libmemcached:1.0.8-1, for review. The first patched
function, clients/ms_setting.c, seems not to be compiled, so maybe that
part is not needed. And of course a autoreconf is needed to create the
updated configure, config.in, etc.

Thanks!
diff -ur libmemcached-1.0.8/clients/ms_setting.c libmemcached-1.0.8.modified/clients/ms_setting.c
--- libmemcached-1.0.8/clients/ms_setting.c	2012-05-13 01:52:47.000000000 +0200
+++ libmemcached-1.0.8.modified/clients/ms_setting.c	2012-10-11 19:40:33.000000000 +0200
@@ -304,13 +304,17 @@
  */
 static void ms_no_config_file()
 {
-  char userpath[PATH_MAX];
+  char *userpath = NULL;
+  size_t len;
   struct passwd *usr= NULL;
   FILE *fd;
 
   usr= getpwuid(getuid());
 
-  snprintf(userpath, PATH_MAX, "%s/%s", usr->pw_dir, DEFAULT_CONFIG_NAME);
+  len= strlen(usr->pw_dir) + 1 + strlen(DEFAULT_CONFIG_NAME) + 1;
+  if ((userpath= malloc(len)) == NULL)
+    exit(1);
+  snprintf(userpath, len, "%s/%s", usr->pw_dir, DEFAULT_CONFIG_NAME);
 
   if (access (userpath, F_OK | R_OK) == 0)
     goto exit;
@@ -321,13 +325,14 @@
   {
     fprintf(stderr, "Could not create default configure file %s\n", userpath);
     perror(strerror(errno));
+    free(userpath);
     exit(1);
   }
   fprintf(fd, "%s", DEFAULT_CONGIF_STR);
   fclose(fd);
 
 exit:
-  ms_setting.cfg_file= strdup(userpath);
+  ms_setting.cfg_file= userpath;
 } /* ms_no_config_file */
 
 
diff -ur libmemcached-1.0.8/configure.ac libmemcached-1.0.8.modified/configure.ac
--- libmemcached-1.0.8/configure.ac	2012-05-22 21:06:22.000000000 +0200
+++ libmemcached-1.0.8.modified/configure.ac	2012-10-11 22:16:45.000000000 +0200
@@ -120,6 +120,7 @@
 AC_CHECK_FUNCS([strtol])
 AC_CHECK_FUNCS([strtoul])
 AC_CHECK_FUNCS([strtoull])
+AC_CHECK_FUNCS([getcwd])
 
 AC_CHECK_HEADERS([arpa/inet.h])
 AC_CHECK_HEADERS([errno.h])
diff -ur libmemcached-1.0.8/libtest/server.cc libmemcached-1.0.8.modified/libtest/server.cc
--- libmemcached-1.0.8/libtest/server.cc	2012-05-14 02:58:19.000000000 +0200
+++ libmemcached-1.0.8.modified/libtest/server.cc	2012-10-11 19:43:49.000000000 +0200
@@ -222,8 +222,7 @@
           continue;
         }
 
-        char buf[PATH_MAX];
-        char *getcwd_buf= getcwd(buf, sizeof(buf));
+        char *getcwd_buf= getcwd(NULL, 0);
         throw libtest::fatal(LIBYATL_DEFAULT_PARAM,
                              "Unable to open pidfile in %s for: %s stderr:%s",
                              getcwd_buf ? getcwd_buf : "",
diff -ur libmemcached-1.0.8/libtest/timer.hpp libmemcached-1.0.8.modified/libtest/timer.hpp
--- libmemcached-1.0.8/libtest/timer.hpp	2012-05-13 01:52:47.000000000 +0200
+++ libmemcached-1.0.8.modified/libtest/timer.hpp	2012-10-11 21:29:19.000000000 +0200
@@ -39,7 +39,7 @@
 #include <ctime>
 #include <ostream>
 
-#ifdef __MACH__
+#if defined(__MACH__) && !defined(__GNU__) 
 #  include <mach/clock.h>
 #  include <mach/mach.h>
 #else
@@ -90,7 +90,7 @@
 private:
   void _time(struct timespec& ts)
   {
-#ifdef __MACH__ // OSX lacks clock_gettime()
+#if defined(__MACH__) && !defined(__GNU__)  // OSX lacks clock_gettime()
     clock_serv_t _clock_serv;
     mach_timespec_t _mach_timespec;
     host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &_clock_serv);
diff -ur libmemcached-1.0.8/memcached/memcached.c libmemcached-1.0.8.modified/memcached/memcached.c
--- libmemcached-1.0.8/memcached/memcached.c	2012-05-13 01:52:47.000000000 +0200
+++ libmemcached-1.0.8.modified/memcached/memcached.c	2012-10-11 21:34:20.000000000 +0200
@@ -49,7 +49,7 @@
 
 /* FreeBSD 4.x doesn't have IOV_MAX exposed. */
 #ifndef IOV_MAX
-#if defined(__FreeBSD__) || defined(__APPLE__)
+#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__GNU__)
 # define IOV_MAX 1024
 #endif
 #endif
@@ -5216,18 +5216,24 @@
     /* create the listening socket, bind it, and init */
     if (settings.socketpath == NULL) {
         const char *portnumber_filename = getenv("MEMCACHED_PORT_FILENAME");
-        char temp_portnumber_filename[PATH_MAX];
+        char *temp_portnumber_filename = NULL;
+        size_t len;
         FILE *portnumber_file = NULL;
 
         if (portnumber_filename != NULL) {
-            snprintf(temp_portnumber_filename,
-                     sizeof(temp_portnumber_filename),
+            len = strlen(portnumber_filename) + 4 + 1;
+            if ((temp_portnumber_filename = malloc(len)) == NULL) {
+                 fprintf(stderr, "Failed to allocate memory\n");
+                 exit(EXIT_FAILURE);
+    }
+            snprintf(temp_portnumber_filename, len,
                      "%s.lck", portnumber_filename);
 
             portnumber_file = fopen(temp_portnumber_filename, "a");
             if (portnumber_file == NULL) {
                 fprintf(stderr, "Failed to open \"%s\": %s\n",
                         temp_portnumber_filename, strerror(errno));
+                free(temp_portnumber_filename);
             }
         }
 
@@ -5235,6 +5241,7 @@
         if (settings.port && server_sockets(settings.port, tcp_transport,
                                            portnumber_file)) {
             vperror("failed to listen on TCP port %d", settings.port);
+            free(temp_portnumber_filename);
             exit(EX_OSERR);
         }
 
@@ -5250,12 +5257,14 @@
         if (settings.udpport && server_sockets(settings.udpport, udp_transport,
                                               portnumber_file)) {
             vperror("failed to listen on UDP port %d", settings.udpport);
+            free(temp_portnumber_filename);
             exit(EX_OSERR);
         }
 
         if (portnumber_file) {
             fclose(portnumber_file);
             rename(temp_portnumber_filename, portnumber_filename);
+            free(temp_portnumber_filename);
         }
     }
 

Reply to: