diff options
author | Rob Landley <rob@landley.net> | 2016-06-15 15:47:01 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2016-06-15 15:47:01 -0500 |
commit | 46409d50e5632b28b88cfa4991fffef9adaa490d (patch) | |
tree | 4c3347b37664b580996e4551bde023346567728b /toys/other | |
parent | 97ddc600c95623bf803eac4f2a4deda2a2db02d4 (diff) | |
download | toybox-46409d50e5632b28b88cfa4991fffef9adaa490d.tar.gz |
Add readlink0() and readlinkat0() which null terminate the data.
Diffstat (limited to 'toys/other')
-rw-r--r-- | toys/other/lspci.c | 6 | ||||
-rw-r--r-- | toys/other/pwdx.c | 14 | ||||
-rw-r--r-- | toys/other/stat.c | 2 |
3 files changed, 7 insertions, 15 deletions
diff --git a/toys/other/lspci.c b/toys/other/lspci.c index 077ce757..a0671791 100644 --- a/toys/other/lspci.c +++ b/toys/other/lspci.c @@ -50,10 +50,9 @@ static int do_lspci(struct dirtree *new) if (-1 == (dirfd = openat(dirtree_parentfd(new), new->name, O_RDONLY))) return 0; - // it's ok for the driver link not to be there, whatever fortify says *driver = 0; if (toys.optflags & FLAG_k) - if (readlinkat(dirfd, "driver", driver, sizeof(driver))) {}; + readlinkat0(dirfd, "driver", driver, sizeof(driver)); for (fields = (char*[]){"class", "vendor", "device", 0}; *fields; fields++) { int fd, size = 6 + 2*((toys.optflags & FLAG_e) && p == toybuf); @@ -122,8 +121,7 @@ void lspci_main(void) { if (CFG_LSPCI_TEXT && TT.numeric != 1) { if (!TT.ids) TT.ids = "/usr/share/misc/pci.ids"; - if (!(TT.db = fopen(TT.ids, "r"))) - perror_msg("could not open PCI ID db"); + if (!(TT.db = fopen(TT.ids, "r"))) perror_msg("%s", TT.ids); } dirtree_read("/sys/bus/pci/devices", do_lspci); diff --git a/toys/other/pwdx.c b/toys/other/pwdx.c index bde16e79..2a72dba3 100644 --- a/toys/other/pwdx.c +++ b/toys/other/pwdx.c @@ -20,20 +20,14 @@ void pwdx_main(void) char **optargs; for (optargs = toys.optargs; *optargs; optargs++) { - char *path; - int num_bytes; + char *path = toybuf; - path = xmprintf("/proc/%s/cwd", *optargs); - num_bytes = readlink(path, toybuf, sizeof(toybuf)-1); - free(path); - - if (num_bytes==-1) { + sprintf(toybuf, "/proc/%d/cwd", atoi(*optargs)); + if (!readlink0(path, toybuf, sizeof(toybuf))) { path = strerror(errno); toys.exitval = 1; - } else { - path = toybuf; - toybuf[num_bytes] = 0; } + xprintf("%s: %s\n", *optargs, path); } } diff --git a/toys/other/stat.c b/toys/other/stat.c index 9f77a600..7a6b38d7 100644 --- a/toys/other/stat.c +++ b/toys/other/stat.c @@ -110,7 +110,7 @@ static void print_stat(char type) } else if (type == 'N') { xprintf("`%s'", TT.file); if (S_ISLNK(stat->st_mode)) - if (0<readlink(TT.file, toybuf, sizeof(toybuf))) + if (readlink0(TT.file, toybuf, sizeof(toybuf))) xprintf(" -> `%s'", toybuf); } else if (type == 'o') out('u', stat->st_blksize); else if (type == 's') out('u', stat->st_size); |