As long as Android's going to require fortify, fixup the warnings it generates.

This commit is contained in:
Rob Landley 2014-11-22 00:36:45 -06:00
parent ea6fc27fc8
commit f6c28b6e00
8 changed files with 29 additions and 27 deletions

View File

@ -4,18 +4,6 @@
// in specific compiler, library, or OS versions, localize all that here
// and in portability.c
// The tendency of gcc to produce stupid warnings continues with
// warn_unused_result, which warns about things like ignoring the return code
// of nice(2) (which is completely useless since -1 is a legitimate return
// value on success and even the man page tells you to use errno instead).
// This makes it stop.
// Except on Android, where fortify is mandatory.
#if !defined(__ANDROID__)
#undef _FORTIFY_SOURCE
#endif
// For musl
#define _ALL_SOURCE

View File

@ -38,7 +38,7 @@ int read_int_at(int dirfd, char *name)
FILE *fil;
if ((fd = openat(dirfd, name, O_RDONLY)) < 0) return -1;
fscanf(fil = xfdopen(fd, "r"), "%d", &ret);
if (!fscanf(fil = xfdopen(fd, "r"), "%d", &ret)) perror_exit("%s", name);
fclose(fil);
return ret;

View File

@ -15,5 +15,5 @@ config CLEAR
void clear_main(void)
{
write(1, "\e[2J\e[H", 7);
xwrite(1, "\e[2J\e[H", 7);
}

View File

@ -50,9 +50,10 @@ 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)
readlinkat(dirfd, "driver", driver, sizeof(driver));
if (readlinkat(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);

View File

@ -112,7 +112,7 @@ void nbd_client_main(void)
// Daemonize here.
daemon(0,0);
if (daemon(0,0)) perror_exit("daemonize");
// Process NBD requests until further notice.

View File

@ -261,6 +261,7 @@ int cp_node(struct dirtree *try)
if (fdout != -1) {
if (flags & (FLAG_a|FLAG_p)) {
struct timespec times[2];
int rc;
// Inability to set these isn't fatal, some require root access.
@ -268,13 +269,20 @@ int cp_node(struct dirtree *try)
times[1] = try->st.st_mtim;
// If we can't get a filehandle to the actual object, use racy functions
if (fdout == AT_FDCWD) {
fchownat(cfd, catch, try->st.st_uid, try->st.st_gid,
if (fdout == AT_FDCWD)
rc = fchownat(cfd, catch, try->st.st_uid, try->st.st_gid,
AT_SYMLINK_NOFOLLOW);
utimensat(cfd, catch, times, AT_SYMLINK_NOFOLLOW);
// permission bits already correct for mknod, don't apply to symlink
} else {
fchown(fdout, try->st.st_uid, try->st.st_gid);
else rc = fchown(fdout, try->st.st_uid, try->st.st_gid);
if (rc) {
char *pp;
perror_msg("chown '%s'", pp = dirtree_path(try, 0));
free(pp);
}
// permission bits already correct for mknod and don't apply to symlink
if (fdout == AT_FDCWD) utimensat(cfd, catch, times, AT_SYMLINK_NOFOLLOW);
else {
futimens(fdout, times);
fchmod(fdout, try->st.st_mode);
}

View File

@ -256,7 +256,7 @@ void cpio_main(void)
xwrite(afd, toybuf, nlen);
}
llen = st.st_size & 3;
if (llen) write(afd, &zero, 4-llen);
if (llen) xwrite(afd, &zero, 4-llen);
}
close(fd);
}

View File

@ -72,7 +72,7 @@ static int flush_exec(struct dirtree *new, struct exec_range *aa)
{
struct double_list **dl;
char **newargs;
int rc;
int rc = 0;
if (!aa->namecount) return 0;
@ -82,8 +82,13 @@ static int flush_exec(struct dirtree *new, struct exec_range *aa)
// switch to directory for -execdir, or back to top if we have an -execdir
// _and_ a normal -exec, or are at top of tree in -execdir
if (aa->dir && new->parent) fchdir(new->parent->data);
else if (TT.topdir != -1) fchdir(TT.topdir);
if (aa->dir && new->parent) rc = fchdir(new->parent->data);
else if (TT.topdir != -1) rc = fchdir(TT.topdir);
if (rc) {
perror_msg("%s", new->name);
return rc;
}
// execdir: accumulated execs in this directory's children.
newargs = xmalloc(sizeof(char *)*(aa->arglen+aa->namecount+1));