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

spl: FTBFS on hurd-386 (for review)



Source: spl
Version: 1.0~pre6-3.1
Severity: Important
Tags: patch
Usertags: hurd
User: debian-hurd@lists.debian.org

Hi, the attached patch enable a successful build of spl on GNU/Hurd. The
call sequence is as follows:

webspld.c: (save for indentation)
static char *daemon_basedir = ".";

int main(int argc, char **argv)
  daemon_basedir = getcwd(NULL,0);
...
  listen_loop();
...
   free(pool);
   free(daemon_basedir);
...

static void listen_loop()
  handle_conn(&args);

static void *handle_conn(void *args_p)
...
  handle_http_request(args->fd,
    webspld_vm_pool_get, webspld_vm_pool_put,
    code_cache_list ? cached_filename_to_codepage : 0);
...

static struct spl_vm *webspld_vm_pool_get(const char *session, int
create)
...
  my_asprintf(&pool[oldest_entry].vm->path,
    ".:./spl_modules:%s/spl_modules:%s",
    daemon_basedir, spl_system_modules_dir());
...

The tricky thing is to find out where to free deamon_basedir properly.

--- a/webspld.c	2008-09-18 16:34:23.000000000 +0200
+++ b/webspld.c	2012-08-29 10:36:29.000000000 +0200
@@ -62,7 +62,11 @@
 static int pool_size = 32;
 static struct pool_entry *pool = 0;
 
+#if (_POSIX_C_SOURCE >= 200809L)
+static char *daemon_basedir = ".";
+#else
 static char daemon_basedir[PATH_MAX] = ".";
+#endif
 
 struct code_cache {
 	char *filename;
@@ -640,7 +644,11 @@
 	struct sockaddr_in addr;
 	struct linger sl = { 1, 5 };
 
+#if (_POSIX_C_SOURCE >= 200809L)
+	daemon_basedir = getcwd(NULL,0);
+#else
 	getcwd(daemon_basedir, PATH_MAX);
+#endif
 
 	printf("Loading SPL CGI module.\n");
 	SPL_REGISTER_BUILTIN_MODULE(cgi);
@@ -707,7 +715,9 @@
 	webspld_vm_pool_cleanup();
 	SPL_FREE_BUILTIN_MODULES();
 	free(pool);
-
+#if (_POSIX_C_SOURCE >= 200809L)
+	free(daemon_basedir);
+#endif
 	if (code_cache_size) {
 		for (int i=0; i<code_cache_size; i++)
 			free_code_cache(code_cache_list + i);

Reply to: