On Fri, 2011-11-25 at 08:48 +0100, Svante Signell wrote:
> On Fri, 2011-11-25 at 07:52 +0100, Tollef Fog Heen wrote:
> > ]] Svante Signell 
> > 
> > It's stuck upstream until somebody provides an updated patch which you
> > could trivially have found out for yourself.
> 
> Sorry, I did not look at the upstream ticket. I'll provide an updated
> patch in due time.

Attached is an updated patch for mlocate that might suit upstream
better. It checks the availability of get_current_dir_name() and
canonicalize_file_name() in configure.ac, and use these functions if
they are available. Otherwise it falls back to the old PATH_MAX based
solution.

Thanks!
diff -ur mlocate-0.23.1/configure.ac mlocate-0.23.1.modified/configure.ac
--- mlocate-0.23.1/configure.ac	2010-09-14 15:50:32.000000000 +0200
+++ mlocate-0.23.1.modified/configure.ac	2011-11-28 23:14:55.000000000 +0100
@@ -47,7 +47,7 @@
 
 # Checks for library functions.
 ## getopt_long () availability should be checked here
-AC_CHECK_FUNCS_ONCE([fdopendir])
+AC_CHECK_FUNCS_ONCE([fdopendir get_current_dir_name canonicalize_file_name])
 AC_FUNC_GETMNTENT
 
 # Checks for system services.
diff -ur mlocate-0.23.1/src/conf.c mlocate-0.23.1.modified/src/conf.c
--- mlocate-0.23.1/src/conf.c	2008-06-29 23:53:33.000000000 +0200
+++ mlocate-0.23.1.modified/src/conf.c	2011-11-28 23:53:04.000000000 +0100
@@ -470,6 +470,13 @@
 static char *
 prepend_cwd (const char *path)
 {
+#ifdef HAVE_GET_CURRENT_DIR_NAME
+  char *buf = NULL;
+  size_t len1, size2;
+
+  buf = get_current_dir_name();
+  if (buf == NULL)
+#else
   char *buf, *res;
   size_t size, len1, size2;
 
@@ -479,6 +486,7 @@
     buf = x2realloc (buf, &size);
   while ((res = getcwd (buf, size)) == NULL && errno == ERANGE);
   if (res == NULL)
+#endif
     error (EXIT_FAILURE, errno, _("can not get current working directory"));
   len1 = strlen (buf);
   size2 = strlen (path) + 1;
diff -ur mlocate-0.23.1/src/updatedb.c mlocate-0.23.1.modified/src/updatedb.c
--- mlocate-0.23.1/src/updatedb.c	2010-03-30 15:34:12.000000000 +0200
+++ mlocate-0.23.1.modified/src/updatedb.c	2011-11-29 00:21:41.000000000 +0100
@@ -265,11 +265,17 @@
   if (fd == -1)
     {
       old_db.fd = -1;
+#ifdef HAVE_GET_CURRENT_DIR_NAME
+      free (conf_output);
+#endif
       goto err;
     }
   if (db_open (&old_db, &hdr, fd, conf_output, true) != 0)
     {
       old_db.fd = -1;
+#ifdef HAVE_GET_CURRENT_DIR_NAME
+      free (conf_output);
+#endif
       goto err;
     }
   size = ntohl (hdr.conf_size);
@@ -379,9 +385,15 @@
       if (hasmntopt (me, "bind") != NULL
 	  && strcmp (me->mnt_fsname, me->mnt_dir) != 0)
 	{
+#ifdef HAVE_CANONICALIZE_FILE_NAME
+	  char *dir;
+
+	  dir = canonicalize_file_name (me->mnt_dir);
+#else
 	  char dbuf[PATH_MAX], *dir;
 
 	  dir = realpath (me->mnt_dir, dbuf);
+#endif
 	  if (dir == NULL)
 	    dir = me->mnt_dir;
 	  if (conf_debug_pruning != false)
@@ -489,9 +501,13 @@
 	{
 	  char *dir;
 #ifndef PROC_MOUNTS_PATH
+#ifdef HAVE_CANONICALIZE_FILE_NAME
+	  dir = canonicalize_file_name (me->mnt_dir);
+#else
 	  char dbuf[PATH_MAX];
 
 	  dir = realpath (me->mnt_dir, dbuf);
+#endif
 	  if (dir == NULL)
 	    dir = me->mnt_dir;
 #else

Reply via email to