diff mbox

[1/1] libqmi: musl compat canonicalize_file_name

Message ID 1493688546-37339-1-git-send-email-matthew.weber@rockwellcollins.com
State Accepted
Headers show

Commit Message

Matt Weber May 2, 2017, 1:29 a.m. UTC
Adds an inline equivalent of canonicalize_file_name
using realpath().

Bug report (origin of this patch):
https://bugs.freedesktop.org/show_bug.cgi?id=99944

Resolves:
http://autobuild.buildroot.net/results/afa/afa4b97e012586585b11be1e70ed3c63a7c48a4d/

  CCLD     test-generated
  CCLD     test-utils
  CCLD     test-message
../../../src/libqmi-glib/.libs/libqmi-glib.so: undefined reference to `canonicalize_file_name'
collect2: error: ld returned 1 exit status
Makefile:440: recipe for target 'test-generated' failed

Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
---
 .../0001-musl-compat-canonicalize_file_name.patch  | 48 ++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 package/libqmi/0001-musl-compat-canonicalize_file_name.patch

Comments

Thomas Petazzoni May 4, 2017, 3:13 p.m. UTC | #1
Hello,

On Mon,  1 May 2017 20:29:06 -0500, Matt Weber wrote:
> Adds an inline equivalent of canonicalize_file_name
> using realpath().
> 
> Bug report (origin of this patch):
> https://bugs.freedesktop.org/show_bug.cgi?id=99944
> 
> Resolves:
> http://autobuild.buildroot.net/results/afa/afa4b97e012586585b11be1e70ed3c63a7c48a4d/
> 
>   CCLD     test-generated
>   CCLD     test-utils
>   CCLD     test-message
> ../../../src/libqmi-glib/.libs/libqmi-glib.so: undefined reference to `canonicalize_file_name'
> collect2: error: ld returned 1 exit status
> Makefile:440: recipe for target 'test-generated' failed
> 
> Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
> ---
>  .../0001-musl-compat-canonicalize_file_name.patch  | 48 ++++++++++++++++++++++
>  1 file changed, 48 insertions(+)
>  create mode 100644 package/libqmi/0001-musl-compat-canonicalize_file_name.patch

Applied to master, thanks.

Thomas
Thomas Petazzoni May 4, 2017, 7:39 p.m. UTC | #2
Hello,

On Mon,  1 May 2017 20:29:06 -0500, Matt Weber wrote:

> ++#ifndef HAVE_CANONICALIZE_FILE_NAME
> ++#include <limits.h>
> ++#include <string.h>
> ++#include <stdlib.h>
> ++#include <stdio.h>
> ++static char * canonicalize_file_name(const char *path)
> ++{
> ++       char buf[PATH_MAX] = { };
> ++
> ++       snprintf(buf, sizeof(buf) - 1, "%s", path);
> ++
> ++       if (!realpath(path, buf))
> ++               return NULL;
> ++
> ++       return strdup(buf);
> ++}
> ++#endif

This has been insufficiently tested: while it fixes the build with
musl, it breaks the build with glibc and uclibc. Indeed, those C
libraries already provide canonicalize_file_name(), causing a
redefinition error.

You forgot to add an AC_CHECK_FUNCS() check in configure.ac. I've
committed a fix that adds it.

Please try to test more carefully the fixes.

Thanks!

Thomas
diff mbox

Patch

diff --git a/package/libqmi/0001-musl-compat-canonicalize_file_name.patch b/package/libqmi/0001-musl-compat-canonicalize_file_name.patch
new file mode 100644
index 0000000..5656d55
--- /dev/null
+++ b/package/libqmi/0001-musl-compat-canonicalize_file_name.patch
@@ -0,0 +1,48 @@ 
+From 2f44edc9fbcbf2202174aec723e8a8d191c13d2f Mon Sep 17 00:00:00 2001
+From: Matt Weber <matthew.weber@rockwellcollins.com>
+Date: Mon, 1 May 2017 19:55:07 -0500
+Subject: [PATCH] musl compat canonicalize_file_name()
+
+Adds an inline equivalent of canonicalize_file_name
+using realpath().
+
+Bug report (origin of this patch):
+https://bugs.freedesktop.org/show_bug.cgi?id=99944
+
+Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
+---
+ src/libqmi-glib/qmi-utils.h | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/src/libqmi-glib/qmi-utils.h b/src/libqmi-glib/qmi-utils.h
+index 4fd5199..4869da5 100644
+--- a/src/libqmi-glib/qmi-utils.h
++++ b/src/libqmi-glib/qmi-utils.h
+@@ -29,6 +29,24 @@
+ #error "Only <libqmi-glib.h> can be included directly."
+ #endif
+ 
++#ifndef HAVE_CANONICALIZE_FILE_NAME
++#include <limits.h>
++#include <string.h>
++#include <stdlib.h>
++#include <stdio.h>
++static char * canonicalize_file_name(const char *path)
++{
++       char buf[PATH_MAX] = { };
++
++       snprintf(buf, sizeof(buf) - 1, "%s", path);
++
++       if (!realpath(path, buf))
++               return NULL;
++
++       return strdup(buf);
++}
++#endif
++
+ #include <glib.h>
+ 
+ G_BEGIN_DECLS
+-- 
+1.9.1
+