Factor out devtomajmin() and devtype() - smdev - suckless mdev
 (HTM) git clone git://git.suckless.org/smdev
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4953771833f88278c3109e0b40d5746f9004fc9b
 (DIR) parent 733f60dba2b8c878945b856c23a6bc44de52fc11
 (HTM) Author: sin <sin@2f30.org>
       Date:   Wed, 21 Aug 2013 09:13:20 +0100
       
       Factor out devtomajmin() and devtype()
       
       Diffstat:
         M Makefile                            |       1 +
         M smdev.c                             |      40 -------------------------------
         M util.h                              |       2 ++
         A util/dev.c                          |      46 +++++++++++++++++++++++++++++++
       
       4 files changed, 49 insertions(+), 40 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -6,6 +6,7 @@ include config.mk
        LIB = \
                util/agetcwd.o      \
                util/apathmax.o     \
       +        util/dev.o          \
                util/eprintf.o      \
                util/estrtol.o      \
                util/recurse.o
 (DIR) diff --git a/smdev.c b/smdev.c
       @@ -14,8 +14,6 @@
        #include "config.h"
        #include "util.h"
        
       -static int devtomajmin(const char *path, int *maj, int *min);
       -static int devtype(const char *majmin);
        static int create_dev(const char *path);
        static void sysrecurse(const char *path);
        
       @@ -46,44 +44,6 @@ main(int argc, char *argv[])
                return 0;
        }
        
       -/* Example `path' is /sys/devices/virtual/tty/tty0/dev */
       -static int
       -devtomajmin(const char *path, int *maj, int *min)
       -{
       -        char buf[BUFSIZ];
       -        int fd;
       -        ssize_t n;
       -
       -        fd = open(path, O_RDONLY);
       -        if (fd < 0)
       -                eprintf("open %s:", path);
       -        n = read(fd, buf, sizeof(buf) - 1);
       -        close(fd);
       -        if (n < 0)
       -                eprintf("%s: read error:", path);
       -        if (!n)
       -                return -1;
       -        if (buf[n - 1] == '\n')
       -                buf[n - 1] = '\0';
       -        buf[n] = '\0';
       -        sscanf(buf, "%d:%d", maj, min);
       -        return 0;
       -}
       -
       -static int
       -devtype(const char *majmin)
       -{
       -        char path[PATH_MAX];
       -
       -        snprintf(path, sizeof(path), "/sys/dev/block/%s", majmin);
       -        if (!access(path, F_OK))
       -                return S_IFBLK;
       -        snprintf(path, sizeof(path), "/sys/dev/char/%s", majmin);
       -        if (!access(path, F_OK))
       -                return S_IFCHR;
       -        return -1;
       -}
       -
        static int
        create_dev(const char *path)
        {
 (DIR) diff --git a/util.h b/util.h
       @@ -7,6 +7,8 @@ extern char *argv0;
        
        char *agetcwd(void);
        void apathmax(char **, long *);
       +int devtomajmin(const char *path, int *maj, int *min);
       +int devtype(const char *majmin);
        void enprintf(int, const char *, ...);
        void eprintf(const char *, ...);
        long estrtol(const char *, int);
 (DIR) diff --git a/util/dev.c b/util/dev.c
       @@ -0,0 +1,46 @@
       +/* See LICENSE file for copyright and license details. */
       +#include <sys/stat.h>
       +#include <fcntl.h>
       +#include <unistd.h>
       +#include <limits.h>
       +#include <stdio.h>
       +#include "../util.h"
       +
       +/* Example `path' is /sys/devices/virtual/tty/tty0/dev */
       +int
       +devtomajmin(const char *path, int *maj, int *min)
       +{
       +        char buf[BUFSIZ];
       +        int fd;
       +        ssize_t n;
       +
       +        fd = open(path, O_RDONLY);
       +        if (fd < 0)
       +                eprintf("open %s:", path);
       +        n = read(fd, buf, sizeof(buf) - 1);
       +        close(fd);
       +        if (n < 0)
       +                eprintf("%s: read error:", path);
       +        if (!n)
       +                return -1;
       +        if (buf[n - 1] == '\n')
       +                buf[n - 1] = '\0';
       +        buf[n] = '\0';
       +        sscanf(buf, "%d:%d", maj, min);
       +        return 0;
       +}
       +
       +/* `majmin' format is maj:min */
       +int
       +devtype(const char *majmin)
       +{
       +        char path[PATH_MAX];
       +
       +        snprintf(path, sizeof(path), "/sys/dev/block/%s", majmin);
       +        if (!access(path, F_OK))
       +                return S_IFBLK;
       +        snprintf(path, sizeof(path), "/sys/dev/char/%s", majmin);
       +        if (!access(path, F_OK))
       +                return S_IFCHR;
       +        return -1;
       +}