From f0a14c155de5cf345c799dcb5abbe539c3bd4bfb Mon Sep 17 00:00:00 2001 Message-Id: From: UndiFineD Date: Sun, 13 Jun 2010 00:30:58 +0200 Subject: [PATCH] NEXT-20100611 /usr janitor patch Signed-off-by: UndiFineD --- usr/gen_init_cpio.c | 368 ++++++++++++++++++++++++++------------------------- 1 files changed, 186 insertions(+), 182 deletions(-) diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index b2b3c2d..b0e45d7 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -37,7 +37,7 @@ static void push_string(const char *name) offset += name_len; } -static void push_pad (void) +static void push_pad(void) { while (offset & 3) { putchar(0); @@ -74,21 +74,21 @@ static void cpio_trailer(void) const char name[] = "TRAILER!!!"; sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX" - "%08X%08X%08X%08X%08X%08X%08X", - "070701", /* magic */ - 0, /* ino */ - 0, /* mode */ - (long) 0, /* uid */ - (long) 0, /* gid */ - 1, /* nlink */ - (long) 0, /* mtime */ - 0, /* filesize */ - 0, /* major */ - 0, /* minor */ - 0, /* rmajor */ - 0, /* rminor */ - (unsigned)strlen(name)+1, /* namesize */ - 0); /* chksum */ + "%08X%08X%08X%08X%08X%08X%08X", + "070701", /* magic */ + 0, /* ino */ + 0, /* mode */ + (long) 0, /* uid */ + (long) 0, /* gid */ + 1, /* nlink */ + (long) 0, /* mtime */ + 0, /* filesize */ + 0, /* major */ + 0, /* minor */ + 0, /* rmajor */ + 0, /* rminor */ + (unsigned)strlen(name)+1, /* namesize */ + 0); /* chksum */ push_hdr(s); push_rest(name); @@ -98,28 +98,28 @@ static void cpio_trailer(void) } } -static int cpio_mkslink(const char *name, const char *target, - unsigned int mode, uid_t uid, gid_t gid) +static int cpio_mkslink(const char *name, const char *target, unsigned int mode, + uid_t uid, gid_t gid) { char s[256]; time_t mtime = time(NULL); - sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX" - "%08X%08X%08X%08X%08X%08X%08X", - "070701", /* magic */ - ino++, /* ino */ - S_IFLNK | mode, /* mode */ - (long) uid, /* uid */ - (long) gid, /* gid */ - 1, /* nlink */ - (long) mtime, /* mtime */ - (unsigned)strlen(target)+1, /* filesize */ - 3, /* major */ - 1, /* minor */ - 0, /* rmajor */ - 0, /* rminor */ - (unsigned)strlen(name) + 1,/* namesize */ - 0); /* chksum */ + sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX" + "%08X%08X%08X%08X%08X%08X%08X", + "070701", /* magic */ + ino++, /* ino */ + S_IFLNK | mode, /* mode */ + (long) uid, /* uid */ + (long) gid, /* gid */ + 1, /* nlink */ + (long) mtime, /* mtime */ + (unsigned)strlen(target)+1, /* filesize */ + 3, /* major */ + 1, /* minor */ + 0, /* rmajor */ + 0, /* rminor */ + (unsigned)strlen(name) + 1, /* namesize */ + 0); /* chksum */ push_hdr(s); push_string(name); push_pad(); @@ -137,37 +137,38 @@ static int cpio_mkslink_line(const char *line) int gid; int rc = -1; - if (5 != sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) "s %o %d %d", name, target, &mode, &uid, &gid)) { + if (5 != sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) + "s %o %d %d", name, target, &mode, &uid, &gid)) { fprintf(stderr, "Unrecognized dir format '%s'", line); goto fail; } rc = cpio_mkslink(name, target, mode, uid, gid); - fail: +fail: return rc; } -static int cpio_mkgeneric(const char *name, unsigned int mode, - uid_t uid, gid_t gid) +static int cpio_mkgeneric(const char *name, unsigned int mode, uid_t uid, + gid_t gid) { char s[256]; time_t mtime = time(NULL); - sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX" - "%08X%08X%08X%08X%08X%08X%08X", - "070701", /* magic */ - ino++, /* ino */ - mode, /* mode */ - (long) uid, /* uid */ - (long) gid, /* gid */ - 2, /* nlink */ - (long) mtime, /* mtime */ - 0, /* filesize */ - 3, /* major */ - 1, /* minor */ - 0, /* rmajor */ - 0, /* rminor */ - (unsigned)strlen(name) + 1,/* namesize */ - 0); /* chksum */ + sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX" + "%08X%08X%08X%08X%08X%08X%08X", + "070701", /* magic */ + ino++, /* ino */ + mode, /* mode */ + (long) uid, /* uid */ + (long) gid, /* gid */ + 2, /* nlink */ + (long) mtime, /* mtime */ + 0, /* filesize */ + 3, /* major */ + 1, /* minor */ + 0, /* rmajor */ + 0, /* rminor */ + (unsigned)strlen(name) + 1,/* namesize */ + 0); /* chksum */ push_hdr(s); push_rest(name); return 0; @@ -207,14 +208,15 @@ static int cpio_mkgeneric_line(const char *line, enum generic_types gt) int gid; int rc = -1; - if (4 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d", name, &mode, &uid, &gid)) { - fprintf(stderr, "Unrecognized %s format '%s'", - line, generic_type_table[gt].type); + if (4 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d", name, &mode, &uid, + &gid)) { + fprintf(stderr, "Unrecognized %s format '%s'", line, + generic_type_table[gt].type); goto fail; } mode |= generic_type_table[gt].mode; rc = cpio_mkgeneric(name, mode, uid, gid); - fail: +fail: return rc; } @@ -233,9 +235,8 @@ static int cpio_mksock_line(const char *line) return cpio_mkgeneric_line(line, GT_SOCK); } -static int cpio_mknod(const char *name, unsigned int mode, - uid_t uid, gid_t gid, char dev_type, - unsigned int maj, unsigned int min) +static int cpio_mknod(const char *name, unsigned int mode, uid_t uid, gid_t gid, + char dev_type, unsigned int maj, unsigned int min) { char s[256]; time_t mtime = time(NULL); @@ -245,22 +246,22 @@ static int cpio_mknod(const char *name, unsigned int mode, else mode |= S_IFCHR; - sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX" - "%08X%08X%08X%08X%08X%08X%08X", - "070701", /* magic */ - ino++, /* ino */ - mode, /* mode */ - (long) uid, /* uid */ - (long) gid, /* gid */ - 1, /* nlink */ - (long) mtime, /* mtime */ - 0, /* filesize */ - 3, /* major */ - 1, /* minor */ - maj, /* rmajor */ - min, /* rminor */ - (unsigned)strlen(name) + 1,/* namesize */ - 0); /* chksum */ + sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX" + "%08X%08X%08X%08X%08X%08X%08X", + "070701", /* magic */ + ino++, /* ino */ + mode, /* mode */ + (long) uid, /* uid */ + (long) gid, /* gid */ + 1, /* nlink */ + (long) mtime, /* mtime */ + 0, /* filesize */ + 3, /* major */ + 1, /* minor */ + maj, /* rmajor */ + min, /* rminor */ + (unsigned)strlen(name) + 1,/* namesize */ + 0); /* chksum */ push_hdr(s); push_rest(name); return 0; @@ -277,19 +278,18 @@ static int cpio_mknod_line(const char *line) unsigned int min; int rc = -1; - if (7 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d %c %u %u", - name, &mode, &uid, &gid, &dev_type, &maj, &min)) { + if (7 != sscanf(line, "%" str(PATH_MAX) "s %o %d %d %c %u %u", name, + &mode, &uid, &gid, &dev_type, &maj, &min)) { fprintf(stderr, "Unrecognized nod format '%s'", line); goto fail; } rc = cpio_mknod(name, mode, uid, gid, dev_type, maj, min); - fail: +fail: return rc; } static int cpio_mkfile(const char *name, const char *location, - unsigned int mode, uid_t uid, gid_t gid, - unsigned int nlinks) + unsigned int mode, uid_t uid, gid_t gid, unsigned int nlinks) { char s[256]; char *filebuf = NULL; @@ -303,52 +303,54 @@ static int cpio_mkfile(const char *name, const char *location, mode |= S_IFREG; - retval = stat (location, &buf); + retval = stat(location, &buf); if (retval) { - fprintf (stderr, "File %s could not be located\n", location); + fprintf(stderr, "File %s could not be located\n", location); goto error; } - file = open (location, O_RDONLY); + file = open(location, O_RDONLY); if (file < 0) { - fprintf (stderr, "File %s could not be opened for reading\n", location); + fprintf(stderr, "File %s could not be opened for reading\n", + location); goto error; } filebuf = malloc(buf.st_size); if (!filebuf) { - fprintf (stderr, "out of memory\n"); + fprintf(stderr, "out of memory\n"); goto error; } - retval = read (file, filebuf, buf.st_size); + retval = read(file, filebuf, buf.st_size); if (retval < 0) { - fprintf (stderr, "Can not read %s file\n", location); + fprintf(stderr, "Can not read %s file\n", location); goto error; } size = 0; for (i = 1; i <= nlinks; i++) { /* data goes on last link */ - if (i == nlinks) size = buf.st_size; + if (i == nlinks) + size = buf.st_size; namesize = strlen(name) + 1; - sprintf(s,"%s%08X%08X%08lX%08lX%08X%08lX" - "%08lX%08X%08X%08X%08X%08X%08X", - "070701", /* magic */ - ino, /* ino */ - mode, /* mode */ - (long) uid, /* uid */ - (long) gid, /* gid */ - nlinks, /* nlink */ - (long) buf.st_mtime, /* mtime */ - size, /* filesize */ - 3, /* major */ - 1, /* minor */ - 0, /* rmajor */ - 0, /* rminor */ - namesize, /* namesize */ - 0); /* chksum */ + sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX" + "%08lX%08X%08X%08X%08X%08X%08X", + "070701", /* magic */ + ino, /* ino */ + mode, /* mode */ + (long) uid, /* uid */ + (long) gid, /* gid */ + nlinks, /* nlink */ + (long) buf.st_mtime,/* mtime */ + size, /* filesize */ + 3, /* major */ + 1, /* minor */ + 0, /* rmajor */ + 0, /* rminor */ + namesize, /* namesize */ + 0); /* chksum */ push_hdr(s); push_string(name); push_pad(); @@ -361,42 +363,40 @@ static int cpio_mkfile(const char *name, const char *location, offset += size; push_pad(); } - name += namesize; } ino++; rc = 0; - error: - if (filebuf) free(filebuf); - if (file >= 0) close(file); + if (filebuf) + free(filebuf); + if (file >= 0) + close(file); return rc; } static char *cpio_replace_env(char *new_location) { - char expanded[PATH_MAX + 1]; - char env_var[PATH_MAX + 1]; - char *start; - char *end; - - for (start = NULL; (start = strstr(new_location, "${")); ) { - end = strchr(start, '}'); - if (start < end) { - *env_var = *expanded = '\0'; - strncat(env_var, start + 2, end - start - 2); - strncat(expanded, new_location, start - new_location); - strncat(expanded, getenv(env_var), PATH_MAX); - strncat(expanded, end + 1, PATH_MAX); - strncpy(new_location, expanded, PATH_MAX); - } else - break; - } - - return new_location; + char expanded[PATH_MAX + 1]; + char env_var[PATH_MAX + 1]; + char *start; + char *end; + + for (start = NULL; (start = strstr(new_location, "${")); ) { + end = strchr(start, '}'); + if (start < end) { + *env_var = *expanded = '\0'; + strncat(env_var, start + 2, end - start - 2); + strncat(expanded, new_location, start - new_location); + strncat(expanded, getenv(env_var), PATH_MAX); + strncat(expanded, end + 1, PATH_MAX); + strncpy(new_location, expanded, PATH_MAX); + } else + break; + } + return new_location; } - static int cpio_mkfile_line(const char *line) { char name[PATH_MAX + 1]; @@ -410,8 +410,7 @@ static int cpio_mkfile_line(const char *line) int rc = -1; if (5 > sscanf(line, "%" str(PATH_MAX) "s %" str(PATH_MAX) - "s %o %d %d %n", - name, location, &mode, &uid, &gid, &end)) { + "s %o %d %d %n", name, location, &mode, &uid, &gid, &end)) { fprintf(stderr, "Unrecognized file format '%s'", line); goto fail; } @@ -421,7 +420,7 @@ static int cpio_mkfile_line(const char *line) dname = malloc(strlen(line)); if (!dname) { - fprintf (stderr, "out of memory (%d)\n", dname_len); + fprintf(stderr, "out of memory (%d)\n", dname_len); goto fail; } @@ -431,7 +430,7 @@ static int cpio_mkfile_line(const char *line) do { nend = 0; if (sscanf(line + end, "%" str(PATH_MAX) "s %n", - name, &nend) < 1) + name, &nend) < 1) break; len = strlen(name) + 1; memcpy(dname + dname_len, name, len); @@ -442,49 +441,50 @@ static int cpio_mkfile_line(const char *line) } else { dname = name; } - rc = cpio_mkfile(dname, cpio_replace_env(location), - mode, uid, gid, nlinks); - fail: - if (dname_len) free(dname); + rc = cpio_mkfile(dname, cpio_replace_env(location), mode, uid, gid, + nlinks); +fail: + if (dname_len) + free(dname); return rc; } static void usage(const char *prog) { fprintf(stderr, "Usage:\n" - "\t%s \n" - "\n" - " is a file containing newline separated entries that\n" - "describe the files to be included in the initramfs archive:\n" - "\n" - "# a comment\n" - "file []\n" - "dir \n" - "nod \n" - "slink \n" - "pipe \n" - "sock \n" - "\n" - " name of the file/dir/nod/etc in the archive\n" - " location of the file in the current filesystem\n" - " expands shell variables quoted with ${}\n" - " link target\n" - " mode/permissions of the file\n" - " user id (0=root)\n" - " group id (0=root)\n" - " device type (b=block, c=character)\n" - " major number of nod\n" - " minor number of nod\n" - " space separated list of other links to file\n" - "\n" - "example:\n" - "# A simple initramfs\n" - "dir /dev 0755 0 0\n" - "nod /dev/console 0600 0 0 c 5 1\n" - "dir /root 0700 0 0\n" - "dir /sbin 0755 0 0\n" - "file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n", - prog); + "\t%s \n" + "\n" + " is a file containing newline separated entries that\n" + "describe the files to be included in the initramfs archive:\n" + "\n" + "# a comment\n" + "file []\n" + "dir \n" + "nod \n" + "slink \n" + "pipe \n" + "sock \n" + "\n" + " name of the file/dir/nod/etc in the archive\n" + " location of the file in the current filesystem\n" + " expands shell variables quoted with ${}\n" + " link target\n" + " mode/permissions of the file\n" + " user id (0=root)\n" + " group id (0=root)\n" + " device type (b=block, c=character)\n" + " major number of nod\n" + " minor number of nod\n" + " space separated list of other links to file\n" + "\n" + "example:\n" + "# A simple initramfs\n" + "dir /dev 0755 0 0\n" + "nod /dev/console 0600 0 0 c 5 1\n" + "dir /root 0700 0 0\n" + "dir /sbin 0755 0 0\n" + "file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0\n", + prog); } struct file_handler file_handler_table[] = { @@ -514,7 +514,7 @@ struct file_handler file_handler_table[] = { #define LINE_SIZE (2 * PATH_MAX + 50) -int main (int argc, char *argv[]) +int main(int argc, char *argv[]) { FILE *cpio_list; char line[LINE_SIZE]; @@ -529,9 +529,10 @@ int main (int argc, char *argv[]) if (!strcmp(argv[1], "-")) cpio_list = stdin; - else if (! (cpio_list = fopen(argv[1], "r"))) { + else if (!(fopen(argv[1], "r"))) { + cpio_list = fopen(argv[1], "r"); fprintf(stderr, "ERROR: unable to open '%s': %s\n\n", - argv[1], strerror(errno)); + argv[1], strerror(errno)); usage(argv[0]); exit(1); } @@ -547,10 +548,11 @@ int main (int argc, char *argv[]) continue; } - if (! (type = strtok(line, " \t"))) { + if (!(strtok(line, " \t"))) { + type = strtok(line, " \t"); fprintf(stderr, - "ERROR: incorrect format, could not locate file type line %d: '%s'\n", - line_nr, line); + "ERROR: incorrect format, could not locate file type line %d: '%s'\n", + line_nr, line); ec = -1; break; } @@ -565,17 +567,19 @@ int main (int argc, char *argv[]) continue; } - if (! (args = strtok(NULL, "\n"))) { + if (!(strtok(NULL, "\n"))) { + args = strtok(NULL, "\n"); fprintf(stderr, - "ERROR: incorrect format, newline required line %d: '%s'\n", - line_nr, line); + "ERROR: incorrect format, newline required line %d: '%s'\n", + line_nr, line); ec = -1; } for (type_idx = 0; file_handler_table[type_idx].type; type_idx++) { int rc; - if (! strcmp(line, file_handler_table[type_idx].type)) { - if ((rc = file_handler_table[type_idx].handler(args))) { + if (!strcmp(line, file_handler_table[type_idx].type)) { + if (file_handler_table[type_idx].handler(args)) { + rc = file_handler_table[type_idx].handler(args); ec = rc; fprintf(stderr, " line %d\n", line_nr); } -- 1.7.0.4