Hi Colum,

On Thu, Feb 11, 2016 at 09:00:11AM +0000, Colum Paget wrote:
> UDEV is being used to obtain
>  the path to the model-id file in the sys filesystem, but as this is available
>  via /sys/dev/char/<major>:<minor> the UDEV code can be pretty much replaced
>  by a single line sprintf. Autoconf has been modified to allow --enable-udev
>  to be passed to configure (default is to use UDEV if it's available).

what system are you on where you don't have udev but you run linuxwacom?

> Signed-off-by: Colum Paget <colum.pa...@googlemail.com>
> ---
>  configure.ac                     | 15 +++++++++++---
>  src/wcmISDV4.c                   | 44 
> ++++++++++++++++++++++++++++++++++++++++
>  tools/isdv4-serial-inputattach.c | 39 +++++++++++++++++++++++++++++++++++
>  3 files changed, 95 insertions(+), 3 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 669d88e..9208ac6 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -23,7 +23,7 @@
>  # Initialize Autoconf
>  AC_PREREQ([2.60])
>  AC_INIT([xf86-input-wacom],
> -        [0.32.0],
> +        [0.32.1],

version numbering is done by the maintainer, please drop this hunk.

>          [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
>          [xf86-input-wacom])
>  AC_CONFIG_MACRO_DIR([m4])
> @@ -32,7 +32,7 @@ AC_CONFIG_HEADERS([config.h])
> 
>  # Initialize Automake
>  AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip])
> -AM_MAINTAINER_MODE([enable])
> +AM_MAINTAINER_MODE([disable])

this shouldn't be here.


>  AC_USE_SYSTEM_EXTENSIONS
> 
>  # Initialize libtool
> @@ -57,8 +57,16 @@ PKG_CHECK_MODULES(XORG, [xorg-server >= 1.7.0] $XPROTOS)
>  # Obtain compiler/linker options for the xsetwacom tool
>  PKG_CHECK_MODULES(X11, x11 xi xrandr xinerama $XPROTOS)
> 
> +
> +AC_ARG_ENABLE(udev,
> +                                             
> AS_HELP_STRING([--enable-udev],[use udev
> (default=auto)]),[USE_UDEV=$enableval], [USE_UDEV=auto])
> +
> +
> +if test "$USE_UDEV" != "no"
> +then
>  # Obtain compiler/linker options for libudev used by ISDV4 code
> -PKG_CHECK_MODULES(UDEV, libudev)
> +PKG_CHECK_MODULES([UDEV], [libudev], [AC_DEFINE(HAVE_UDEV)],
> [AC_DEFINE(NO_UDEV)])
> +fi

fwiw, if we have a reliable non-udev approach then we don't need to keep the
udev bits around.

