LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Taras Kondratiuk <takondra@cisco.com>
To: "H. Peter Anvin" <hpa@zytor.com>,
Al Viro <viro@zeniv.linux.org.uk>, Arnd Bergmann <arnd@arndb.de>,
Rob Landley <rob@landley.net>,
Mimi Zohar <zohar@linux.vnet.ibm.com>,
Jonathan Corbet <corbet@lwn.net>,
James McMechan <james.w.mcmechan@gmail.com>
Cc: initramfs@vger.kernel.org, Victor Kamensky <kamensky@cisco.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-security-module@vger.kernel.org,
xe-linux-external@cisco.com
Subject: [PATCH v3 10/15] gen_init_cpio: move header formatting into function
Date: Fri, 16 Feb 2018 20:33:46 +0000 [thread overview]
Message-ID: <1518813234-5874-11-git-send-email-takondra@cisco.com> (raw)
In-Reply-To: <1518813234-5874-1-git-send-email-takondra@cisco.com>
CPIO header is generated in multiple places with the same sprintf()
format string. Move formatting into a single function in preparation
to adding a new cpio format.
Signed-off-by: Taras Kondratiuk <takondra@cisco.com>
---
usr/gen_init_cpio.c | 186 ++++++++++++++++++++++++++--------------------------
1 file changed, 92 insertions(+), 94 deletions(-)
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c
index 03b21189d58b..7a2a6d85345d 100644
--- a/usr/gen_init_cpio.c
+++ b/usr/gen_init_cpio.c
@@ -64,34 +64,55 @@ static void push_rest(const char *name)
}
}
-static void push_hdr(const char *s)
+struct cpio_header {
+ unsigned int ino;
+ unsigned int mode;
+ uid_t uid;
+ gid_t gid;
+ unsigned int nlink;
+ time_t mtime;
+ size_t filesize;
+ int devmajor;
+ int devminor;
+ int rdevmajor;
+ int rdevminor;
+ size_t namesize;
+ unsigned int check;
+};
+
+static void push_hdr(const struct cpio_header *hdr)
{
+ char s[256];
+
+ sprintf(s, "%s%08X%08X%08lX%08lX%08X%08lX"
+ "%08X%08X%08X%08X%08X%08X%08X",
+ "070701",
+ hdr->ino,
+ hdr->mode,
+ (long)hdr->uid,
+ (long)hdr->gid,
+ hdr->nlink,
+ (long)hdr->mtime,
+ (unsigned int)hdr->filesize,
+ hdr->devmajor,
+ hdr->devminor,
+ hdr->rdevmajor,
+ hdr->rdevminor,
+ (unsigned int)hdr->namesize,
+ hdr->check);
fputs(s, stdout);
offset += 110;
}
static void cpio_trailer(void)
{
- char s[256];
const char name[] = "TRAILER!!!";
+ struct cpio_header hdr = {
+ .nlink = 1,
+ .namesize = strlen(name)+1,
+ };
- 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 */
- push_hdr(s);
+ push_hdr(&hdr);
push_rest(name);
while (offset % 512) {
@@ -103,27 +124,21 @@ static void cpio_trailer(void)
static int cpio_mkslink(const char *name, const char *target,
unsigned int mode, uid_t uid, gid_t gid)
{
- char s[256];
-
if (name[0] == '/')
name++;
- 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) default_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);
+ struct cpio_header hdr = {
+ .ino = ino++,
+ .mode = S_IFLNK | mode,
+ .uid = uid,
+ .gid = gid,
+ .nlink = 1,
+ .mtime = default_mtime,
+ .filesize = strlen(target)+1,
+ .devmajor = 3,
+ .devminor = 1,
+ .namesize = strlen(name)+1,
+ };
+ push_hdr(&hdr);
push_string(name);
push_pad();
push_string(target);
@@ -152,27 +167,20 @@ static int cpio_mkslink_line(const char *line)
static int cpio_mkgeneric(const char *name, unsigned int mode,
uid_t uid, gid_t gid)
{
- char s[256];
-
if (name[0] == '/')
name++;
- 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) default_mtime, /* mtime */
- 0, /* filesize */
- 3, /* major */
- 1, /* minor */
- 0, /* rmajor */
- 0, /* rminor */
- (unsigned)strlen(name) + 1,/* namesize */
- 0); /* chksum */
- push_hdr(s);
+ struct cpio_header hdr = {
+ .ino = ino++,
+ .mode = mode,
+ .uid = uid,
+ .gid = gid,
+ .nlink = 2,
+ .mtime = default_mtime,
+ .devmajor = 3,
+ .devminor = 1,
+ .namesize = strlen(name)+1,
+ };
+ push_hdr(&hdr);
push_rest(name);
return 0;
}
@@ -241,8 +249,6 @@ 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];
-
if (dev_type == 'b')
mode |= S_IFBLK;
else
@@ -250,23 +256,20 @@ static int cpio_mknod(const char *name, unsigned int mode,
if (name[0] == '/')
name++;
- 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) default_mtime, /* mtime */
- 0, /* filesize */
- 3, /* major */
- 1, /* minor */
- maj, /* rmajor */
- min, /* rminor */
- (unsigned)strlen(name) + 1,/* namesize */
- 0); /* chksum */
- push_hdr(s);
+ struct cpio_header hdr = {
+ .ino = ino++,
+ .mode = mode,
+ .uid = uid,
+ .gid = gid,
+ .nlink = 1,
+ .mtime = default_mtime,
+ .devmajor = 3,
+ .devminor = 1,
+ .rdevmajor = maj,
+ .rdevminor = min,
+ .namesize = strlen(name)+1,
+ };
+ push_hdr(&hdr);
push_rest(name);
return 0;
}
@@ -296,7 +299,6 @@ static int cpio_mkfile(const char *name, const char *location,
unsigned int mode, uid_t uid, gid_t gid,
unsigned int nlinks)
{
- char s[256];
char *filebuf = NULL;
struct stat buf;
long size;
@@ -340,23 +342,19 @@ static int cpio_mkfile(const char *name, const char *location,
if (name[0] == '/')
name++;
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 */
- push_hdr(s);
+ struct cpio_header hdr = {
+ .ino = ino,
+ .mode = mode,
+ .uid = uid,
+ .gid = gid,
+ .nlink = nlinks,
+ .mtime = buf.st_mtime,
+ .filesize = size,
+ .devmajor = 3,
+ .devminor = 1,
+ .namesize = namesize,
+ };
+ push_hdr(&hdr);
push_string(name);
push_pad();
--
2.10.3.dirty
next prev parent reply other threads:[~2018-02-16 20:36 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-16 20:33 [PATCH v3 00/15] extend initramfs archive format to support xattrs Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 01/15] Documentation: add newcx initramfs format description Taras Kondratiuk
2018-02-16 20:59 ` H. Peter Anvin
2018-02-16 21:25 ` Rob Landley
2018-02-16 21:47 ` Victor Kamensky
2018-02-17 0:00 ` hpa
2018-02-17 10:04 ` Taras Kondratiuk
2018-02-17 17:32 ` Rob Landley
2018-02-18 0:15 ` Mimi Zohar
2018-02-18 0:24 ` hpa
2018-02-18 0:26 ` hpa
2018-02-18 0:47 ` Mimi Zohar
2018-02-16 20:33 ` [PATCH v3 02/15] initramfs: replace states with function pointers Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 03/15] initramfs: store file name in name_buf Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 04/15] initramfs: remove unnecessary symlinks processing shortcut Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 05/15] initramfs: move files creation into separate state Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 06/15] initramfs: separate reading cpio method from header Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 07/15] initramfs: split header layout information from parsing function Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 08/15] initramfs: add newcx format Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 09/15] initramfs: set extended attributes Taras Kondratiuk
2018-02-16 20:33 ` Taras Kondratiuk [this message]
2018-02-16 20:33 ` [PATCH v3 11/15] gen_init_cpio: add newcx format Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 12/15] gen_init_cpio: set extended attributes for " Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 12/14] gen_initramfs_list.sh: add -x option to enable " Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 13/15] " Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 13/14] selinux: allow setxattr on rootfs so initramfs code can set them Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 14/15] " Taras Kondratiuk
2018-02-20 19:01 ` Stephen Smalley
2018-03-11 3:07 ` Victor Kamensky
2018-03-20 16:33 ` [Non-DoD Source] " Stephen Smalley
2018-02-16 20:33 ` [PATCH v3 14/14] selinux: delay sid population for rootfs till init is complete Taras Kondratiuk
2018-02-16 20:33 ` [PATCH v3 15/15] " Taras Kondratiuk
2018-02-20 18:56 ` Stephen Smalley
2018-03-07 16:51 ` Rob Landley
2018-03-07 17:26 ` Victor Kamensky
2018-03-11 3:08 ` Victor Kamensky
2018-03-20 16:30 ` [Non-DoD Source] " Stephen Smalley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1518813234-5874-11-git-send-email-takondra@cisco.com \
--to=takondra@cisco.com \
--cc=arnd@arndb.de \
--cc=corbet@lwn.net \
--cc=hpa@zytor.com \
--cc=initramfs@vger.kernel.org \
--cc=james.w.mcmechan@gmail.com \
--cc=kamensky@cisco.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=rob@landley.net \
--cc=viro@zeniv.linux.org.uk \
--cc=xe-linux-external@cisco.com \
--cc=zohar@linux.vnet.ibm.com \
--subject='Re: [PATCH v3 10/15] gen_init_cpio: move header formatting into function' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).