diff --git a/extras/root_link/Makefile b/extras/root_link/Makefile new file mode 100644 index 0000000..76b475d --- /dev/null +++ b/extras/root_link/Makefile @@ -0,0 +1,69 @@ +# Makefile for udev extra invoked from the udev main Makefile +# +# Copyright (C) 2004-2005 Kay Sievers +# +# Released under the GNU General Public License, version 2. +# + +PROG = get_dir_major_minor +OBJ = +HEADERS = +GEN_HEADERS = +MAN_PAGES = + +prefix = +etcdir = ${prefix}/etc +sbindir = ${prefix}/sbin +usrbindir = ${prefix}/usr/bin +usrsbindir = ${prefix}/usr/sbin +libudevdir = ${prefix}/lib/udev +mandir = ${prefix}/usr/share/man +configdir = ${etcdir}/udev/ + +INSTALL = install -c +INSTALL_PROGRAM = ${INSTALL} +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_SCRIPT = ${INSTALL} + +all: $(PROG) $(MAN_PAGES) +.PHONY: all +.DEFAULT: all + +%.o: %.c $(GEN_HEADERS) + $(E) " CC " $@ + $(Q) $(CC) -c $(CFLAGS) $< -o $@ + +$(PROG): %: $(HEADERS) %.o $(OBJS) + $(E) " LD " $@ + $(Q) $(LD) $(LDFLAGS) $@.o $(OBJS) -o $@ $(LIBUDEV) $(LIB_OBJS) + +# man pages +%.8: %.xml + $(E) " XMLTO " $@ + $(Q) xmlto man $? +.PRECIOUS: %.8 + +clean: + $(E) " CLEAN " + $(Q) rm -f $(PROG) $(OBJS) $(GEN_HEADERS) +.PHONY: clean + +install-bin: all + $(INSTALL_PROGRAM) -D $(PROG) $(DESTDIR)$(libudevdir)/$(PROG) +.PHONY: install-bin + +uninstall-bin: + - rm $(DESTDIR)$(libudevdir)/$(PROG) +.PHONY: uninstall-bin + +install-man: + @echo "Please create a man page for this tool." +.PHONY: install-man + +uninstall-man: + @echo "Please create a man page for this tool." +.PHONY: uninstall-man + +install-config: + @echo "no config file to install" +.PHONY: install-config diff --git a/extras/root_link/get_dir_major_minor.c b/extras/root_link/get_dir_major_minor.c new file mode 100644 index 0000000..1e39411 --- /dev/null +++ b/extras/root_link/get_dir_major_minor.c @@ -0,0 +1,48 @@ +// print out major/minor nr of the device the supplied dir +// is mounted on +// +// Author: Matthias Schwarzott + +#include +#include +#include + +#include +#include + +// Getting major/minor +#include +int main(int argc, char **argv) +{ + struct stat stat_buf; + unsigned int dev_major=0, dev_minor=0; + dev_t dev; + + if (argc != 2) { + printf("Usage:\n"); + printf(" get_dir_major_minor \n"); + return EXIT_FAILURE; + } + + if (stat(argv[1], &stat_buf) < 0) { + perror("stat"); + return EXIT_FAILURE; + } + + dev = stat_buf.st_dev; + + dev_major = gnu_dev_major(dev); + dev_minor = gnu_dev_minor(dev); + + + if (dev_major == 0) { + fprintf(stderr, "Major number is 0.\n"); + return EXIT_FAILURE; + } else + printf("%d %d\n", + dev_major, + dev_minor); + + return EXIT_SUCCESS; +} + diff --git a/extras/root_link/print_root_link_rule.sh b/extras/root_link/print_root_link_rule.sh new file mode 100755 index 0000000..c33f290 --- /dev/null +++ b/extras/root_link/print_root_link_rule.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +PROG=/lib/udev/print_dir_major_minor +[ -x "${PROG}" ] && DEV=$(/lib/udev/print_dir_major_minor /) +if [ $? == 0 ]; then + MAJOR="${DEV##* }" + MINOR="${DEV%% *}" + + echo "# Created by print_root_link_rule" + echo "# This rule should create /dev/root as link to real root device." + echo "SUBSYSTEM==\"block\", ENV{MAJOR}==\"$MAJOR\", ENV{MINOR}==\"$MINOR\", SYMLINK+=\"root\"" +fi +