[PATCH] next-20100611 /usr

From: UndiFineD
Date: Sat Jun 12 2010 - 19:11:19 EST


next-20100611 /usr
janitor patch

signed-off-by: UndiFineD <k.dejong@xxxxxxxxxxxx>
From f0a14c155de5cf345c799dcb5abbe539c3bd4bfb Mon Sep 17 00:00:00 2001
Message-Id: <f0a14c155de5cf345c799dcb5abbe539c3bd4bfb.1276382091.git.k.dejong@xxxxxxxxxxxx>
From: UndiFineD <k.dejong@xxxxxxxxxxxx>
Date: Sun, 13 Jun 2010 00:30:58 +0200
Subject: [PATCH] NEXT-20100611 /usr
janitor patch

Signed-off-by: UndiFineD <k.dejong@xxxxxxxxxxxx>
---
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 <cpio_list>\n"
- "\n"
- "<cpio_list> 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 <name> <location> <mode> <uid> <gid> [<hard links>]\n"
- "dir <name> <mode> <uid> <gid>\n"
- "nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>\n"
- "slink <name> <target> <mode> <uid> <gid>\n"
- "pipe <name> <mode> <uid> <gid>\n"
- "sock <name> <mode> <uid> <gid>\n"
- "\n"
- "<name> name of the file/dir/nod/etc in the archive\n"
- "<location> location of the file in the current filesystem\n"
- " expands shell variables quoted with ${}\n"
- "<target> link target\n"
- "<mode> mode/permissions of the file\n"
- "<uid> user id (0=root)\n"
- "<gid> group id (0=root)\n"
- "<dev_type> device type (b=block, c=character)\n"
- "<maj> major number of nod\n"
- "<min> minor number of nod\n"
- "<hard links> 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 <cpio_list>\n"
+ "\n"
+ "<cpio_list> 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 <name> <location> <mode> <uid> <gid> [<hard links>]\n"
+ "dir <name> <mode> <uid> <gid>\n"
+ "nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>\n"
+ "slink <name> <target> <mode> <uid> <gid>\n"
+ "pipe <name> <mode> <uid> <gid>\n"
+ "sock <name> <mode> <uid> <gid>\n"
+ "\n"
+ "<name> name of the file/dir/nod/etc in the archive\n"
+ "<location> location of the file in the current filesystem\n"
+ " expands shell variables quoted with ${}\n"
+ "<target> link target\n"
+ "<mode> mode/permissions of the file\n"
+ "<uid> user id (0=root)\n"
+ "<gid> group id (0=root)\n"
+ "<dev_type> device type (b=block, c=character)\n"
+ "<maj> major number of nod\n"
+ "<min> minor number of nod\n"
+ "<hard links> 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