dev.c - smdev - suckless mdev
 (HTM) git clone git://git.suckless.org/smdev
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       dev.c (1034B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <sys/stat.h>
            3 #include <fcntl.h>
            4 #include <unistd.h>
            5 #include <limits.h>
            6 #include <stdlib.h>
            7 #include <stdio.h>
            8 #include <string.h>
            9 #include "../util.h"
           10 
           11 /* read uevent file and set environment variables */
           12 int
           13 readuevent(const char *file)
           14 {
           15         FILE *fp;
           16         int status = 0;
           17         char buf[BUFSIZ];
           18         char *p, *name, *value;
           19 
           20         if(!(fp = fopen(file, "r")))
           21                 return -1;
           22         while(!feof(fp)) {
           23                 fgets(buf, sizeof(buf) - 1, fp);
           24                 if(ferror(fp)) {
           25                         status = -2;
           26                         break;
           27                 }
           28                 if((p = strchr(buf, '\n')))
           29                         *p = '\0';
           30                 if(!(p = strchr(buf, '=')))
           31                         continue;
           32                 *p = '\0';
           33                 p++;
           34                 name = buf;
           35                 value = p;
           36                 setenv(name, value, 1);
           37         }
           38         fclose(fp);
           39         return status;
           40 }
           41 
           42 /* `majmin' format is maj:min */
           43 int
           44 devtype(const char *majmin)
           45 {
           46         char path[PATH_MAX];
           47 
           48         snprintf(path, sizeof(path), "/sys/dev/block/%s", majmin);
           49         if (!access(path, F_OK))
           50                 return S_IFBLK;
           51         snprintf(path, sizeof(path), "/sys/dev/char/%s", majmin);
           52         if (!access(path, F_OK))
           53                 return S_IFCHR;
           54         return -1;
           55 }