aboutsummaryrefslogtreecommitdiff
path: root/toys/posix
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2016-03-02 11:52:38 -0600
committerRob Landley <rob@landley.net>2016-03-02 11:52:38 -0600
commit7ca5dc4232b9ac5ee5cd25c8b5b33a58904cd251 (patch)
tree258fe0d485c5793e19a56be81f9d71e51476f0d8 /toys/posix
parent323819c689448fffcf4d3ed20f2485b75ac64b64 (diff)
downloadtoybox-7ca5dc4232b9ac5ee5cd25c8b5b33a58904cd251.tar.gz
For years the man pages have said to #include <sys/types.h> to get
major/minor/makedev, but glibc has vowed to break existing programs (https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html) and replace it with _another_ non-standard header (not in posix or lsb), so let's just add functions to lib/ that do the transform ourselves.
Diffstat (limited to 'toys/posix')
-rw-r--r--toys/posix/cpio.c8
-rw-r--r--toys/posix/ls.c5
-rw-r--r--toys/posix/ps.c2
3 files changed, 9 insertions, 6 deletions
diff --git a/toys/posix/cpio.c b/toys/posix/cpio.c
index 981d6c5a..3bd40f47 100644
--- a/toys/posix/cpio.c
+++ b/toys/posix/cpio.c
@@ -114,6 +114,7 @@ void cpio_main(void)
// Read header and name.
xreadall(afd, toybuf, 110);
+ if (memcmp(toybuf, "070701", 6)) error_exit("bad cpio magic");
tofree = name = strpad(afd, x8u(toybuf+94), 110);
if (!strcmp("TRAILER!!!", name)) {
if (CFG_TOYBOX_FREE) free(tofree);
@@ -180,7 +181,7 @@ void cpio_main(void)
close(fd);
}
} else if (!test)
- err = mknod(name, mode, makedev(x8u(toybuf+78), x8u(toybuf+86)));
+ err = mknod(name, mode, dev_makedev(x8u(toybuf+78), x8u(toybuf+86)));
// Set ownership and timestamp.
if (!test && !err) {
@@ -243,8 +244,9 @@ void cpio_main(void)
llen = sprintf(toybuf,
"070701%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X",
(int)st.st_ino, st.st_mode, st.st_uid, st.st_gid, (int)st.st_nlink,
- (int)st.st_mtime, (int)st.st_size, major(st.st_dev),
- minor(st.st_dev), major(st.st_rdev), minor(st.st_rdev), nlen, 0);
+ (int)st.st_mtime, (int)st.st_size, dev_major(st.st_dev),
+ dev_minor(st.st_dev), dev_major(st.st_rdev), dev_minor(st.st_rdev),
+ nlen, 0);
xwrite(afd, toybuf, llen);
xwrite(afd, name, nlen);
diff --git a/toys/posix/ls.c b/toys/posix/ls.c
index 08ae695d..4dcbe888 100644
--- a/toys/posix/ls.c
+++ b/toys/posix/ls.c
@@ -144,7 +144,7 @@ static void entrylen(struct dirtree *dt, unsigned *len)
if (S_ISBLK(st->st_mode) || S_ISCHR(st->st_mode)) {
// cheating slightly here: assuming minor is always 3 digits to avoid
// tracking another column
- len[5] = numlen(major(st->st_rdev))+5;
+ len[5] = numlen(dev_major(st->st_rdev))+5;
} else if (flags & FLAG_h) {
human_readable(tmp, st->st_size, 0);
len[5] = strwidth(tmp);
@@ -453,7 +453,8 @@ static void listfiles(int dirfd, struct dirtree *indir)
// print major/minor, or size
if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
- printf("% *d,% 4d", totals[5]-4, major(st->st_rdev),minor(st->st_rdev));
+ printf("% *d,% 4d", totals[5]-4, dev_major(st->st_rdev),
+ dev_minor(st->st_rdev));
else if (flags&FLAG_h) {
human_readable(tmp, st->st_size, 0);
xprintf("%*s", totals[5]+1, tmp);
diff --git a/toys/posix/ps.c b/toys/posix/ps.c
index d2ef9fc1..26b4a4ea 100644
--- a/toys/posix/ps.c
+++ b/toys/posix/ps.c
@@ -701,7 +701,7 @@ static int get_ps(struct dirtree *new)
// Couldn't find it, try all the tty drivers.
if (i == 3) {
FILE *fp = fopen("/proc/tty/drivers", "r");
- int tty_major = 0, maj = major(rdev), min = minor(rdev);
+ int tty_major = 0, maj = dev_major(rdev), min = dev_minor(rdev);
if (fp) {
while (fscanf(fp, "%*s %256s %d %*s %*s", buf, &tty_major) == 2) {