Hello community,

here is the log from the commit of package libgpiod for openSUSE:Leap:15.2 
checked in at 2020-05-28 20:11:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/libgpiod (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.libgpiod.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libgpiod"

Thu May 28 20:11:02 2020 rev:11 rq:809623 version:1.4.3

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/libgpiod/libgpiod.changes      2020-03-21 
16:47:05.697643442 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.libgpiod.new.3606/libgpiod.changes    
2020-05-28 20:11:05.207165202 +0200
@@ -1,0 +2,6 @@
+Mon May 25 04:34:40 UTC 2020 - Petr Tesařík <[email protected]>
+
+- Update to version 1.4.3 (Bug fixes release):
+  * relax gpiod_chip_open() for symbolic links
+
+-------------------------------------------------------------------

Old:
----
  libgpiod-1.4.2.tar.gz

New:
----
  libgpiod-1.4.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libgpiod.spec ++++++
--- /var/tmp/diff_new_pack.Te6s6C/_old  2020-05-28 20:11:05.963167453 +0200
+++ /var/tmp/diff_new_pack.Te6s6C/_new  2020-05-28 20:11:05.967167465 +0200
@@ -26,7 +26,7 @@
 %bcond_with libgpiod_tests
 %endif
 Name:           libgpiod
-Version:        1.4.2
+Version:        1.4.3
 Release:        0
 Summary:        C library and tools for interacting with the linux GPIO 
character device
 License:        LGPL-2.1-or-later

++++++ libgpiod-1.4.2.tar.gz -> libgpiod-1.4.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgpiod-1.4.2/NEWS new/libgpiod-1.4.3/NEWS
--- old/libgpiod-1.4.2/NEWS     2020-01-27 17:35:09.000000000 +0100
+++ new/libgpiod-1.4.3/NEWS     2020-03-31 10:26:46.000000000 +0200
@@ -1,3 +1,9 @@
+libgpiod v1.4.3
+===============
+
+Bug fixes:
+- relax gpiod_chip_open() for symbolic links
+
 libgpiod v1.4.2
 ===============
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgpiod-1.4.2/configure.ac 
new/libgpiod-1.4.3/configure.ac
--- old/libgpiod-1.4.2/configure.ac     2020-01-27 17:35:09.000000000 +0100
+++ new/libgpiod-1.4.3/configure.ac     2020-03-31 10:26:46.000000000 +0200
@@ -8,7 +8,7 @@
 
 AC_PREREQ(2.61)
 
-AC_INIT([libgpiod], 1.4.2)
+AC_INIT([libgpiod], 1.4.3)
 AC_SUBST(EXTRA_VERSION, [])
 
 AC_DEFINE_UNQUOTED([GPIOD_VERSION_STR],
@@ -30,7 +30,7 @@
 #
 # Define the libtool version as (C.R.A):
 # NOTE: this version only applies to the core C library.
-AC_SUBST(ABI_VERSION, [3.2.1])
+AC_SUBST(ABI_VERSION, [3.3.1])
 # Have a separate ABI version for C++ bindings:
 AC_SUBST(ABI_CXX_VERSION, [1.4.0])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libgpiod-1.4.2/lib/core.c 
new/libgpiod-1.4.3/lib/core.c
--- old/libgpiod-1.4.2/lib/core.c       2020-01-27 17:35:09.000000000 +0100
+++ new/libgpiod-1.4.3/lib/core.c       2020-03-31 10:26:46.000000000 +0200
@@ -10,6 +10,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <gpiod.h>
+#include <limits.h>
 #include <linux/gpio.h>
 #include <poll.h>
 #include <stdint.h>
@@ -62,7 +63,7 @@
 
 static bool is_gpiochip_cdev(const char *path)
 {
-       char *name, *pathcpy, *sysfsp, sysfsdev[16], devstr[16];
+       char *name, *realname, *sysfsp, sysfsdev[16], devstr[16];
        struct stat statbuf;
        bool ret = false;
        int rv, fd;
@@ -72,6 +73,19 @@
        if (rv)
                goto out;
 
+       /*
+        * Is it a symbolic link? We have to resolve symbolic link before
+        * checking the rest.
+        */
+       realname = S_ISLNK(statbuf.st_mode) ? realpath(path, NULL)
+                                           : strdup(path);
+       if (realname == NULL)
+               goto out;
+
+       rv = stat(realname, &statbuf);
+       if (rv)
+               goto out_free_realname;
+
        /* Is it a character device? */
        if (!S_ISCHR(statbuf.st_mode)) {
                /*
@@ -81,20 +95,16 @@
                 * libgpiod from before the introduction of this routine.
                 */
                errno = ENOTTY;
-               goto out;
+               goto out_free_realname;
        }
 
        /* Get the basename. */
-       pathcpy = strdup(path);
-       if (!pathcpy)
-               goto out;
-
-       name = basename(pathcpy);
+       name = basename(realname);
 
        /* Do we have a corresponding sysfs attribute? */
        rv = asprintf(&sysfsp, "/sys/bus/gpio/devices/%s/dev", name);
        if (rv < 0)
-               goto out_free_pathcpy;
+               goto out_free_realname;
 
        if (access(sysfsp, R_OK) != 0) {
                /*
@@ -136,8 +146,8 @@
 
 out_free_sysfsp:
        free(sysfsp);
-out_free_pathcpy:
-       free(pathcpy);
+out_free_realname:
+       free(realname);
 out:
        return ret;
 }


Reply via email to