>  # X Server SDK location is required to install wacom header files
>  # This location is also relayed in the xorg-wacom.pc file
> @@ -162,6 +170,7 @@ SYSTEMD_UNIT_DIR=${unitdir}
>  AC_SUBST(SYSTEMD_UNIT_DIR)
>  AM_CONDITIONAL(HAVE_SYSTEMD_UNIT_DIR, [test "x$SYSTEMD_UNIT_DIR" != "xno"])
> 
> +
>  AC_ARG_WITH(udev-rules-dir,
>              AS_HELP_STRING([--with-udev-rules-dir=DIR],
>                             [Directory where udev expects its rules files

detritus, please remove

> diff --git a/src/wcmISDV4.c b/src/wcmISDV4.c
> index 95001a1..2cbf65b 100644
> --- a/src/wcmISDV4.c
> +++ b/src/wcmISDV4.c
> @@ -28,7 +28,9 @@
>  #include "isdv4.h"
>  #include <unistd.h>
>  #include <fcntl.h>
> +#ifdef HAVE_UDEV
>  #include <libudev.h>
> +#endif
>  #include <sys/types.h>
>  #include <sys/stat.h>
> 
> @@ -975,6 +977,8 @@ static Bool get_keys_vendor_tablet_id(char *name,
> WacomCommonPtr common)
>   * @param buf[out] preallocated buffer to return the result in.
>   * @param buf_size: size of preallocated buffer
>   */
> +
> +#ifdef HAVE_UDEV
>  static Bool get_sysfs_id(InputInfoPtr pInfo, char *buf, int buf_size)
>  {
>       WacomDevicePtr  priv = (WacomDevicePtr)pInfo->private;
> @@ -1017,6 +1021,46 @@ out:
> 
>       return ret;
>  }
> +#else
> +//Alternative for systems lacking udev
> +static Bool get_sysfs_id(InputInfoPtr pInfo, char *buf, int buf_size)
> +{
> +     WacomDevicePtr  priv = (WacomDevicePtr)pInfo->private;
> +     struct stat st;
> +     char *sysfs_path = NULL;
> +     FILE *file = NULL;
> +     Bool ret = FALSE;
> +     int bytes_read;
> +
> +     // Stat the file descriptor to get st_rdev, which holds major/minor
> +     //device numbers. Use this to look up device id (identifies model)
> +     //   /sys/dev/<major>:<minor>

we don't use // comments, and please make sure indentation and whitespace
usage matches the rest of the file. That goes for the whole patch.

> +
> +     if (fstat(pInfo->fd, &st) > -1)
> +     {
> +     asprintf(&sysfs_path,"/sys/dev/%d:%d/device/id",major(st.st_rdev),
> minor(st.st_rdev));

your commit message says /sys/dev/char/ but here you use
/sys/dev/major:minor which doesn't exist. Did you test this patch?

also, sprintf into a PATH_MAX buffer means you don't have the worry about
allocation.

> +
> +     DBG(8, priv, "sysfs path: %s\n", sysfs_path);
> +
> +     file = fopen(sysfs_path, "r");
> +     if (file)
> +     {
> +             bytes_read = fread(buf, 1, buf_size - 1, file);
> +             if (bytes_read > 0)
> +             {
> +                     buf[bytes_read] = '\0';
> +                     ret = TRUE;
> +             }
> +             fclose(file);
> +     }
> +     }
> +
> +     free(sysfs_path);
> +
> +     return ret;
> +}
> +#endif
> +
> 
>  /**
>   * Query the device's fd for the key bits and the tablet ID. Returns the ID
> diff --git a/tools/isdv4-serial-inputattach.c 
> b/tools/isdv4-serial-inputattach.c
> index 711f6ed..7a55b79 100644
> --- a/tools/isdv4-serial-inputattach.c
> +++ b/tools/isdv4-serial-inputattach.c
> @@ -23,7 +23,9 @@
>  #endif
> 
>  #include <linux/serio.h>
> +#ifdef HAVE_UDEV
>  #include <libudev.h>
> +#endif
> 
>  #include <getopt.h>
>  #include <stdio.h>
> @@ -80,6 +82,7 @@ static int bind_kernel_driver(int fd)
>       return 0;
>  }
> 
> +#ifdef HAVE_UDEV
>  static unsigned int get_baud_rate(int fd)
>  {
>       struct stat st;
> @@ -116,6 +119,42 @@ static unsigned int get_baud_rate(int fd)
> 
>       return baudrate;
>  }
> +#else
> +//Alternative for systems lacking udev
> +static unsigned int get_baud_rate(int fd)
> +{
> +     struct stat st;
> +     unsigned int baudrate = 19200;
> +     int id, bytes_read;
> +     char *sysfs_path=NULL, *buf=NULL;
> +     FILE *file;
> +
> +     if (fstat(fd, &st) == -1) return 0;
> +     asprintf(&sysfs_path,"/sys/dev/%d:%d/device/id",major(st.st_rdev),
> minor(st.st_rdev));
> +
> +     file = fopen(sysfs_path, "r");
> +     if (file)
> +     {
> +             buf=calloc(256, sizeof(char));
> +             bytes_read = fread(buf, 1, 255, file);
> +             if (bytes_read > 0)
> +             {
> +             /* Devices up to WACf007 are 19200, newer devices are 38400. FUJ
> +        devices are all 19200 */
> +                     if (strncmp(buf, "WACf", 4) == 0)
> +                     {
> +                             if (strtol(buf+4,NULL,10) > 7) baudrate = 38400;
> +                     }

please don't duplicate this, factor it out and use it from both code paths.

other than that, yeah, we don't really use anything udev-y here so the
replacement itself would be ok.

Cheers,
   Peter

> +             }
> +             fclose(file);
> +     }
> +
> +     free(sysfs_path);
> +     free(buf);
> +     return baudrate;
> +}
> +#endif
> +
> 
>  static void sighandler(int signum)
>  {
> -- 
> 1.9.rc0
 

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to