← Commit list

9895dfdb9

Denis Vlasenko
Denis Vlasenko
2008-04-01
FAILED Duration: 24s

Subject

chpst: fix "env directory" parsing to not strip everything after 1st whitespace. -6 bytes.

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

runit/chpst.c+22 -24
@@ -114,6 +114,10 @@ static void edir(const char *directory_name)
if (!dir)
bb_perror_msg_and_die("opendir %s", directory_name);
for (;;) {
+ char buf[256];
+ char *tail;
+ int size;
+
errno = 0;
d = readdir(dir);
if (!d) {
@@ -135,31 +139,25 @@ static void edir(const char *directory_name)
bb_perror_msg_and_die("open %s/%s",
directory_name, d->d_name);
}
- if (fd >= 0) {
- char buf[256];
- char *tail;
- int size;
-
- size = safe_read(fd, buf, sizeof(buf)-1);
- if (size < 0)
- bb_perror_msg_and_die("read %s/%s",
- directory_name, d->d_name);
- if (size == 0) {
- unsetenv(d->d_name);
- continue;
- }
- buf[size] = '\n';
- tail = memchr(buf, '\n', sizeof(buf));
- /* skip trailing whitespace */;
- while (1) {
- if (tail[0] == ' ') tail[0] = '\0';
- if (tail[0] == '\t') tail[0] = '\0';
- if (tail[0] == '\n') tail[0] = '\0';
- if (tail == buf) break;
- tail--;
- }
- xsetenv(d->d_name, buf);
+ size = full_read(fd, buf, sizeof(buf)-1);
+ close(fd);
+ if (size < 0)
+ bb_perror_msg_and_die("read %s/%s",
+ directory_name, d->d_name);
+ if (size == 0) {
+ unsetenv(d->d_name);
+ continue;
+ }
+ buf[size] = '\n';
+ tail = strchr(buf, '\n');
+ /* skip trailing whitespace */
+ while (1) {
+ *tail = '\0';
+ tail--;
+ if (tail < buf || !isspace(*tail))
+ break;
}
+ xsetenv(d->d_name, buf);
}
closedir(dir);
if (fchdir(wdir) == -1)