As long as Android's going to require fortify, fixup the warnings it generates.
This commit is contained in:
parent
ea6fc27fc8
commit
f6c28b6e00
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
@ -15,5 +15,5 @@ config CLEAR
|
||||
|
||||
void clear_main(void)
|
||||
{
|
||||
write(1, "\e[2J\e[H", 7);
|
||||
xwrite(1, "\e[2J\e[H", 7);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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,
|
||||
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);
|
||||
if (fdout == AT_FDCWD)
|
||||
rc = fchownat(cfd, catch, try->st.st_uid, try->st.st_gid,
|
||||
AT_SYMLINK_NOFOLLOW);
|
||||
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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user