diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2008-09-06 15:45:31 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2008-09-06 15:45:31 +0200 |
commit | 7d563a17f3967890331daf08d43f2f005418139b (patch) | |
tree | 88b0c35d258a5b51fcadc1c0fc96ff80dfcaeacf /extras/fstab_import | |
parent | cf8ec631a23eae532541bfeeccce20f0d978404d (diff) |
use libudev code, unify logging, pass udev context around everywhere
Diffstat (limited to 'extras/fstab_import')
-rw-r--r-- | extras/fstab_import/79-fstab_import.rules | 2 | ||||
-rw-r--r-- | extras/fstab_import/Makefile.am | 6 | ||||
-rw-r--r-- | extras/fstab_import/fstab_import.c | 91 |
3 files changed, 47 insertions, 52 deletions
diff --git a/extras/fstab_import/79-fstab_import.rules b/extras/fstab_import/79-fstab_import.rules index ccd718c5f0..44accde482 100644 --- a/extras/fstab_import/79-fstab_import.rules +++ b/extras/fstab_import/79-fstab_import.rules @@ -1,2 +1,2 @@ -ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem|other", IMPORT="fstab_import --root=$root $name $links mapper/$env{DM_NAME}" +ACTION=="add", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem|other", IMPORT="fstab_import $name $links mapper/$env{DM_NAME}" diff --git a/extras/fstab_import/Makefile.am b/extras/fstab_import/Makefile.am index 0ee7efb9ce..902ab1e28e 100644 --- a/extras/fstab_import/Makefile.am +++ b/extras/fstab_import/Makefile.am @@ -8,10 +8,14 @@ dist_udevrules_DATA = \ AM_CPPFLAGS = \ -DSYSCONFDIR=\""$(sysconfdir)"\" \ - -DUDEV_PREFIX=\""$(udev_prefix)"\" + -DUDEV_PREFIX=\""$(udev_prefix)"\" \ + -D_LIBUDEV_COMPILATION fstab_import_SOURCES = \ fstab_import.c \ + ../../udev/lib/libudev.h \ + ../../udev/lib/libudev.c \ + ../../udev/udev_sysfs.c \ ../../udev/udev_sysdeps.c \ ../../udev/udev_utils.c \ ../../udev/udev_utils_string.c diff --git a/extras/fstab_import/fstab_import.c b/extras/fstab_import/fstab_import.c index 2d24cfb38a..0f4685ae2a 100644 --- a/extras/fstab_import/fstab_import.c +++ b/extras/fstab_import/fstab_import.c @@ -13,6 +13,8 @@ #define _GNU_SOURCE 1 #endif +#include "config.h" + #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -27,54 +29,32 @@ #include "../../udev/udev.h" static int debug; -static char root[PATH_SIZE] = "/dev"; -static char **devices; -#ifdef USE_LOG -void log_message(int priority, const char *format, ...) +static void log_fn(struct udev *udev, int priority, + const char *file, int line, const char *fn, + const char *format, va_list args) { - va_list args; - static int udev_log = -1; - - if (udev_log == -1) { - const char *value; - - value = getenv("UDEV_LOG"); - if (value) - udev_log = log_priority(value); - else - udev_log = LOG_ERR; - - if (debug && udev_log < LOG_INFO) - udev_log = LOG_INFO; - } - - if (priority > udev_log) - return; - - va_start(args, format); if (debug) { - fprintf(stderr, "[%d] ", (int) getpid()); + fprintf(stderr, "%s: ", fn); vfprintf(stderr, format, args); - } else + } else { vsyslog(priority, format, args); - va_end(args); + } } -#endif -static int matches_device_list(const char *name) +static int matches_device_list(struct udev *udev, char **devices, const char *name) { int i; for (i = 0; devices[i] != NULL; i++) { - info("compare '%s' == '%s'\n", name, devices[i]); + info(udev, "compare '%s' == '%s'\n", name, devices[i]); if (strcmp(devices[i], name) == 0) return 1; } return 0; } -static void print_fstab_entry(struct mntent *mnt) +static void print_fstab_entry(struct udev *udev, struct mntent *mnt) { printf("FSTAB_NAME=%s\n", mnt->mnt_fsname); printf("FSTAB_DIR=%s\n", mnt->mnt_dir); @@ -86,42 +66,48 @@ static void print_fstab_entry(struct mntent *mnt) int main(int argc, char *argv[]) { + struct udev *udev; static const struct option options[] = { { "export", 0, NULL, 'x' }, - { "root", 1, NULL, 'r' }, { "debug", 0, NULL, 'd' }, { "help", 0, NULL, 'h' }, {} }; - + char **devices; FILE *fp; struct mntent *mnt; - int rc = 0; + int rc = 1; + + udev = udev_new(); + if (udev == NULL) + goto exit; logging_init("fstab_id"); + udev_set_log_fn(udev, log_fn); while (1) { int option; - option = getopt_long(argc, argv, "dr:xh", options, NULL); + option = getopt_long(argc, argv, "dxh", options, NULL); if (option == -1) break; switch (option) { - case 'r': - strlcpy(root, optarg, sizeof(root)); - break; case 'd': debug = 1; + if (udev_get_log_priority(udev) < LOG_INFO) + udev_set_log_priority(udev, LOG_INFO); break; case 'h': printf("Usage: fstab_id [OPTIONS] name [...]\n" " --export print environment keys\n" - " --root device node root (default /dev)\n" " --debug debug to stderr\n" " --help print this help text\n\n"); + goto exit; + case 'x': + break; default: - rc = 1; + rc = 2; goto exit; } } @@ -129,14 +115,14 @@ int main(int argc, char *argv[]) devices = &argv[optind]; if (devices[0] == NULL) { fprintf(stderr, "error: missing device(s) to match\n"); - rc = 2; + rc = 3; goto exit; } fp = setmntent ("/etc/fstab", "r"); if (fp == NULL) { fprintf(stderr, "error: opening fstab: %s\n", strerror(errno)); - rc = 2; + rc = 4; goto exit; } @@ -145,6 +131,8 @@ int main(int argc, char *argv[]) if (mnt == NULL) break; + info(udev, "found '%s'@'%s'\n", mnt->mnt_fsname, mnt->mnt_dir); + /* skip root device */ if (strcmp(mnt->mnt_dir, "/") == 0) continue; @@ -165,8 +153,9 @@ int main(int argc, char *argv[]) pos[0] = '\0'; label = str; } - if (matches_device_list(str)) { - print_fstab_entry(mnt); + if (matches_device_list(udev, devices, str)) { + print_fstab_entry(udev, mnt); + rc = 0; break; } continue; @@ -188,26 +177,28 @@ int main(int argc, char *argv[]) pos[0] = '\0'; uuid = str; } - if (matches_device_list(str)) { - print_fstab_entry(mnt); + if (matches_device_list(udev, devices, str)) { + print_fstab_entry(udev, mnt); + rc = 0; break; } continue; } /* only devices */ - if (strncmp(mnt->mnt_fsname, root, strlen(root)) != 0) + if (strncmp(mnt->mnt_fsname, udev_get_dev_path(udev), strlen(udev_get_dev_path(udev))) != 0) continue; - if (matches_device_list(&mnt->mnt_fsname[strlen(root)+1])) { - print_fstab_entry(mnt); + if (matches_device_list(udev, devices, &mnt->mnt_fsname[strlen(udev_get_dev_path(udev))+1])) { + print_fstab_entry(udev, mnt); + rc = 0; break; } } - endmntent(fp); exit: + udev_unref(udev); logging_close(); return rc; } |