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: