Package: gjacktransport Severity: important Tags: patch Dear Maintainer,
gjacktransport FTBFS on hurd-i386 because it uses PATH_MAX unconditionally. The attached patch should fix this issue. WBR, Cyril Roelandt. -- System Information: Debian Release: wheezy/sid APT prefers unreleased APT policy: (500, 'unreleased'), (500, 'unstable') Architecture: hurd-i386 (i686-AT386) Kernel: GNU-Mach 1.3.99/Hurd-0.3 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Shell: /bin/sh linked to /bin/dash
diff --git a/src/gjack.c b/src/gjack.c index b7a9026..5915dee 100644 --- a/src/gjack.c +++ b/src/gjack.c @@ -16,27 +16,39 @@ extern GtkWidget *window1; void dothejack (gboolean onoff); void status_msg (char *msg) { - gchar buf[PATH_MAX]; + gchar *buf; guint context = 1; GtkWidget *statusbar1; - statusbar1=lookup_widget(window1,"statusbar1"); + size_t size; - snprintf(buf, PATH_MAX, "%s", msg); + statusbar1=lookup_widget(window1,"statusbar1"); + size = 1+strlen(msg); + buf = malloc(size); + if (buf == NULL) + return; + + snprintf(buf, size, "%s", msg); gtk_statusbar_pop(GTK_STATUSBAR(statusbar1), context); gtk_statusbar_push(GTK_STATUSBAR(statusbar1), context, buf); + free(buf); } void status_printf (const char *format, ...) { va_list arglist; - char text[PATH_MAX]; + char *text; + size_t text_size; va_start(arglist, format); - vsnprintf(text, PATH_MAX, format, arglist); + text_size = vsnprintf(NULL, 0, format, arglist); + text = malloc(text_size); + if (text == NULL) + return; + vsnprintf(text, text_size, format, arglist); va_end(arglist); - text[PATH_MAX -1] =0; status_msg(text); + free(text); } /* end status bar */ diff --git a/src/resourceconfig.c b/src/resourceconfig.c index f63e8f2..6e153d1 100644 --- a/src/resourceconfig.c +++ b/src/resourceconfig.c @@ -30,6 +30,10 @@ # define SYSCFGDIR "/etc" #endif +#ifdef __GNU__ +#include <assert.h> +#endif + #include <stdio.h> #include <stdlib.h> #include <errno.h> @@ -116,6 +120,39 @@ void try_load_rc_file (char *filename) { } void load_rc (void) { +#ifdef __GNU__ + char *home; + char *filename; + size_t size, old_size; + + size = strlen(SYSCFGDIR) + strlen(GJACKTRANSPORTRC) + 2; + filename = malloc(size); + assert(filename); + sprintf(filename, "%s/%s", SYSCFGDIR, GJACKTRANSPORTRC); + try_load_rc_file(filename); + + home = getenv("HOME"); + if (home) { + old_size = size; + size = strlen(home) + strlen(GJACKTRANSPORTRC) + 2; + if (old_size < size) { + filename = realloc(filename, size); + assert(filename); + } + sprintf(filename, "%s/.%s", home, GJACKTRANSPORTRC); + try_load_rc_file(filename); + } + + old_size = size; + size = strlen(GJACKTRANSPORTRC) + 2; + if (old_size < size) { + filename = realloc(filename, size); + assert(filename); + } + sprintf(filename, "./%s", GJACKTRANSPORTRC); + try_load_rc_file(filename); + free(filename); +#else char *home; char filename[PATH_MAX]; if ((strlen(SYSCFGDIR) + strlen(GJACKTRANSPORTRC) + 2) < PATH_MAX) { @@ -131,6 +168,7 @@ void load_rc (void) { sprintf(filename, "./%s", GJACKTRANSPORTRC); try_load_rc_file(filename); } +#endif } /* vi:set ts=8 sts=2 sw=2: */