chpst: fix "env directory" parsing to not strip everything
after 1st whitespace. -6 bytes.
This commit is contained in:
parent
9dedf72e71
commit
9895dfdb9a
@ -114,6 +114,10 @@ static void edir(const char *directory_name)
|
|||||||
if (!dir)
|
if (!dir)
|
||||||
bb_perror_msg_and_die("opendir %s", directory_name);
|
bb_perror_msg_and_die("opendir %s", directory_name);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
char buf[256];
|
||||||
|
char *tail;
|
||||||
|
int size;
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
d = readdir(dir);
|
d = readdir(dir);
|
||||||
if (!d) {
|
if (!d) {
|
||||||
@ -135,31 +139,25 @@ static void edir(const char *directory_name)
|
|||||||
bb_perror_msg_and_die("open %s/%s",
|
bb_perror_msg_and_die("open %s/%s",
|
||||||
directory_name, d->d_name);
|
directory_name, d->d_name);
|
||||||
}
|
}
|
||||||
if (fd >= 0) {
|
size = full_read(fd, buf, sizeof(buf)-1);
|
||||||
char buf[256];
|
close(fd);
|
||||||
char *tail;
|
if (size < 0)
|
||||||
int size;
|
bb_perror_msg_and_die("read %s/%s",
|
||||||
|
directory_name, d->d_name);
|
||||||
size = safe_read(fd, buf, sizeof(buf)-1);
|
if (size == 0) {
|
||||||
if (size < 0)
|
unsetenv(d->d_name);
|
||||||
bb_perror_msg_and_die("read %s/%s",
|
continue;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
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);
|
closedir(dir);
|
||||||
if (fchdir(wdir) == -1)
|
if (fchdir(wdir) == -1)
|
||||||
|
Loading…
Reference in New Issue
Block a user