From 5787fa490612387a43c1897eb807b0c5612b5cd2 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Wed, 12 Feb 2003 00:17:26 +0000 Subject: mdadm-1.0.9 --- config.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'config.c') diff --git a/config.c b/config.c index eef3248..1f25244 100644 --- a/config.c +++ b/config.c @@ -201,6 +201,33 @@ struct conf_dev { char *name; } *cdevlist = NULL; +void load_partitions(void) +{ + FILE *f = fopen("/proc/partitions", "r"); + char buf[1024]; + if (f == NULL) { + fprintf(stderr, Name ": cannot open /proc/partitions\n"); + return; + } + while (fgets(buf, 1024, f)) { + int major, minor; + char *name; + buf[1023] = '\0'; + if (buf[0] != ' ') + continue; + if (sscanf(buf, " %d %d ", &major, &minor) != 2) + continue; + name = map_dev(major, minor); + if (name) { + struct conf_dev *cd; + + cd = malloc(sizeof(*cd)); + cd->name = strdup(name); + cd->next = cdevlist; + cdevlist = cd; + } + } +} void devline(char *line) @@ -214,6 +241,9 @@ void devline(char *line) cd->name = strdup(w); cd->next = cdevlist; cdevlist = cd; + } else if (strcasecmp(w, "partitions") == 0) { + /* read /proc/partitions, and look major/minor up in /dev */ + load_partitions(); } else { fprintf(stderr, Name ": unreconised word on DEVICE line: %s\n", w); @@ -349,6 +379,10 @@ void load_conffile(char *conffile) if (conffile == NULL) conffile = DefaultConfFile; + if (strcmp(conffile, "partitions")==0) { + load_partitions(); + return; + } f = fopen(conffile, "r"); if (f ==NULL) return; -- cgit