Apply clang-format update to repo (#1154)

Commit bc6c183 introduced a bunch of discrepancies between what files
look like in the repo and what clang-format says they should look like.
However, there were already a few discrepancies prior to that. Most of
these discrepancies seemed to be unintentional, but a few of them were
load-bearing (e.g., a #include that violated header ordering needing
something to have been #defined by a 'later' #include.)

I opted to take what I hope is a relatively smooth-brained approach: I
reverted the .clang-format change, ran clang-format on the whole repo,
reapplied the .clang-format change, reran clang-format again, and then
reverted the commit that contained the first run. Thus the full effect
of this PR should only be to apply the changed formatting rules to the
repo, and from skimming the results, this seems to be the case.

My work can be checked by applying the short, manual commits, and then
rerunning the command listed in the autogenerated commits (those whose
messages I have prefixed auto:) and seeing if your results agree.

It might be that the other diffs should be fixed at some point but I'm
leaving that aside for now.

fd '\.c(c|pp)?$' --print0| xargs -0 clang-format -i
This commit is contained in:
Jōshin 2024-04-25 10:38:00 -07:00 committed by GitHub
parent 342d0c81e5
commit 6e6fc38935
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
863 changed files with 9201 additions and 4627 deletions

View file

@ -280,12 +280,14 @@ static wontreturn void DieOom(void) {
static void *Malloc(size_t n) {
void *p;
if (!(p = malloc(n))) DieOom();
if (!(p = malloc(n)))
DieOom();
return p;
}
static void *Realloc(void *p, size_t n) {
if (!(p = realloc(p, n))) DieOom();
if (!(p = realloc(p, n)))
DieOom();
return p;
}
@ -369,8 +371,10 @@ static char *LoadSourceCode(const char *path) {
size_t i;
char *text;
ssize_t rc, size;
if ((fd = open(path, O_RDONLY)) == -1) DieSys(path);
if ((size = lseek(fd, 0, SEEK_END)) == -1) DieSys(path);
if ((fd = open(path, O_RDONLY)) == -1)
DieSys(path);
if ((size = lseek(fd, 0, SEEK_END)) == -1)
DieSys(path);
text = Malloc(size + 1);
text[size] = 0;
for (i = 0; i < size; i += rc) {
@ -381,7 +385,8 @@ static char *LoadSourceCode(const char *path) {
Die(path, "source code contains binary data");
}
}
if (close(fd)) DieSys(path);
if (close(fd))
DieSys(path);
HashInput(text, size);
return text;
}
@ -488,7 +493,8 @@ static void ValidateElfImage(Elf64_Ehdr *e, Elf64_Off esize, //
int found_load = 0;
Elf64_Addr last_vaddr = 0;
for (i = 0; i < e->e_phnum; ++i) {
if (p[i].p_type != PT_LOAD) continue;
if (p[i].p_type != PT_LOAD)
continue;
if (found_load && p[i].p_vaddr <= last_vaddr) {
Die(epath, "ELF PT_LOAD segments must be ordered by p_vaddr");
}
@ -566,7 +572,8 @@ static void ValidateElfImage(Elf64_Ehdr *e, Elf64_Off esize, //
Elf64_Off a = p[i].p_vaddr & -pagesz;
Elf64_Off b = (p[i].p_vaddr + p[i].p_memsz + (pagesz - 1)) & -pagesz;
for (j = i + 1; j < e->e_phnum; ++j) {
if (p[j].p_type != PT_LOAD) continue;
if (p[j].p_type != PT_LOAD)
continue;
Elf64_Off c = p[j].p_vaddr & -pagesz;
Elf64_Off d = (p[j].p_vaddr + p[j].p_memsz + (pagesz - 1)) & -pagesz;
if (MAX(a, c) < MIN(b, d)) {
@ -627,7 +634,8 @@ static bool IsSymbolWorthyOfSymtab(Elf64_Sym *sym) {
}
static void AppendZipAsset(unsigned char *lfile, unsigned char *cfile) {
if (assets.n == 65534) Die(outpath, "fat binary has >65534 zip assets");
if (assets.n == 65534)
Die(outpath, "fat binary has >65534 zip assets");
assets.p = Realloc(assets.p, (assets.n + 1) * sizeof(*assets.p));
assets.p[assets.n].cfile = cfile;
assets.p[assets.n].lfile = lfile;
@ -666,7 +674,8 @@ static void LoadSymbols(Elf64_Ehdr *e, Elf64_Off size, const char *path) {
const char *name = ConvertElfMachineToSymtabName(e);
size_t name_size = strlen(name);
struct SymbolTable *st = OpenSymbolTable(path);
if (!st) Die(path, "could not load elf symbol table");
if (!st)
Die(path, "could not load elf symbol table");
size_t data_size;
void *data = Deflate(st, st->size, &data_size);
uint32_t crc = crc32_z(0, st, st->size);
@ -1086,9 +1095,12 @@ static void OpenLoader(struct Loader *ldr) {
static int PhdrFlagsToProt(Elf64_Word flags) {
int prot = PROT_NONE;
if (flags & PF_R) prot |= PROT_READ;
if (flags & PF_W) prot |= PROT_WRITE;
if (flags & PF_X) prot |= PROT_EXEC;
if (flags & PF_R)
prot |= PROT_READ;
if (flags & PF_W)
prot |= PROT_WRITE;
if (flags & PF_X)
prot |= PROT_EXEC;
return prot;
}
@ -1101,8 +1113,10 @@ static char *EncodeWordAsPrintf(char *p, uint64_t w, int bytes) {
*p++ = c;
} else {
*p++ = '\\';
if ((c & 0700)) *p++ = '0' + ((c & 0700) >> 6);
if ((c & 0770)) *p++ = '0' + ((c & 070) >> 3);
if ((c & 0700))
*p++ = '0' + ((c & 0700) >> 6);
if ((c & 0770))
*p++ = '0' + ((c & 070) >> 3);
*p++ = '0' + (c & 7);
}
}
@ -1203,7 +1217,8 @@ static char *GenerateElf(char *p, struct Input *in) {
static bool IsPhdrAllocated(struct Input *in, Elf64_Phdr *phdr) {
int i;
Elf64_Shdr *shdr;
if (1) return true;
if (1)
return true;
for (i = 0; i < in->elf->e_shnum; ++i) {
if (!(shdr = GetElfSectionHeaderAddress(in->elf, in->size, i))) {
Die(in->path, "elf section header overflow");
@ -1226,7 +1241,8 @@ static struct Elf64_Sym *GetElfSymbol(struct Input *in, const char *name) {
ss = GetElfStringTable(in->elf, in->size, ".strtab");
sh = GetElfSymbolTable(in->elf, in->size, SHT_SYMTAB, &n);
st = GetElfSectionAddress(in->elf, in->size, sh);
if (!st || !ss) Die(in->path, "missing elf symbol table");
if (!st || !ss)
Die(in->path, "missing elf symbol table");
for (i = sh->sh_info; i < n; ++i) {
if (st[i].st_name && !strcmp(ss + st[i].st_name, name)) {
return st + i;
@ -1252,7 +1268,8 @@ static char *DefineMachoUuid(char *p) {
++macholoadcount;
load->command = MAC_LC_UUID;
load->size = sizeof(*load);
if (!hashes) Die(outpath, "won't generate macho uuid");
if (!hashes)
Die(outpath, "won't generate macho uuid");
memcpy(load->uuid, hashpool, sizeof(load->uuid));
return p + sizeof(*load);
}
@ -1411,7 +1428,8 @@ static char *SecondPass(char *p, struct Input *in) {
FixupPrintf(in->printf_phoff, p - prologue);
for (i = 0; i < in->elf->e_phnum; ++i) {
phdr = GetElfProgramHeaderAddress(in->elf, in->size, i);
if (phdr->p_type == PT_LOAD && !IsPhdrAllocated(in, phdr)) continue;
if (phdr->p_type == PT_LOAD && !IsPhdrAllocated(in, phdr))
continue;
*(phdr2 = (Elf64_Phdr *)p) = *phdr;
p += sizeof(Elf64_Phdr);
if (phdr->p_filesz) {
@ -1580,14 +1598,19 @@ static Elf64_Off ThirdPass(Elf64_Off offset, struct Input *in) {
static void OpenInput(const char *path) {
int fd;
struct Input *in;
if (inputs.n == ARRAYLEN(inputs.p)) Die(prog, "too many input files");
if (inputs.n == ARRAYLEN(inputs.p))
Die(prog, "too many input files");
in = inputs.p + inputs.n++;
in->path = path;
if ((fd = open(path, O_RDONLY)) == -1) DieSys(path);
if ((in->size = lseek(fd, 0, SEEK_END)) == -1) DieSys(path);
if ((fd = open(path, O_RDONLY)) == -1)
DieSys(path);
if ((in->size = lseek(fd, 0, SEEK_END)) == -1)
DieSys(path);
in->map = mmap(0, in->size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
if (in->map == MAP_FAILED) DieSys(path);
if (!IsElf64Binary(in->elf, in->size)) Die(path, "not an elf64 binary");
if (in->map == MAP_FAILED)
DieSys(path);
if (!IsElf64Binary(in->elf, in->size))
Die(path, "not an elf64 binary");
HashInput(in->map, in->size);
close(fd);
}
@ -1820,7 +1843,8 @@ int main(int argc, char *argv[]) {
#endif
prog = argv[0];
if (!prog) prog = "apelink";
if (!prog)
prog = "apelink";
// process flags
GetOpts(argc, argv);
@ -2042,7 +2066,8 @@ int main(int argc, char *argv[]) {
// output native mach-o morph
for (i = 0; i < inputs.n; ++i) {
struct Input *in = inputs.p + i;
if (in->elf->e_machine != EM_NEXGEN32E) continue;
if (in->elf->e_machine != EM_NEXGEN32E)
continue;
if (GetLoader(in->elf->e_machine, _HOSTXNU)) {
p = stpcpy(p, "if [ x\"$1\" = x--assimilate ]; then\n");
}
@ -2197,7 +2222,8 @@ int main(int argc, char *argv[]) {
size_t compressed_size;
struct Loader *loader;
loader = loaders.p + i;
if (!loader->used) continue;
if (!loader->used)
continue;
compressed_data = Gzip(loader->map, loader->size, &compressed_size);
if (loader->ddarg_skip1) {
FixupWordAsDecimal(loader->ddarg_skip1, offset);

View file

@ -102,7 +102,8 @@ static wontreturn void Die(const char *path, const char *reason) {
static wontreturn void SysDie(const char *path, const char *func) {
const char *errstr;
if (!(errstr = _strerdoc(errno))) errstr = "Unknown error";
if (!(errstr = _strerdoc(errno)))
errstr = "Unknown error";
tinyprint(2, path, ": ", func, ": ", errstr, "\n", NULL);
exit(1);
}
@ -180,11 +181,14 @@ static void *reballoc(void *p, size_t n, size_t z) {
size_t c;
assert(n >= 0);
assert(z >= 1 && !(z & (z - 1)));
if (ckd_mul(&n, n, z)) n = HEAP_SIZE;
if (!p) return balloc(~n, z);
if (ckd_mul(&n, n, z))
n = HEAP_SIZE;
if (!p)
return balloc(~n, z);
memcpy(&c, (char *)p - sizeof(c), sizeof(c));
assert(c >= z && c < HEAP_SIZE && !(c & (c - 1)));
if (n <= c) return p;
if (n <= c)
return p;
return memcpy(balloc(~n, z), p, c);
}
@ -264,7 +268,8 @@ static int64_t CopyFileOrDie(const char *inpath, int infd, //
for (mode = CFR, toto = 0;; toto += exchanged) {
if (mode == CFR) {
got = copy_file_range(infd, 0, outfd, 0, 4194304, 0);
if (!got) break;
if (!got)
break;
if (got != -1) {
exchanged = got;
} else if (errno == EXDEV || // different partitions
@ -278,11 +283,15 @@ static int64_t CopyFileOrDie(const char *inpath, int infd, //
}
} else {
got = read(infd, buf, sizeof(buf));
if (!got) break;
if (got == -1) SysDie(inpath, "read");
if (!got)
break;
if (got == -1)
SysDie(inpath, "read");
wrote = write(outfd, buf, got);
if (wrote == -1) SysDie(outpath, "write");
if (wrote != got) Die(outpath, "posix violated");
if (wrote == -1)
SysDie(outpath, "write");
if (wrote != got)
Die(outpath, "posix violated");
exchanged = wrote;
}
}
@ -326,7 +335,8 @@ int main(int argc, char *argv[]) {
// on modern systems that it isn't worth supporting the byzantine
// standard posix ar flags intended to improve cassette tape perf
SortChars(flags, strlen(flags));
if (*flags == 'D') ++flags;
if (*flags == 'D')
++flags;
if (!IsEqual(flags, "cr") && //
!IsEqual(flags, "cru") && //
!IsEqual(flags, "crsu") && //
@ -349,14 +359,22 @@ int main(int argc, char *argv[]) {
for (objectid = 0;;) {
struct stat st;
const char *arg;
if (!(arg = getargs_next(&ga))) break;
if (endswith(arg, "/")) continue;
if (endswith(arg, ".pkg")) continue;
if (stat(arg, &st)) SysDie(arg, "stat");
if (S_ISDIR(st.st_mode)) continue;
if (!st.st_size) Die(arg, "file is empty");
if (st.st_size > 0x7ffff000) Die(arg, "file too large");
if ((fd = open(arg, O_RDONLY)) == -1) SysDie(arg, "open");
if (!(arg = getargs_next(&ga)))
break;
if (endswith(arg, "/"))
continue;
if (endswith(arg, ".pkg"))
continue;
if (stat(arg, &st))
SysDie(arg, "stat");
if (S_ISDIR(st.st_mode))
continue;
if (!st.st_size)
Die(arg, "file is empty");
if (st.st_size > 0x7ffff000)
Die(arg, "file too large");
if ((fd = open(arg, O_RDONLY)) == -1)
SysDie(arg, "open");
AppendArg(&args, StrDup(arg));
AppendInt(&sizes, st.st_size);
AppendInt(&modes, st.st_mode);
@ -374,25 +392,35 @@ int main(int argc, char *argv[]) {
}
size_t mapsize = st.st_size;
void *elf = mmap(0, mapsize, PROT_READ, MAP_PRIVATE, fd, 0);
if (elf == MAP_FAILED) SysDie(arg, "mmap");
if (!IsElf64Binary(elf, mapsize)) Die(arg, "not an elf64 binary");
if (elf == MAP_FAILED)
SysDie(arg, "mmap");
if (!IsElf64Binary(elf, mapsize))
Die(arg, "not an elf64 binary");
char *strs = GetElfStringTable(elf, mapsize, ".strtab");
if (!strs) Die(arg, "elf .strtab not found");
if (!strs)
Die(arg, "elf .strtab not found");
Elf64_Xword symcount;
Elf64_Shdr *symsec = GetElfSymbolTable(elf, mapsize, SHT_SYMTAB, &symcount);
Elf64_Sym *syms = GetElfSectionAddress(elf, mapsize, symsec);
if (!syms) Die(arg, "elf symbol table not found");
if (!syms)
Die(arg, "elf symbol table not found");
for (Elf64_Xword j = symsec->sh_info; j < symcount; ++j) {
if (!syms[j].st_name) continue;
if (syms[j].st_shndx == SHN_UNDEF) continue;
if (syms[j].st_shndx == SHN_COMMON) continue;
if (!syms[j].st_name)
continue;
if (syms[j].st_shndx == SHN_UNDEF)
continue;
if (syms[j].st_shndx == SHN_COMMON)
continue;
const char *symname = GetElfString(elf, mapsize, strs, syms[j].st_name);
if (!symname) Die(arg, "elf symbol name corrupted");
if (!symname)
Die(arg, "elf symbol name corrupted");
AppendBytes(&symbols, symname, strlen(symname) + 1);
AppendInt(&symnames, objectid);
}
if (munmap(elf, mapsize)) SysDie(arg, "munmap");
if (close(fd)) SysDie(arg, "close");
if (munmap(elf, mapsize))
SysDie(arg, "munmap");
if (close(fd))
SysDie(arg, "close");
++objectid;
}
getargs_destroy(&ga);

View file

@ -197,7 +197,8 @@ static void GetElfHeader(Elf64_Ehdr *ehdr, const char *image, size_t n) {
const char *p, *e;
for (p = image, e = p + MIN(n, 8192); p < e; ++p) {
TryAgain:
if (READ64LE(p) != READ64LE("printf '")) continue;
if (READ64LE(p) != READ64LE("printf '"))
continue;
for (i = 0, p += 8; p + 3 < e && (c = *p++) != '\'';) {
if (c == '\\') {
if ('0' <= *p && *p <= '7') {
@ -378,18 +379,24 @@ static ssize_t Pwrite(int fd, const void *data, size_t size, uint64_t offset) {
static int GetMode(int fd) {
struct stat st;
if (fstat(fd, &st)) DieSys(path);
if (fstat(fd, &st))
DieSys(path);
return st.st_mode & 0777;
}
static void CopyFile(int infd, const char *map, size_t size, //
const void *hdr, size_t hdrsize) {
int outfd;
if (!outpath) return;
if ((outfd = creat(outpath, GetMode(infd))) == -1) DieSys(outpath);
if (hdrsize && Write(outfd, hdr, hdrsize) == -1) DieSys(outpath);
if (Write(outfd, map + hdrsize, size - hdrsize) == -1) DieSys(outpath);
if (close(outfd)) DieSys(outpath);
if (!outpath)
return;
if ((outfd = creat(outpath, GetMode(infd))) == -1)
DieSys(outpath);
if (hdrsize && Write(outfd, hdr, hdrsize) == -1)
DieSys(outpath);
if (Write(outfd, map + hdrsize, size - hdrsize) == -1)
DieSys(outpath);
if (close(outfd))
DieSys(outpath);
}
static void WriteOutput(int infd, const char *map, size_t size, //
@ -398,7 +405,8 @@ static void WriteOutput(int infd, const char *map, size_t size, //
if (outpath) {
CopyFile(infd, map, size, hdr, hdrsize);
} else if (g_clobber) {
if (Pwrite(infd, hdr, hdrsize, 0) == -1) DieSys(path);
if (Pwrite(infd, hdr, hdrsize, 0) == -1)
DieSys(path);
} else {
omode = GetMode(infd);
oflags = O_WRONLY | O_CREAT | (g_force ? O_TRUNC : O_EXCL);
@ -406,10 +414,14 @@ static void WriteOutput(int infd, const char *map, size_t size, //
if (strlcat(bakpath, ".bak", sizeof(bakpath)) >= sizeof(bakpath)) {
Die(path, "filename too long");
}
if ((outfd = open(bakpath, oflags, omode)) == -1) DieSys(bakpath);
if (Write(outfd, map, size) == -1) DieSys(bakpath);
if (close(outfd)) DieSys(bakpath);
if (Pwrite(infd, hdr, hdrsize, 0) == -1) DieSys(path);
if ((outfd = open(bakpath, oflags, omode)) == -1)
DieSys(bakpath);
if (Write(outfd, map, size) == -1)
DieSys(bakpath);
if (close(outfd))
DieSys(bakpath);
if (Pwrite(infd, hdr, hdrsize, 0) == -1)
DieSys(path);
}
}
@ -438,11 +450,15 @@ static void Assimilate(void) {
int oflags;
ssize_t size;
oflags = outpath ? O_RDONLY : O_RDWR;
if ((fd = open(path, oflags)) == -1) DieSys(path);
if ((size = lseek(fd, 0, SEEK_END)) == -1) DieSys(path);
if (size < 64) Die(path, "ape executables must be at least 64 bytes");
if ((fd = open(path, oflags)) == -1)
DieSys(path);
if ((size = lseek(fd, 0, SEEK_END)) == -1)
DieSys(path);
if (size < 64)
Die(path, "ape executables must be at least 64 bytes");
p = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0);
if (p == MAP_FAILED) DieSys(path);
if (p == MAP_FAILED)
DieSys(path);
if (READ32LE(p) == READ32LE("\177ELF")) {
Elf64_Ehdr *ehdr;
@ -604,8 +620,10 @@ static void Assimilate(void) {
AssimilateMacho(fd, p, size);
}
if (munmap(p, size)) DieSys(path);
if (close(fd)) DieSys(path);
if (munmap(p, size))
DieSys(path);
if (close(fd))
DieSys(path);
}
int main(int argc, char *argv[]) {

View file

@ -51,13 +51,15 @@ void Multiply%dx%d(uint64_t C[%d], const uint64_t A[%d], const uint64_t B[%d]) {
Rs = gc(calloc(sizeof(*Rs), n + m + 1));
Ra = gc(calloc(sizeof(*Ra), n + m + 1));
for (j = 0; j < n; ++j) {
if (j) printf(", ");
if (j)
printf(", ");
printf("H%d", j);
}
printf(";\n");
printf(" uint64_t ");
for (j = 0; j < n + m; ++j) {
if (j) printf(", ");
if (j)
printf(", ");
printf("R%d", j);
}
printf(";\n");

View file

@ -60,7 +60,8 @@ int main(int argc, char *argv[]) {
int i, mode;
char *endptr;
prog = argv[0];
if (!prog) prog = "chmod";
if (!prog)
prog = "chmod";
GetOpts(argc, argv);
if (argc - optind < 2) {
tinyprint(2, prog, ": missing operand\n", NULL);

View file

@ -364,8 +364,10 @@ char *Slurp(const char *path) {
bool HasFlag(const char *flags, const char *s) {
char buf[256];
size_t n = strlen(s);
if (!flags) return false;
if (n + 2 > sizeof(buf)) return false;
if (!flags)
return false;
if (n + 2 > sizeof(buf))
return false;
memcpy(buf, s, n);
buf[n] = '\n';
buf[n + 1] = 0;
@ -375,18 +377,29 @@ bool HasFlag(const char *flags, const char *s) {
bool IsGccOnlyFlag(const char *s) {
if (s[0] == '-') {
if (s[1] == 'f') {
if (startswith(s, "-ffixed-")) return true;
if (startswith(s, "-fcall-saved")) return true;
if (startswith(s, "-fcall-used")) return true;
if (startswith(s, "-fgcse-")) return true;
if (startswith(s, "-fvect-cost-model=")) return true;
if (startswith(s, "-fsimd-cost-model=")) return true;
if (startswith(s, "-fopt-info")) return true;
if (startswith(s, "-ffixed-"))
return true;
if (startswith(s, "-fcall-saved"))
return true;
if (startswith(s, "-fcall-used"))
return true;
if (startswith(s, "-fgcse-"))
return true;
if (startswith(s, "-fvect-cost-model="))
return true;
if (startswith(s, "-fsimd-cost-model="))
return true;
if (startswith(s, "-fopt-info"))
return true;
}
if (startswith(s, "-mstringop-strategy=")) return true;
if (startswith(s, "-mpreferred-stack-boundary=")) return true;
if (startswith(s, "-Wframe-larger-than=")) return true;
if (startswith(s, "-Walloca-larger-than=")) return true;
if (startswith(s, "-mstringop-strategy="))
return true;
if (startswith(s, "-mpreferred-stack-boundary="))
return true;
if (startswith(s, "-Wframe-larger-than="))
return true;
if (startswith(s, "-Walloca-larger-than="))
return true;
}
static bool once;
static char *gcc_only_flags;
@ -409,10 +422,14 @@ bool IsClangOnlyFlag(const char *s) {
bool FileExistsAndIsNewerThan(const char *filepath, const char *thanpath) {
struct stat st1, st2;
if (stat(filepath, &st1) == -1) return false;
if (stat(thanpath, &st2) == -1) return false;
if (st1.st_mtim.tv_sec < st2.st_mtim.tv_sec) return false;
if (st1.st_mtim.tv_sec > st2.st_mtim.tv_sec) return true;
if (stat(filepath, &st1) == -1)
return false;
if (stat(thanpath, &st2) == -1)
return false;
if (st1.st_mtim.tv_sec < st2.st_mtim.tv_sec)
return false;
if (st1.st_mtim.tv_sec > st2.st_mtim.tv_sec)
return true;
return st1.st_mtim.tv_nsec >= st2.st_mtim.tv_nsec;
}
@ -499,44 +516,55 @@ static int GetBaseCpuFreqMhz(void) {
void PlanResource(int resource, struct rlimit rlim) {
struct rlimit prior;
if (getrlimit(resource, &prior)) return;
if (getrlimit(resource, &prior))
return;
rlim.rlim_cur = MIN(rlim.rlim_cur, prior.rlim_max);
rlim.rlim_max = MIN(rlim.rlim_max, prior.rlim_max);
posix_spawnattr_setrlimit(&spawnattr, resource, &rlim);
}
void SetCpuLimit(int secs) {
if (secs <= 0) return;
if (IsWindows()) return;
if (secs <= 0)
return;
if (IsWindows())
return;
#ifdef __x86_64__
int mhz, lim;
if (!(mhz = GetBaseCpuFreqMhz())) return;
if (!(mhz = GetBaseCpuFreqMhz()))
return;
lim = ceil(3100. / mhz * secs);
PlanResource(RLIMIT_CPU, (struct rlimit){lim, lim + 1});
#endif
}
void SetFszLimit(long n) {
if (n <= 0) return;
if (IsWindows()) return;
if (n <= 0)
return;
if (IsWindows())
return;
PlanResource(RLIMIT_FSIZE, (struct rlimit){n, n + (n >> 1)});
}
void SetMemLimit(long n) {
if (n <= 0) return;
if (IsWindows() || IsXnu()) return;
if (n <= 0)
return;
if (IsWindows() || IsXnu())
return;
PlanResource(RLIMIT_AS, (struct rlimit){n, n});
}
void SetStkLimit(long n) {
if (IsWindows()) return;
if (n <= 0) return;
if (IsWindows())
return;
if (n <= 0)
return;
n = MAX(n, PTHREAD_STACK_MIN * 2);
PlanResource(RLIMIT_STACK, (struct rlimit){n, n});
}
void SetProLimit(long n) {
if (n <= 0) return;
if (n <= 0)
return;
PlanResource(RLIMIT_NPROC, (struct rlimit){n, n});
}
@ -586,7 +614,8 @@ char *AddShellQuotes(const char *s) {
}
p[j++] = '\'';
p[j] = 0;
if ((q = realloc(p, j + 1))) p = q;
if ((q = realloc(p, j + 1)))
p = q;
return p;
}
@ -659,7 +688,8 @@ int Launch(void) {
break;
}
if ((rc = read(pipefds[0], buf, sizeof(buf))) != -1) {
if (!(got = rc)) break;
if (!(got = rc))
break;
appendd(&output, buf, got);
if (outquota > 0 && appendz(output).i > outquota) {
kill(pid, SIGXFSZ);
@ -789,7 +819,8 @@ char *MakeTmpOut(const char *path) {
g_tmpout_original = path;
p = stpcpy(p, __get_tmpdir());
while ((c = *path++)) {
if (c == '/') c = '_';
if (c == '/')
c = '_';
if (p == e) {
tinyprint(2, program_invocation_short_name,
": fatal error: MakeTmpOut() generated temporary filename "
@ -826,7 +857,8 @@ int main(int argc, char *argv[]) {
stkquota = 8 * 1024 * 1024; // bytes
fszquota = 256 * 1000 * 1000; // bytes
memquota = 2048L * 1024 * 1024; // bytes
if ((s = getenv("V"))) verbose = atoi(s);
if ((s = getenv("V")))
verbose = atoi(s);
while ((opt = getopt(argc, argv, "hnstvwA:C:F:L:M:O:P:T:V:S:")) != -1) {
switch (opt) {
case 'n':
@ -897,7 +929,8 @@ int main(int argc, char *argv[]) {
cmd = argv[optind];
if (!strchr(cmd, '/')) {
if (!(cmd = commandv(cmd, ccpath, sizeof(ccpath)))) exit(127);
if (!(cmd = commandv(cmd, ccpath, sizeof(ccpath))))
exit(127);
}
s = basename(strdup(cmd));
@ -1020,13 +1053,20 @@ int main(int argc, char *argv[]) {
#ifdef __x86_64__
} else if (!strcmp(argv[i], "-march=native")) {
const struct X86ProcessorModel *model;
if (X86_HAVE(XOP)) AddArg("-mxop");
if (X86_HAVE(SSE4A)) AddArg("-msse4a");
if (X86_HAVE(SSE3)) AddArg("-msse3");
if (X86_HAVE(SSSE3)) AddArg("-mssse3");
if (X86_HAVE(SSE4_1)) AddArg("-msse4.1");
if (X86_HAVE(SSE4_2)) AddArg("-msse4.2");
if (X86_HAVE(AVX)) AddArg("-mavx");
if (X86_HAVE(XOP))
AddArg("-mxop");
if (X86_HAVE(SSE4A))
AddArg("-msse4a");
if (X86_HAVE(SSE3))
AddArg("-msse3");
if (X86_HAVE(SSSE3))
AddArg("-mssse3");
if (X86_HAVE(SSE4_1))
AddArg("-msse4.1");
if (X86_HAVE(SSE4_2))
AddArg("-msse4.2");
if (X86_HAVE(AVX))
AddArg("-mavx");
if (X86_HAVE(AVX2)) {
AddArg("-mavx2");
if (isgcc) {
@ -1034,27 +1074,48 @@ int main(int argc, char *argv[]) {
AddArg("-Wa,-msse2avx");
}
}
if (X86_HAVE(AVX512F)) AddArg("-mavx512f");
if (X86_HAVE(AVX512PF)) AddArg("-mavx512pf");
if (X86_HAVE(AVX512ER)) AddArg("-mavx512er");
if (X86_HAVE(AVX512CD)) AddArg("-mavx512cd");
if (X86_HAVE(AVX512VL)) AddArg("-mavx512vl");
if (X86_HAVE(AVX512BW)) AddArg("-mavx512bw");
if (X86_HAVE(AVX512DQ)) AddArg("-mavx512dq");
if (X86_HAVE(AVX512IFMA)) AddArg("-mavx512ifma");
if (X86_HAVE(AVX512VBMI)) AddArg("-mavx512vbmi");
if (X86_HAVE(SHA)) AddArg("-msha");
if (X86_HAVE(AES)) AddArg("-maes");
if (X86_HAVE(VAES)) AddArg("-mvaes");
if (X86_HAVE(PCLMUL)) AddArg("-mpclmul");
if (X86_HAVE(FSGSBASE)) AddArg("-mfsgsbase");
if (X86_HAVE(F16C)) AddArg("-mf16c");
if (X86_HAVE(FMA)) AddArg("-mfma");
if (X86_HAVE(POPCNT)) AddArg("-mpopcnt");
if (X86_HAVE(BMI)) AddArg("-mbmi");
if (X86_HAVE(BMI2)) AddArg("-mbmi2");
if (X86_HAVE(ADX)) AddArg("-madx");
if (X86_HAVE(FXSR)) AddArg("-mfxsr");
if (X86_HAVE(AVX512F))
AddArg("-mavx512f");
if (X86_HAVE(AVX512PF))
AddArg("-mavx512pf");
if (X86_HAVE(AVX512ER))
AddArg("-mavx512er");
if (X86_HAVE(AVX512CD))
AddArg("-mavx512cd");
if (X86_HAVE(AVX512VL))
AddArg("-mavx512vl");
if (X86_HAVE(AVX512BW))
AddArg("-mavx512bw");
if (X86_HAVE(AVX512DQ))
AddArg("-mavx512dq");
if (X86_HAVE(AVX512IFMA))
AddArg("-mavx512ifma");
if (X86_HAVE(AVX512VBMI))
AddArg("-mavx512vbmi");
if (X86_HAVE(SHA))
AddArg("-msha");
if (X86_HAVE(AES))
AddArg("-maes");
if (X86_HAVE(VAES))
AddArg("-mvaes");
if (X86_HAVE(PCLMUL))
AddArg("-mpclmul");
if (X86_HAVE(FSGSBASE))
AddArg("-mfsgsbase");
if (X86_HAVE(F16C))
AddArg("-mf16c");
if (X86_HAVE(FMA))
AddArg("-mfma");
if (X86_HAVE(POPCNT))
AddArg("-mpopcnt");
if (X86_HAVE(BMI))
AddArg("-mbmi");
if (X86_HAVE(BMI2))
AddArg("-mbmi2");
if (X86_HAVE(ADX))
AddArg("-madx");
if (X86_HAVE(FXSR))
AddArg("-mfxsr");
if ((model = getx86processormodel(kX86ProcessorModelKey))) {
switch (model->march) {
case X86_MARCH_CORE2:
@ -1123,9 +1184,11 @@ int main(int argc, char *argv[]) {
#endif /* __x86_64__ */
} else if (!strcmp(argv[i], "-fsanitize=address")) {
if (isgcc && ccversion >= 6) wantasan = true;
if (isgcc && ccversion >= 6)
wantasan = true;
} else if (!strcmp(argv[i], "-fsanitize=undefined")) {
if (isgcc && ccversion >= 6) wantubsan = true;
if (isgcc && ccversion >= 6)
wantubsan = true;
} else if (!strcmp(argv[i], "-fno-sanitize=address")) {
wantasan = false;
} else if (!strcmp(argv[i], "-fno-sanitize=undefined")) {
@ -1134,14 +1197,18 @@ int main(int argc, char *argv[]) {
wantasan = false;
wantubsan = false;
} else if (!strcmp(argv[i], "-fno-sanitize=null")) {
if (isgcc && ccversion >= 6) no_sanitize_null = true;
if (isgcc && ccversion >= 6)
no_sanitize_null = true;
} else if (!strcmp(argv[i], "-fno-sanitize=alignment")) {
if (isgcc && ccversion >= 6) no_sanitize_alignment = true;
if (isgcc && ccversion >= 6)
no_sanitize_alignment = true;
} else if (!strcmp(argv[i], "-fno-sanitize=pointer-overflow")) {
if (isgcc && ccversion >= 6) no_sanitize_pointer_overflow = true;
if (isgcc && ccversion >= 6)
no_sanitize_pointer_overflow = true;
} else if (startswith(argv[i], "-fsanitize=implicit") &&
strstr(argv[i], "integer")) {
if (isgcc) AddArg(argv[i]);
if (isgcc)
AddArg(argv[i]);
} else if (strstr(argv[i], "stack-protector")) {
if (isclang || (isgcc && ccversion >= 6)) {
AddArg(argv[i]);
@ -1158,7 +1225,8 @@ int main(int argc, char *argv[]) {
colorflag = argv[i];
} else if (startswith(argv[i], "-R") ||
!strcmp(argv[i], "-fsave-optimization-record")) {
if (isclang) AddArg(argv[i]);
if (isclang)
AddArg(argv[i]);
} else if (isclang && startswith(argv[i], "--debug-prefix-map")) {
/* llvm doesn't provide a gas interface so simulate w/ clang */
AddArg(xstrcat("-f", argv[i] + 2));
@ -1381,11 +1449,14 @@ int main(int argc, char *argv[]) {
if (verbose < 1) {
/* make silent mode, i.e. `V=0 make o//target` */
appendr(&command, 0);
if (!action) action = "BUILD";
if (!outpath) outpath = shortened;
if (!action)
action = "BUILD";
if (!outpath)
outpath = shortened;
n = strlen(action);
appends(&command, action);
do appendw(&command, ' '), ++n;
do
appendw(&command, ' '), ++n;
while (n < 15);
appends(&command, outpath);
n += strlen(outpath);
@ -1395,7 +1466,8 @@ int main(int argc, char *argv[]) {
appendw(&output, READ32LE("..."));
} else {
if (n < m && (__nocolor || !ischardev(2))) {
while (n < m) appendw(&command, ' '), ++n;
while (n < m)
appendw(&command, ' '), ++n;
}
appendd(&output, command, n);
}
@ -1411,7 +1483,8 @@ int main(int argc, char *argv[]) {
j += (j - 1) / 3;
j += 1 + 3;
j += 1 + 3;
while (i < j) appendw(&output, ' '), ++i;
while (i < j)
appendw(&output, ' '), ++i;
if (us > timeout * 1000000ull / 2) {
if (us > timeout * 1000000ull) {
PrintRed();
@ -1436,7 +1509,8 @@ int main(int argc, char *argv[]) {
j += (j - 1) / 3;
j += 1 + 3;
j += 1 + 3;
while (i < j) appendw(&output, ' '), ++i;
while (i < j)
appendw(&output, ' '), ++i;
if ((isproblematic = us > cpuquota * 1000000ull / 2)) {
if (us > cpuquota * 1000000ull - (cpuquota * 1000000ull) / 5) {
PrintRed();
@ -1455,7 +1529,8 @@ int main(int argc, char *argv[]) {
i = FormatUint64Thousands(buf, usage.ru_maxrss) - buf;
j = ceil(log10(memquota / 1024));
j += (j - 1) / 3;
while (i < j) appendw(&output, ' '), ++i;
while (i < j)
appendw(&output, ' '), ++i;
if ((isproblematic = usage.ru_maxrss * 1024 > memquota / 2)) {
if (usage.ru_maxrss * 1024 > memquota - memquota / 5) {
PrintRed();
@ -1473,7 +1548,8 @@ int main(int argc, char *argv[]) {
if (fszquota > 0) {
us = usage.ru_inblock + usage.ru_oublock;
i = FormatUint64Thousands(buf, us) - buf;
while (i < 7) appendw(&output, ' '), ++i;
while (i < 7)
appendw(&output, ' '), ++i;
appends(&output, buf);
appendw(&output, READ32LE("iop "));
n += i + 4;
@ -1516,7 +1592,8 @@ int main(int argc, char *argv[]) {
if (errno == EINTR) {
s = "notice: compile output truncated\n";
} else {
if (!exitcode) exitcode = 55;
if (!exitcode)
exitcode = 55;
s = "error: compile failed to write result\n";
}
write(2, s, strlen(s));

View file

@ -182,8 +182,10 @@ bool MovePreservingDestinationInode(const char *from, const char *to) {
void Cp(char *src, char *dst) {
ssize_t rc;
const char *s;
if (strlen(src) + 1 > PATH_MAX) _Exit(2);
if (strlen(dst) + 1 > PATH_MAX) _Exit(2);
if (strlen(src) + 1 > PATH_MAX)
_Exit(2);
if (strlen(dst) + 1 > PATH_MAX)
_Exit(2);
basename(src);
basename(dst);
if (IsDirectory(src)) {
@ -243,7 +245,8 @@ int main(int argc, char *argv[]) {
int i;
prog = argv[0];
if (!prog) prog = "cp";
if (!prog)
prog = "cp";
GetOpts(argc, argv);

View file

@ -48,7 +48,8 @@ int main(int argc, char *argv[]) {
const char *oufile = "/dev/stdout";
prog = argv[0];
if (!prog) prog = "dd";
if (!prog)
prog = "dd";
for (i = 1; i < argc; ++i) {
@ -65,14 +66,16 @@ int main(int argc, char *argv[]) {
argv[i][2] == '=') {
infile = argv[i] + 3 + (argv[i][3] == '"');
p = strchr(infile, '"');
if (p) *p = 0;
if (p)
*p = 0;
} else if (argv[i][0] == 'o' && //
argv[i][1] == 'f' && //
argv[i][2] == '=') {
oufile = argv[i] + 3 + (argv[i][3] == '"');
p = strchr(infile, '"');
if (p) *p = 0;
if (p)
*p = 0;
} else if (argv[i][0] == 's' && //
argv[i][1] == 'k' && //

View file

@ -36,7 +36,8 @@ int main(int argc, char *argv[]) {
}
for (j = 0; i + j < argc; ++j) {
if (j) fputc(' ', stream);
if (j)
fputc(' ', stream);
fputs(argv[i + j], stream);
}
if (wantnewline) {

View file

@ -179,12 +179,14 @@ static wontreturn void DieOom(void) {
static void *Calloc(size_t n) {
void *p;
if (!(p = calloc(1, n))) DieOom();
if (!(p = calloc(1, n)))
DieOom();
return p;
}
static void *Realloc(void *p, size_t n) {
if (!(p = realloc(p, n))) DieOom();
if (!(p = realloc(p, n)))
DieOom();
return p;
}
@ -629,10 +631,12 @@ static bool ParseDllImportSymbol(const char *symbol_name,
size_t n;
char *dll_name;
const char *dolla;
if (!startswith(symbol_name, "dll$")) return false;
if (!startswith(symbol_name, "dll$"))
return false;
symbol_name += 4;
dolla = strchr(symbol_name, '$');
if (!dolla) return false;
if (!dolla)
return false;
n = dolla - symbol_name;
dll_name = memcpy(Calloc(n + 1), symbol_name, n);
*out_dll_name = dll_name;
@ -682,19 +686,26 @@ static struct Elf *OpenElf(const char *path) {
struct Elf *elf;
elf = Calloc(sizeof(*elf));
elf->path = path;
if ((fd = open(path, O_RDONLY)) == -1) DieSys(path);
if ((elf->size = lseek(fd, 0, SEEK_END)) == -1) DieSys(path);
if ((fd = open(path, O_RDONLY)) == -1)
DieSys(path);
if ((elf->size = lseek(fd, 0, SEEK_END)) == -1)
DieSys(path);
elf->map = mmap(0, elf->size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
if (elf->map == MAP_FAILED) DieSys(path);
if (!IsElf64Binary(elf->ehdr, elf->size)) Die(path, "not an elf64 binary");
if (elf->map == MAP_FAILED)
DieSys(path);
if (!IsElf64Binary(elf->ehdr, elf->size))
Die(path, "not an elf64 binary");
elf->symhdr =
GetElfSymbolTable(elf->ehdr, elf->size, SHT_SYMTAB, &elf->symcount);
elf->symtab = GetElfSectionAddress(elf->ehdr, elf->size, elf->symhdr);
if (!elf->symtab) Die(path, "elf doesn't have symbol table");
if (!elf->symtab)
Die(path, "elf doesn't have symbol table");
elf->strtab = GetElfStringTable(elf->ehdr, elf->size, ".strtab");
if (!elf->strtab) Die(path, "elf doesn't have string table");
if (!elf->strtab)
Die(path, "elf doesn't have string table");
elf->secstrs = GetElfSectionNameStringTable(elf->ehdr, elf->size);
if (!elf->strtab) Die(path, "elf doesn't have section string table");
if (!elf->strtab)
Die(path, "elf doesn't have section string table");
LoadDllImports(elf);
LoadSectionsIntoSegments(elf);
close(fd);
@ -810,14 +821,18 @@ static struct ImagePointer GeneratePe(struct Elf *elf, char *fp, int64_t vp) {
// embed the ms-dos stub and/or bios bootloader
if (stubpath) {
int fd = open(stubpath, O_RDONLY);
if (fd == -1) DieSys(stubpath);
if (fd == -1)
DieSys(stubpath);
for (;;) {
ssize_t got = read(fd, fp, 512);
if (got == -1) DieSys(stubpath);
if (!got) break;
if (got == -1)
DieSys(stubpath);
if (!got)
break;
fp += got;
}
if (close(fd)) DieSys(stubpath);
if (close(fd))
DieSys(stubpath);
}
// output portable executable magic
@ -1083,15 +1098,18 @@ int main(int argc, char *argv[]) {
#endif
// get program name
prog = argv[0];
if (!prog) prog = "elf2pe";
if (!prog)
prog = "elf2pe";
// process flags
GetOpts(argc, argv);
// translate executable
struct Elf *elf = OpenElf(argv[optind]);
char *buf = memalign(MAX_ALIGN, 134217728);
struct ImagePointer ip = GeneratePe(elf, buf, 0x00400000);
if (creat(outpath, 0755) == -1) DieSys(elf->path);
if (creat(outpath, 0755) == -1)
DieSys(elf->path);
Pwrite(3, buf, ip.fp - buf, 0);
if (close(3)) DieSys(elf->path);
if (close(3))
DieSys(elf->path);
// PrintElf(elf);
}

View file

@ -53,8 +53,10 @@ int main(int argc, char *argv[]) {
if (!l1 && !l2) {
exit(0);
}
if (l1) chomp(l1);
if (l2) chomp(l2);
if (l1)
chomp(l1);
if (l2)
chomp(l2);
if (!l1 || !l2) {
printf("> %s\n", l1 ? l1 : "EOF");
printf("< %s\n", l2 ? l2 : "EOF");

View file

@ -78,18 +78,21 @@ static wontreturn void DieOom(void) {
static void *Malloc(size_t n) {
void *p;
if (!(p = malloc(n))) DieOom();
if (!(p = malloc(n)))
DieOom();
return p;
}
static void *Realloc(void *p, size_t n) {
if (!(p = realloc(p, n))) DieOom();
if (!(p = realloc(p, n)))
DieOom();
return p;
}
static wontreturn void SysExit(const char *func) {
const char *errstr;
if (!(errstr = _strerdoc(errno))) errstr = "EUNKNOWN";
if (!(errstr = _strerdoc(errno)))
errstr = "EUNKNOWN";
tinyprint(2, epath, ": ", func, " failed with ", errstr, "\n", NULL);
exit(1);
}
@ -201,11 +204,15 @@ static const unsigned char kNops[10][10] = {
static unsigned char *CoalesceNops(unsigned char *p, const unsigned char *e) {
long n;
for (; p + 1 < e; p += n) {
if (p[0] != 0x90) break;
if (p[1] != 0x90) break;
if (p[0] != 0x90)
break;
if (p[1] != 0x90)
break;
for (n = 2; p + n < e; ++n) {
if (p[n] != 0x90) break;
if (n == ARRAYLEN(kNops) - 1) break;
if (p[n] != 0x90)
break;
if (n == ARRAYLEN(kNops) - 1)
break;
}
memcpy(p, kNops[n], n);
}
@ -218,16 +225,23 @@ static void CheckPrivilegedCrossReferences(void) {
const Elf64_Shdr *shdr;
const Elf64_Rela *rela, *erela;
shdr = FindElfSectionByName(elf, esize, secstrs, ".rela.privileged");
if (!shdr || !(rela = GetElfSectionAddress(elf, esize, shdr))) return;
if (!shdr || !(rela = GetElfSectionAddress(elf, esize, shdr)))
return;
erela = rela + shdr->sh_size / sizeof(*rela);
for (; rela < erela; ++rela) {
if (!ELF64_R_TYPE(rela->r_info)) continue;
if (!(x = ELF64_R_SYM(rela->r_info))) continue;
if (x >= symcount) continue;
if (syms[x].st_shndx == SHN_ABS) continue;
if (!syms[x].st_shndx) continue;
if (!ELF64_R_TYPE(rela->r_info))
continue;
if (!(x = ELF64_R_SYM(rela->r_info)))
continue;
if (x >= symcount)
continue;
if (syms[x].st_shndx == SHN_ABS)
continue;
if (!syms[x].st_shndx)
continue;
if ((shdr = GetElfSectionHeaderAddress(elf, esize, syms[x].st_shndx))) {
if (~shdr->sh_flags & SHF_EXECINSTR) continue; // data reference
if (~shdr->sh_flags & SHF_EXECINSTR)
continue; // data reference
if ((secname = GetElfString(elf, esize, secstrs, shdr->sh_name)) &&
strcmp(".privileged", secname)) {
tinyprint(2, epath,
@ -334,12 +348,15 @@ static void OptimizePatchableFunctionEntries(void) {
Elf64_Addr sym_rva;
if (elf->e_machine == EM_NEXGEN32E) {
for (i = 0; i < symcount; ++i) {
if (!syms[i].st_size) continue;
if (ELF64_ST_TYPE(syms[i].st_info) != STT_FUNC) continue;
if (!syms[i].st_size)
continue;
if (ELF64_ST_TYPE(syms[i].st_info) != STT_FUNC)
continue;
if (!(shdr = GetElfSectionHeaderAddress(elf, esize, syms[i].st_shndx))) {
Die("elf header overflow #3");
}
if (shdr->sh_type != SHT_PROGBITS) continue;
if (shdr->sh_type != SHT_PROGBITS)
continue;
if (!(p = GetElfSectionAddress(elf, esize, shdr))) {
Die("elf section overflow");
}
@ -371,7 +388,8 @@ static void RelinkZipFiles(void) {
// scan backwards for zip eocd todo record
// that was created by libc/nexgen32e/zip.S
for (;;) {
if (eocd < stop) return;
if (eocd < stop)
return;
if (READ32LE(eocd) == kZipCdirHdrMagicTodo && //
ZIP_CDIR_SIZE(eocd) && //
!ZIP_CDIR_OFFSET(eocd) && //
@ -446,13 +464,17 @@ static void GenerateIfuncInit(void) {
static char code[16384];
static Elf64_Rela relas[1024];
Elf64_Shdr *symtab_shdr = GetElfSymbolTable(elf, esize, SHT_SYMTAB, 0);
if (!symtab_shdr) Die("symbol table section header not found");
if (!symtab_shdr)
Die("symbol table section header not found");
Elf64_Word symtab_shdr_index =
((char *)symtab_shdr - ((char *)elf + elf->e_shoff)) / elf->e_shentsize;
for (Elf64_Xword i = 0; i < symcount; ++i) {
if (syms[i].st_shndx == SHN_UNDEF) continue;
if (syms[i].st_shndx >= SHN_LORESERVE) continue;
if (ELF64_ST_TYPE(syms[i].st_info) != STT_GNU_IFUNC) continue;
if (syms[i].st_shndx == SHN_UNDEF)
continue;
if (syms[i].st_shndx >= SHN_LORESERVE)
continue;
if (ELF64_ST_TYPE(syms[i].st_info) != STT_GNU_IFUNC)
continue;
if (!(name = GetElfString(elf, esize, symstrs, syms[i].st_name)))
Die("could not get symbol name of ifunc");
static char resolver_name[65536];
@ -463,11 +485,16 @@ static void GenerateIfuncInit(void) {
Elf64_Xword function_sym_index = i;
Elf64_Xword resolver_sym_index = -1;
for (Elf64_Xword i = 0; i < symcount; ++i) {
if (syms[i].st_shndx == SHN_UNDEF) continue;
if (syms[i].st_shndx >= SHN_LORESERVE) continue;
if (ELF64_ST_TYPE(syms[i].st_info) != STT_FUNC) continue;
if (!(s = GetElfString(elf, esize, symstrs, syms[i].st_name))) continue;
if (strcmp(s, resolver_name)) continue;
if (syms[i].st_shndx == SHN_UNDEF)
continue;
if (syms[i].st_shndx >= SHN_LORESERVE)
continue;
if (ELF64_ST_TYPE(syms[i].st_info) != STT_FUNC)
continue;
if (!(s = GetElfString(elf, esize, symstrs, syms[i].st_name)))
continue;
if (strcmp(s, resolver_name))
continue;
resolver_sym_index = i;
break;
}
@ -521,15 +548,18 @@ static void GenerateIfuncInit(void) {
0x5e, // pop %rsi
0x5f, // pop %rdi
};
if (code_i + sizeof(chunk3) > sizeof(code)) Die("too many ifuncs");
if (code_i + sizeof(chunk3) > sizeof(code))
Die("too many ifuncs");
memcpy(code + code_i, chunk3, sizeof(chunk3));
code_i += sizeof(chunk3);
}
if (!code_i) return;
if (!code_i)
return;
// prepare to mutate elf
// remap file so it has more space
if (elf->e_shnum + 2 > 65535) Die("too many sections");
if (elf->e_shnum + 2 > 65535)
Die("too many sections");
size_t reserve_size = esize + 32 * 1024 * 1024;
elf = Realloc(elf, reserve_size);

View file

@ -157,15 +157,19 @@ void Compress(const char *inpath) {
p = openflags;
*p++ = opt_append ? 'a' : 'w';
*p++ = 'b';
if (opt_exclusive) *p++ = 'x';
if (opt_level) *p++ = opt_level;
if (opt_strategy) *p++ = opt_strategy;
if (opt_exclusive)
*p++ = 'x';
if (opt_level)
*p++ = opt_level;
if (opt_strategy)
*p++ = opt_strategy;
*p = 0;
if (opt_usestdout) {
outpath = "/dev/stdout";
output = gzdopen(1, openflags);
} else {
if (strlen(inpath) + 3 + 1 > PATH_MAX) _Exit(2);
if (strlen(inpath) + 3 + 1 > PATH_MAX)
_Exit(2);
stpcpy(stpcpy(pathbuf, inpath), ".gz");
outpath = pathbuf;
output = gzopen(outpath, openflags);
@ -237,7 +241,8 @@ void Decompress(const char *inpath) {
outpath = "/dev/stdout";
} else if (endswith(inpath, ".gz")) {
n = strlen(inpath);
if (n - 3 + 1 > PATH_MAX) _Exit(2);
if (n - 3 + 1 > PATH_MAX)
_Exit(2);
memcpy(pathbuf, inpath, n - 3);
pathbuf[n - 3] = 0;
outpath = pathbuf;
@ -291,7 +296,8 @@ void Decompress(const char *inpath) {
int main(int argc, char *argv[]) {
int i;
prog = argv[0];
if (!prog) prog = "gzip";
if (!prog)
prog = "gzip";
GetOpts(argc, argv);
if (opt_decompress) {
if (optind == argc) {

View file

@ -69,7 +69,8 @@ static wontreturn void OutOfMemory(void) {
static void *Calloc(size_t n, size_t z) {
void *p;
if (!(p = calloc(n, z))) OutOfMemory();
if (!(p = calloc(n, z)))
OutOfMemory();
return p;
}
@ -186,7 +187,8 @@ int main(int argc, char *argv[]) {
int64_t hProcess;
char16_t name[PATH_MAX];
for (subcount = i = 0; i < n; i++) {
if (!pids[i]) continue;
if (!pids[i])
continue;
if ((hProcess = MyOpenProcess(pids[i]))) {
if (GetProcessName(hProcess, name)) {
ConvertStringToLowercase16(name);

View file

@ -33,9 +33,11 @@ static bool IsSymbolChar2(char c) {
}
static bool IsSymbolString(const char *s) {
if (!IsSymbolChar1(*s++)) return false;
if (!IsSymbolChar1(*s++))
return false;
while (*s) {
if (!IsSymbolChar2(*s++)) return false;
if (!IsSymbolChar2(*s++))
return false;
}
return true;
}

View file

@ -32,7 +32,8 @@ void AppendData(struct Buffer *b, const char *data, size_t len) {
unsigned n;
if (b->i + len + 1 > b->n) {
n = MAX(b->i + len + 1, MAX(16, b->n + (b->n >> 1)));
if (!(p = realloc(b->p, n))) return;
if (!(p = realloc(b->p, n)))
return;
b->p = p;
b->n = n;
}

View file

@ -65,17 +65,21 @@ char *CopySymbol(char *p, size_t pn, const char *s, size_t sn) {
assert(pn >= 1 + 3 + 1 + 1);
iscomplicated = memchr(s, ' ', sn) || memchr(s, '(', sn);
extra = 1;
if (iscomplicated) extra += 2;
if (iscomplicated)
extra += 2;
if (sn + extra > pn) {
sn = pn - extra - 3;
showdots = true;
} else {
showdots = false;
}
if (iscomplicated) *p++ = '"';
if (iscomplicated)
*p++ = '"';
p = mempcpy(p, s, sn);
if (showdots) p = stpcpy(p, "...");
if (iscomplicated) *p++ = '"';
if (showdots)
p = stpcpy(p, "...");
if (iscomplicated)
*p++ = '"';
*p = '\0';
return p;
}
@ -85,8 +89,10 @@ char *DemangleCxxFilt(char *p, size_t pn, const char *s, size_t sn) {
size_t got;
struct iovec iov[2];
static char buf[4096];
if (!g_cxxfilt.pid) SpawnCxxFilt();
if (g_cxxfilt.pid == -1) return NULL;
if (!g_cxxfilt.pid)
SpawnCxxFilt();
if (g_cxxfilt.pid == -1)
return NULL;
buf[0] = '\n';
iov[0].iov_base = (void *)s;
iov[0].iov_len = sn;
@ -96,7 +102,8 @@ char *DemangleCxxFilt(char *p, size_t pn, const char *s, size_t sn) {
if ((rc = read(g_cxxfilt.reader, buf, sizeof(buf))) != -1) {
got = rc;
if (got >= 2 && buf[got - 1] == '\n') {
if (buf[got - 2] == '\r') --got;
if (buf[got - 2] == '\r')
--got;
--got;
return CopySymbol(p, pn, buf, got);
}
@ -117,7 +124,8 @@ char *Demangle(char *p, const char *symbol, size_t n) {
size_t sn;
sn = strlen(symbol);
if (startswith(symbol, "_Z")) {
if ((r = DemangleCxxFilt(p, n, symbol, sn))) return r;
if ((r = DemangleCxxFilt(p, n, symbol, sn)))
return r;
}
return CopySymbol(p, n, symbol, sn);
}

View file

@ -249,7 +249,8 @@ void elfwriter_commit(struct ElfWriter *elf, size_t size) {
void elfwriter_finishsection(struct ElfWriter *elf) {
size_t section = FinishSection(elf);
if (elf->relas->j < elf->relas->i) MakeRelaSection(elf, section);
if (elf->relas->j < elf->relas->i)
MakeRelaSection(elf, section);
}
/**

View file

@ -164,7 +164,8 @@ void elfwriter_zip(struct ElfWriter *elf, const char *symbol, const char *cname,
lfilehdrsize = kZipLfileHdrMinSize + namesize;
crc = crc32_z(0, data, uncompsize);
GetDosLocalTime(mtim.tv_sec, &mtime, &mdate);
if (isutf8(name, namesize)) gflags |= kZipGflagUtf8;
if (isutf8(name, namesize))
gflags |= kZipGflagUtf8;
if (S_ISREG(mode) && istext(data, size)) {
iattrs |= kZipIattrText;
}

View file

@ -65,8 +65,10 @@ static ssize_t EzWritevAll(int fd, struct iovec *iov, int iovlen) {
total = 0;
do {
if (i) {
while (i < iovlen && !iov[i].iov_len) ++i;
if (i == iovlen) break;
while (i < iovlen && !iov[i].iov_len)
++i;
if (i == iovlen)
break;
}
if ((rc = writev(fd, iov + i, iovlen - i)) != -1) {
wrote = rc;
@ -99,7 +101,8 @@ int EzTlsFlush(struct EzTlsBio *bio, const unsigned char *buf, size_t len) {
v[1].iov_base = (void *)buf;
v[1].iov_len = len;
if (EzWritevAll(bio->fd, v, 2) != -1) {
if (bio->c > 0) bio->c = 0;
if (bio->c > 0)
bio->c = 0;
} else if (errno == EAGAIN) {
return MBEDTLS_ERR_SSL_TIMEOUT;
} else if (errno == EPIPE || errno == ECONNRESET || errno == ENETRESET) {
@ -121,7 +124,8 @@ static int EzTlsSend(void *ctx, const unsigned char *buf, size_t len) {
bio->c += len;
return len;
}
if ((rc = EzTlsFlush(bio, buf, len)) < 0) return rc;
if ((rc = EzTlsFlush(bio, buf, len)) < 0)
return rc;
return len;
}
@ -130,11 +134,13 @@ static int EzTlsRecvImpl(void *ctx, unsigned char *p, size_t n, uint32_t o) {
int r;
struct iovec v[2];
struct EzTlsBio *bio = ctx;
if ((r = EzTlsFlush(bio, 0, 0)) < 0) return r;
if ((r = EzTlsFlush(bio, 0, 0)) < 0)
return r;
if (bio->a < bio->b) {
r = MIN(n, bio->b - bio->a);
memcpy(p, bio->t + bio->a, r);
if ((bio->a += r) == bio->b) bio->a = bio->b = 0;
if ((bio->a += r) == bio->b)
bio->a = bio->b = 0;
return r;
}
v[0].iov_base = p;
@ -153,7 +159,8 @@ static int EzTlsRecvImpl(void *ctx, unsigned char *p, size_t n, uint32_t o) {
return MBEDTLS_ERR_NET_RECV_FAILED;
}
}
if (r > n) bio->b = r - n;
if (r > n)
bio->b = r - n;
return MIN(n, r);
}
@ -237,7 +244,8 @@ void EzSetup(char psk[32]) {
}
void EzDestroy(void) {
if (!mytid) return;
if (!mytid)
return;
EzSanity();
mbedtls_ssl_free(&ezssl);
mbedtls_ctr_drbg_free(&ezrng);

View file

@ -77,7 +77,8 @@
static wontreturn void getargs_fail(const char *path, const char *reason) {
const char *errstr;
if (!(errstr = _strerdoc(errno))) errstr = "Unknown error";
if (!(errstr = _strerdoc(errno)))
errstr = "Unknown error";
tinyprint(2, path, ": ", reason, ": ", errstr, "\n", NULL);
exit(1);
}
@ -97,7 +98,8 @@ void getargs_init(struct GetArgs *ga, char **args) {
*/
void getargs_destroy(struct GetArgs *ga) {
if (ga->map) {
if (munmap(ga->map, ga->mapsize)) notpossible;
if (munmap(ga->map, ga->mapsize))
notpossible;
}
bzero(ga, sizeof(*ga));
}
@ -152,7 +154,8 @@ const char *getargs_next(struct GetArgs *ga) {
ga->j += ++k;
return p;
}
if (munmap(ga->map, ga->mapsize)) notpossible;
if (munmap(ga->map, ga->mapsize))
notpossible;
ga->map = 0;
ga->mapsize = 0;
ga->j = 0;

View file

@ -43,7 +43,8 @@ static void rehash(struct InternerObject *it) {
p = it->p;
it->p = xcalloc((it->n <<= 1), sizeof(struct InternerHash));
for (i = 0; i < n; ++i) {
if (!p[i].hash) continue;
if (!p[i].hash)
continue;
step = 0;
do {
j = (p[i].hash + step * ((step + 1) >> 1)) & (it->n - 1);
@ -120,15 +121,21 @@ size_t internobj(struct Interner *t, const void *data, size_t size) {
} while (it->p[i].hash);
}
off = it->pool.i;
if (ckd_add(&need, off, size)) abort();
if (ckd_add(&need, need, 1)) abort();
if (ckd_add(&need, off, size))
abort();
if (ckd_add(&need, need, 1))
abort();
if (need > it->pool.n) {
if (ckd_add(&n2, it->pool.n, 1)) abort();
if (ckd_add(&n2, it->pool.n, 1))
abort();
do {
if (ckd_add(&n2, n2, n2 >> 1)) abort();
if (ckd_add(&n2, n2, n2 >> 1))
abort();
} while (need > n2);
if (ckd_mul(&bytes, n2, sizeof(*it->pool.p))) abort();
if (!(p2 = realloc(it->pool.p, bytes))) abort();
if (ckd_mul(&bytes, n2, sizeof(*it->pool.p)))
abort();
if (!(p2 = realloc(it->pool.p, bytes)))
abort();
it->pool.p = p2;
it->pool.n = n2;
}

View file

@ -32,13 +32,16 @@ struct Lines {
static char *SkipEmptyFirstLine(char *p) {
int i = 0;
while (p[i] == ' ' || p[i] == '\t') ++i;
while (p[i] == ' ' || p[i] == '\t')
++i;
return p[i] == '\n' ? p + i + 1 : p;
}
static void DeleteLastEmptyLine(char *p, size_t n) {
while (n && (p[n - 1] == ' ' || p[n - 1] == '\t')) --n;
if (n && p[n - 1] == '\n') p[n - 1] = '\0';
while (n && (p[n - 1] == ' ' || p[n - 1] == '\t'))
--n;
if (n && p[n - 1] == '\n')
p[n - 1] = '\0';
}
static void AppendLine(struct Lines *lines) {
@ -88,7 +91,8 @@ static unsigned GetMinPrefixLen(struct Lines *lines,
for (m = -1, i = 0; i < lines->n; ++i) {
if (lines->p[i].n) {
n = GetPrefixLen(lines->p[i].p, lines->p[i].n);
if (n < m) m = n;
if (n < m)
m = n;
}
}
return m == -1 ? 0 : m;
@ -112,7 +116,8 @@ static void SplitLines(struct Lines *lines, char *p) {
AppendLine(lines);
lines->p[lines->n - 1].p = p;
lines->p[lines->n - 1].n = (q = strchr(p, '\n')) ? q - p : strlen(p);
if (!q) break;
if (!q)
break;
p = q + 1;
}
RemovePrefixes(lines, GetMinPrefixLen(lines, GetSpaceStarPrefixLen));
@ -175,7 +180,8 @@ static int ExtractText(struct Javadown *jd, struct Lines *lines, int i) {
char *p;
size_t n;
for (p = NULL, n = j = 0; i + j < lines->n; ++j) {
if (lines->p[i + j].n && lines->p[i + j].p[0] == '@') break;
if (lines->p[i + j].n && lines->p[i + j].p[0] == '@')
break;
if (j) {
p = realloc(p, ++n);
p[n - 1] = '\n';
@ -194,11 +200,14 @@ static void ExtractTags(struct Javadown *jd, struct Lines *lines, int i) {
char *tag, *text, *p2;
unsigned taglen, textlen, n2;
for (; i < lines->n; ++i) {
if (!lines->p[i].n) continue;
if (lines->p[i].p[0] != '@') continue;
if (!lines->p[i].n)
continue;
if (lines->p[i].p[0] != '@')
continue;
tag = lines->p[i].p + 1;
taglen = GetTagLen(tag, lines->p[i].n - 1);
if (!taglen) continue;
if (!taglen)
continue;
text = tag + taglen;
tag = strndup(tag, taglen);
textlen = lines->p[i].n - 1 - taglen;

View file

@ -27,25 +27,30 @@
static int tpdecode(const char *s, wint_t *out) {
uint32_t wc, cb, need, msb, j, i = 0;
if ((wc = s[i++] & 255) == -1) return -1;
if ((wc = s[i++] & 255) == -1)
return -1;
while ((wc & 0300) == 0200) {
if ((wc = s[i++] & 255) == -1) return -1;
if ((wc = s[i++] & 255) == -1)
return -1;
}
if (!(0 <= wc && wc <= 0x7F)) {
msb = wc < 252 ? bsr(~wc & 0xff) : 1;
need = 7 - msb;
wc &= ((1u << msb) - 1) | 0003;
for (j = 1; j < need; ++j) {
if ((cb = s[i++] & 255) == -1) return -1;
if ((cb = s[i++] & 255) == -1)
return -1;
if ((cb & 0300) == 0200) {
wc = wc << 6 | (cb & 077);
} else {
if (out) *out = 0xFFFD;
if (out)
*out = 0xFFFD;
return -1;
}
}
}
if (out) *out = wc;
if (out)
*out = wc;
return i;
}
@ -71,7 +76,8 @@ ssize_t PrintPanels(int fd, long pn, struct Panel *p, long tyn, long txn) {
bzero(&b, sizeof(b));
AppendStr(&b, "\e[H");
for (y = 0; y < tyn; ++y) {
if (y) AppendFmt(&b, "\e[%dH", y + 1);
if (y)
AppendFmt(&b, "\e[%dH", y + 1);
for (x = i = 0; i < pn; ++i) {
if (p[i].top <= y && y < p[i].bottom) {
j = state = 0;

View file

@ -164,7 +164,8 @@ int main(int argc, char *argv[]) {
}
/* TODO(jart): Fix Emacs */
glyphs[col] = kCp437[ch == '"' || ch == '#' ? '.' : ch];
if (col) fputc(',', fout);
if (col)
fputc(',', fout);
fprintf(fout, "0x%02x", ch);
if (++col == COLS) {
col = 0;

View file

@ -76,13 +76,20 @@ int main(int argc, char *argv[]) {
GetOpts(argc, argv);
#ifdef __x86_64__
struct X86ProcessorModel *model;
if (X86_HAVE(XOP)) Puts("-mxop");
if (X86_HAVE(SSE4A)) Puts("-msse4a");
if (X86_HAVE(SSE3)) Puts("-msse3");
if (X86_HAVE(SSSE3)) Puts("-mssse3");
if (X86_HAVE(SSE4_1)) Puts("-msse4.1");
if (X86_HAVE(SSE4_2)) Puts("-msse4.2");
if (X86_HAVE(AVX)) Puts("-mavx");
if (X86_HAVE(XOP))
Puts("-mxop");
if (X86_HAVE(SSE4A))
Puts("-msse4a");
if (X86_HAVE(SSE3))
Puts("-msse3");
if (X86_HAVE(SSSE3))
Puts("-mssse3");
if (X86_HAVE(SSE4_1))
Puts("-msse4.1");
if (X86_HAVE(SSE4_2))
Puts("-msse4.2");
if (X86_HAVE(AVX))
Puts("-mavx");
if (X86_HAVE(AVX2)) {
Puts("-mavx2");
if (!isclang) {
@ -90,27 +97,48 @@ int main(int argc, char *argv[]) {
Puts("-Wa,-msse2avx");
}
}
if (X86_HAVE(AVX512F)) Puts("-mavx512f");
if (X86_HAVE(AVX512PF)) Puts("-mavx512pf");
if (X86_HAVE(AVX512ER)) Puts("-mavx512er");
if (X86_HAVE(AVX512CD)) Puts("-mavx512cd");
if (X86_HAVE(AVX512VL)) Puts("-mavx512vl");
if (X86_HAVE(AVX512BW)) Puts("-mavx512bw");
if (X86_HAVE(AVX512DQ)) Puts("-mavx512dq");
if (X86_HAVE(AVX512IFMA)) Puts("-mavx512ifma");
if (X86_HAVE(AVX512VBMI)) Puts("-mavx512vbmi");
if (X86_HAVE(SHA)) Puts("-msha");
if (X86_HAVE(AES)) Puts("-maes");
if (X86_HAVE(VAES)) Puts("-mvaes");
if (X86_HAVE(PCLMUL)) Puts("-mpclmul");
if (X86_HAVE(FSGSBASE)) Puts("-mfsgsbase");
if (X86_HAVE(F16C)) Puts("-mf16c");
if (X86_HAVE(FMA)) Puts("-mfma");
if (X86_HAVE(POPCNT)) Puts("-mpopcnt");
if (X86_HAVE(BMI)) Puts("-mbmi");
if (X86_HAVE(BMI2)) Puts("-mbmi2");
if (X86_HAVE(ADX)) Puts("-madx");
if (X86_HAVE(FXSR)) Puts("-mfxsr");
if (X86_HAVE(AVX512F))
Puts("-mavx512f");
if (X86_HAVE(AVX512PF))
Puts("-mavx512pf");
if (X86_HAVE(AVX512ER))
Puts("-mavx512er");
if (X86_HAVE(AVX512CD))
Puts("-mavx512cd");
if (X86_HAVE(AVX512VL))
Puts("-mavx512vl");
if (X86_HAVE(AVX512BW))
Puts("-mavx512bw");
if (X86_HAVE(AVX512DQ))
Puts("-mavx512dq");
if (X86_HAVE(AVX512IFMA))
Puts("-mavx512ifma");
if (X86_HAVE(AVX512VBMI))
Puts("-mavx512vbmi");
if (X86_HAVE(SHA))
Puts("-msha");
if (X86_HAVE(AES))
Puts("-maes");
if (X86_HAVE(VAES))
Puts("-mvaes");
if (X86_HAVE(PCLMUL))
Puts("-mpclmul");
if (X86_HAVE(FSGSBASE))
Puts("-mfsgsbase");
if (X86_HAVE(F16C))
Puts("-mf16c");
if (X86_HAVE(FMA))
Puts("-mfma");
if (X86_HAVE(POPCNT))
Puts("-mpopcnt");
if (X86_HAVE(BMI))
Puts("-mbmi");
if (X86_HAVE(BMI2))
Puts("-mbmi2");
if (X86_HAVE(ADX))
Puts("-madx");
if (X86_HAVE(FXSR))
Puts("-mfxsr");
if ((model = (void *)getx86processormodel(kX86ProcessorModelKey))) {
switch (model->march) {
case X86_MARCH_CORE2:

View file

@ -176,37 +176,44 @@ static wontreturn void DieOom(void) {
static unsigned Hash(const void *s, size_t l) {
unsigned h;
h = crc32c(0, s, l);
if (!h) h = 1;
if (!h)
h = 1;
return h;
}
static void *Malloc(size_t n) {
void *p;
if (!(p = malloc(n))) DieOom();
if (!(p = malloc(n)))
DieOom();
return p;
}
static void *Calloc(size_t n, size_t z) {
void *p;
if (!(p = calloc(n, z))) DieOom();
if (!(p = calloc(n, z)))
DieOom();
return p;
}
static void *Realloc(void *p, size_t n) {
if (!(p = realloc(p, n))) DieOom();
if (!(p = realloc(p, n)))
DieOom();
return p;
}
static void Appendw(char **b, uint64_t w) {
if (appendw(b, w) == -1) DieOom();
if (appendw(b, w) == -1)
DieOom();
}
static void Appends(char **b, const char *s) {
if (appends(b, s) == -1) DieOom();
if (appends(b, s) == -1)
DieOom();
}
static void Appendd(char **b, const void *p, size_t n) {
if (appendd(b, p, n) == -1) DieOom();
if (appendd(b, p, n) == -1)
DieOom();
}
static unsigned FindFirstFromEdge(unsigned id) {
@ -259,7 +266,8 @@ static void Rehash(void) {
sources.n = sources.n ? sources.n << 1 : 16;
sources.p = Calloc(sources.n, sizeof(struct Source));
for (i = 0; i < old.n; ++i) {
if (!old.p[i].hash) continue;
if (!old.p[i].hash)
continue;
step = 0;
do {
j = (old.p[i].hash + step * (step + 1) / 2) & (sources.n - 1);
@ -286,7 +294,8 @@ static int HashSource(const char *name, size_t len, bool create) {
step++;
} while (sources.p[i].hash);
}
if (!create) return -1;
if (!create)
return -1;
if (++sources.i >= (sources.n >> 1)) {
Rehash();
step = 0;
@ -439,17 +448,21 @@ static void LoadRelationships(int argc, char *argv[]) {
DieSys(src);
}
for (p = map, pe = map + size; p < pe; ++p) {
if (!(p = memmem(p, pe - p, "include ", 8))) break;
if (!(path = FindIncludePath(map, size, p, is_assembly))) continue;
if (!(p = memmem(p, pe - p, "include ", 8)))
break;
if (!(path = FindIncludePath(map, size, p, is_assembly)))
continue;
// copy the specified include path
char right;
if (path[-1] == '<') {
if (!systempaths.n) continue;
if (!systempaths.n)
continue;
right = '>';
} else {
right = '"';
}
if (!(pathend = memchr(path, right, pe - path))) continue;
if (!(pathend = memchr(path, right, pe - path)))
continue;
if (pathend - path >= PATH_MAX) {
tinyprint(2, src, ": uses really long include path\n", NULL);
exit(1);
@ -620,7 +633,8 @@ static const char *StripExt(char pathbuf[hasatleast PATH_MAX], const char *s) {
DiePathTooLong(s);
}
dot = strrchr(pathbuf, '.');
if (dot) *dot = '\0';
if (dot)
*dot = '\0';
return pathbuf;
}
@ -630,9 +644,12 @@ static uint32_t GetFileExtension(const char *s) {
n = s ? strlen(s) : 0;
for (i = w = 0; n--;) {
wint_t c = s[n];
if (!IsGraph(c)) return 0;
if (c == '.') break;
if (++i > 4) return 0;
if (!IsGraph(c))
return 0;
if (c == '.')
break;
if (++i > 4)
return 0;
w <<= 8;
w |= kToLower[c];
}
@ -655,7 +672,8 @@ static bool IsObjectSource(const char *name) {
__funline bool Bts(uint32_t *p, size_t i) {
uint32_t k;
k = 1u << (i & 31);
if (p[i >> 5] & k) return true;
if (p[i >> 5] & k)
return true;
p[i >> 5] |= k;
return false;
}
@ -663,7 +681,8 @@ __funline bool Bts(uint32_t *p, size_t i) {
static void Dive(char **makefile, uint32_t *visited, unsigned id) {
int i;
for (i = FindFirstFromEdge(id); i < edges.i && edges.p[i].from == id; ++i) {
if (Bts(visited, edges.p[i].to)) continue;
if (Bts(visited, edges.p[i].to))
continue;
Appendw(makefile, READ32LE(" \\\n\t"));
Appends(makefile, names + sauces[edges.p[i].to].name);
Dive(makefile, visited, edges.p[i].to);
@ -681,8 +700,10 @@ static char *Explore(void) {
visited = Malloc(visilen * sizeof(*visited));
for (i = 0; i < sources.i; ++i) {
path = names + sauces[i].name;
if (!IsObjectSource(path)) continue;
if (startswith(path, genroot)) continue;
if (!IsObjectSource(path))
continue;
if (startswith(path, genroot))
continue;
Appendw(&makefile, '\n');
Appends(&makefile, buildroot);
Appends(&makefile, StripExt(buf, path));
@ -707,7 +728,8 @@ int main(int argc, char *argv[]) {
ShowCrashReports();
#endif
prog = argv[0];
if (!prog) prog = "mkdeps";
if (!prog)
prog = "mkdeps";
GetOpts(argc, argv);
LoadRelationships(argc, argv);
Crunch();

View file

@ -35,7 +35,8 @@ int main(int argc, char *argv[]) {
int (*mkdirp)(const char *, unsigned) = mkdir;
prog = argv[0];
if (!prog) prog = "mkdir";
if (!prog)
prog = "mkdir";
while ((i = getopt(argc, argv, "hpm:")) != -1) {
switch (i) {

View file

@ -45,13 +45,17 @@ static wontreturn void DieSys(const char *thing) {
int main(int argc, char *argv[]) {
const char *prog = program_invocation_short_name;
if (argc == 1) Die(prog, "missing argument");
if (argc != 2) Die(prog, "too many arguments");
if (argc == 1)
Die(prog, "missing argument");
if (argc != 2)
Die(prog, "too many arguments");
char *template = argv[1];
char *substring = strstr(template, "XXXXXXXXXXXXX");
if (!substring) Die(prog, "template missing XXXXXXXXXXXXX substring");
if (!substring)
Die(prog, "template missing XXXXXXXXXXXXX substring");
uint64_t w;
if (getrandom(&w, 8, 0) != 8) DieSys("getrandom");
if (getrandom(&w, 8, 0) != 8)
DieSys("getrandom");
for (int i = 0; i < 13; ++i) {
substring[i] = "0123456789abcdefghijklmnopqrstuvwxyz"[w % 36];
w /= 36;

View file

@ -69,7 +69,8 @@ wontreturn void Die(const char *path, const char *reason) {
wontreturn void SysDie(const char *path, const char *func) {
const char *errstr;
if (!(errstr = _strerdoc(errno))) errstr = "EUNKNOWN";
if (!(errstr = _strerdoc(errno)))
errstr = "EUNKNOWN";
tinyprint(2, path, ": ", func, ": ", errstr, "\n", NULL);
exit(1);
}
@ -159,8 +160,10 @@ char *Join(const char *a, const char *b) {
void Mv(char *src, char *dst) {
ssize_t rc;
const char *d;
if (strlen(src) + 1 > PATH_MAX) _Exit(2);
if (strlen(dst) + 1 > PATH_MAX) _Exit(2);
if (strlen(src) + 1 > PATH_MAX)
_Exit(2);
if (strlen(dst) + 1 > PATH_MAX)
_Exit(2);
basename(src);
basename(dst);
if (IsDirectory(src)) {
@ -212,9 +215,11 @@ void Mv(char *src, char *dst) {
int main(int argc, char *argv[]) {
int i;
prog = argv[0];
if (!prog) prog = "mv";
if (!prog)
prog = "mv";
GetOpts(argc, argv);
if (argc - optind < 2) PrintUsage(1, 2);
if (argc - optind < 2)
PrintUsage(1, 2);
for (i = optind; i < argc - 1; ++i) {
Mv(argv[i], argv[argc - 1]);
}

View file

@ -130,9 +130,12 @@ static void GetOpts(int argc, char *argv[]) {
static int PhdrFlagsToProt(Elf64_Word flags) {
int prot = PROT_NONE;
if (flags & PF_R) prot |= PROT_READ;
if (flags & PF_W) prot |= PROT_WRITE;
if (flags & PF_X) prot |= PROT_EXEC;
if (flags & PF_R)
prot |= PROT_READ;
if (flags & PF_W)
prot |= PROT_WRITE;
if (flags & PF_X)
prot |= PROT_EXEC;
return prot;
}
@ -163,11 +166,13 @@ static void ValidateMachoSection(const char *inpath, //
bool found_pagezero;
bool found_unixthread;
struct MachoLoadCommand *cmd;
if (!shdr) return;
if (!shdr)
return;
if (elf->e_machine != EM_NEXGEN32E) {
Die(inpath, ".macho section only supported for ELF x86_64");
}
if (!macho) Die(inpath, "corrupted .macho section content");
if (!macho)
Die(inpath, "corrupted .macho section content");
if (shdr->sh_size < sizeof(struct MachoHeader)) {
Die(inpath, ".macho section too small for mach-o header");
}
@ -349,10 +354,14 @@ static void HandleElf(const char *inpath, Elf64_Ehdr *elf, size_t esize) {
elf->e_shentsize = 0;
for (maxoff = i = 0; i < elf->e_phnum; ++i) {
phdr = GetElfProgramHeaderAddress(elf, esize, i);
if (!phdr) Die(inpath, "corrupted elf header");
if (phdr->p_type == PT_INTERP) Die(inpath, "PT_INTERP isn't supported");
if (phdr->p_type == PT_DYNAMIC) Die(inpath, "PT_DYNAMIC isn't supported");
if (!phdr->p_filesz) continue;
if (!phdr)
Die(inpath, "corrupted elf header");
if (phdr->p_type == PT_INTERP)
Die(inpath, "PT_INTERP isn't supported");
if (phdr->p_type == PT_DYNAMIC)
Die(inpath, "PT_DYNAMIC isn't supported");
if (!phdr->p_filesz)
continue;
maxoff = MAX(maxoff, phdr->p_offset + phdr->p_filesz);
if (macho && phdr->p_type == PT_LOAD) {
if (!(loadsegment = GetNextMachoLoadSegment(&loadcommand, &loadcount))) {
@ -417,7 +426,8 @@ static void HandleInput(const char *inpath) {
int main(int argc, char *argv[]) {
int i;
prog = argv[0];
if (!prog) prog = "objbincopy";
if (!prog)
prog = "objbincopy";
GetOpts(argc, argv);
if ((outfd = creat(outpath, 0755)) == -1) {
DieSys(outpath);

View file

@ -160,7 +160,8 @@ static wontreturn void Die(const char *path, const char *reason) {
static wontreturn void SysExit(const char *path, const char *func) {
const char *errstr;
if (!(errstr = _strerrno(errno))) errstr = "EUNKNOWN";
if (!(errstr = _strerrno(errno)))
errstr = "EUNKNOWN";
tinyprint(2, path, ": ", func, " failed with ", errstr, "\n", NULL);
exit(1);
}
@ -414,8 +415,10 @@ static void IndexSections(struct Package *pkg, struct Object *obj) {
static enum SectionKind ClassifySection(struct Package *pkg, struct Object *obj,
uint8_t type, Elf64_Section shndx) {
if (shndx == SHN_ABS) return kOther;
if (type == STT_COMMON) return kBss;
if (shndx == SHN_ABS)
return kOther;
if (type == STT_COMMON)
return kBss;
return pkg->sections.p[obj->section_offset + shndx].kind;
}
@ -476,10 +479,14 @@ static void LoadPriviligedRefsToUndefs(struct Package *pkg,
}
erela = rela + shdr->sh_size / sizeof(*rela);
for (; rela < erela; ++rela) {
if (!ELF64_R_TYPE(rela->r_info)) continue;
if (!(x = ELF64_R_SYM(rela->r_info))) continue;
if (x > obj->symcount) Die("error", "elf overflow");
if (obj->syms[x].st_shndx) continue; // symbol is defined
if (!ELF64_R_TYPE(rela->r_info))
continue;
if (!(x = ELF64_R_SYM(rela->r_info)))
continue;
if (x > obj->symcount)
Die("error", "elf overflow");
if (obj->syms[x].st_shndx)
continue; // symbol is defined
if (ELF64_ST_BIND(obj->syms[x].st_info) != STB_WEAK &&
ELF64_ST_BIND(obj->syms[x].st_info) != STB_GLOBAL) {
tinyprint(2, "warning: undefined symbol not global\n", NULL);
@ -526,7 +533,8 @@ static void OpenObject(struct Package *pkg, struct Object *obj, int oid) {
}
static void CloseObject(struct Object *obj) {
if (munmap(obj->elf, obj->size)) notpossible;
if (munmap(obj->elf, obj->size))
notpossible;
}
static void LoadObjects(struct Package *pkg) {
@ -567,14 +575,18 @@ static bool FindSymbol(const char *name, struct Package *pkg,
size_t i;
struct Symbol *sym;
if ((sym = BisectSymbol(pkg, name))) {
if (out_sym) *out_sym = sym;
if (out_pkg) *out_pkg = pkg;
if (out_sym)
*out_sym = sym;
if (out_pkg)
*out_pkg = pkg;
return true;
}
for (i = 0; i < directdeps->i; ++i) {
if ((sym = BisectSymbol(directdeps->p[i], name))) {
if (out_sym) *out_sym = sym;
if (out_pkg) *out_pkg = directdeps->p[i];
if (out_sym)
*out_sym = sym;
if (out_pkg)
*out_pkg = directdeps->p[i];
return true;
}
}
@ -587,7 +599,8 @@ static void CheckStrictDeps(struct Package *pkg, struct Packages *deps) {
struct Symbol *undef;
for (i = 0; i < pkg->undefs.i; ++i) {
undef = &pkg->undefs.p[i];
if (undef->bind_ == STB_WEAK) continue;
if (undef->bind_ == STB_WEAK)
continue;
if (!FindSymbol(pkg->strings.p + undef->name, pkg, deps, NULL, NULL)) {
tinyprint(2, pkg->strings.p + pkg->path, ": undefined symbol '",
pkg->strings.p + undef->name, "' (",
@ -621,7 +634,8 @@ static void CheckYourPrivilege(struct Package *pkg, struct Packages *deps) {
++f;
}
}
if (f) exit(1);
if (f)
exit(1);
}
static bool IsSymbolDirectlyReachable(struct Package *pkg,
@ -639,7 +653,8 @@ static void Package(int argc, char *argv[], struct Package *pkg,
CheckYourPrivilege(pkg, deps);
WritePackage(pkg);
for (i = 0; i < deps->i; ++i) {
if (munmap(deps->p[i]->addr, deps->p[i]->size)) notpossible;
if (munmap(deps->p[i]->addr, deps->p[i]->size))
notpossible;
}
}

View file

@ -300,7 +300,8 @@ static void CheckPe(const char *path, char *map, size_t size) {
Die(exe->path, "PE ImportLookupTable and ImportAddressTable should "
"have identical content");
}
if (!*ilt) break;
if (!*ilt)
break;
CheckPeImportByName(exe, *ilt);
}
}
@ -317,12 +318,17 @@ int main(int argc, char *argv[]) {
#endif
for (i = 1; i < argc; ++i) {
path = argv[i];
if ((fd = open(path, O_RDONLY)) == -1) DieSys(path);
if ((size = lseek(fd, 0, SEEK_END)) == -1) DieSys(path);
if ((fd = open(path, O_RDONLY)) == -1)
DieSys(path);
if ((size = lseek(fd, 0, SEEK_END)) == -1)
DieSys(path);
map = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
if (map == MAP_FAILED) DieSys(path);
if (map == MAP_FAILED)
DieSys(path);
CheckPe(path, map, size);
if (munmap(map, size)) DieSys(path);
if (close(fd)) DieSys(path);
if (munmap(map, size))
DieSys(path);
if (close(fd))
DieSys(path);
}
}

View file

@ -202,8 +202,10 @@ long ParseSiSize(const char *s, long b) {
}
void AddPromise(const char *s) {
while (isspace(*s)) ++s;
if (!*s) return;
while (isspace(*s))
++s;
if (!*s)
return;
if (*g_promises) {
strlcat(g_promises, " ", sizeof(g_promises));
}
@ -358,9 +360,12 @@ void NormalizeFileDescriptors(void) {
int SetLimit(int r, long lo, long hi) {
struct rlimit old;
struct rlimit lim = {lo, hi};
if (r < 0 || r >= RLIM_NLIMITS) return 0;
if (!setrlimit(r, &lim)) return 0;
if (getrlimit(r, &old)) return -1;
if (r < 0 || r >= RLIM_NLIMITS)
return 0;
if (!setrlimit(r, &lim))
return 0;
if (getrlimit(r, &old))
return -1;
lim.rlim_cur = MIN(lim.rlim_cur, old.rlim_max);
lim.rlim_max = MIN(lim.rlim_max, old.rlim_max);
return setrlimit(r, &lim);
@ -373,8 +378,10 @@ static int GetBaseCpuFreqMhz(void) {
int SetCpuLimit(int secs) {
#ifdef __x86_64__
int mhz, lim;
if (secs <= 0) return 0;
if (!(mhz = GetBaseCpuFreqMhz())) return eopnotsupp();
if (secs <= 0)
return 0;
if (!(mhz = GetBaseCpuFreqMhz()))
return eopnotsupp();
lim = ceil(3100. / mhz * secs);
return SetLimit(RLIMIT_CPU, lim, lim);
#else
@ -464,8 +471,10 @@ enum Strategy GetStrategy(void) {
void ApplyFilesystemPolicy(unsigned long ipromises) {
const char *p;
if (g_dontunveil) return;
if (!SupportsLandlock()) return;
if (g_dontunveil)
return;
if (!SupportsLandlock())
return;
Unveil(g_prog, "rx");
@ -587,7 +596,8 @@ void ApplyFilesystemPolicy(unsigned long ipromises) {
void DropCapabilities(void) {
int e, i;
if (!IsLinux()) return;
if (!IsLinux())
return;
for (e = errno, i = 0;; ++i) {
if (prctl(PR_CAPBSET_DROP, i) == -1) {
if (errno == EINVAL || errno == EPERM) {
@ -603,16 +613,21 @@ void DropCapabilities(void) {
bool FileExistsAndIsNewerThan(const char *filepath, const char *thanpath) {
struct stat st1, st2;
if (stat(filepath, &st1) == -1) return false;
if (stat(thanpath, &st2) == -1) return false;
if (st1.st_mtim.tv_sec < st2.st_mtim.tv_sec) return false;
if (st1.st_mtim.tv_sec > st2.st_mtim.tv_sec) return true;
if (stat(filepath, &st1) == -1)
return false;
if (stat(thanpath, &st2) == -1)
return false;
if (st1.st_mtim.tv_sec < st2.st_mtim.tv_sec)
return false;
if (st1.st_mtim.tv_sec > st2.st_mtim.tv_sec)
return true;
return st1.st_mtim.tv_nsec >= st2.st_mtim.tv_nsec;
}
int Extract(const char *from, const char *to, int mode) {
int fdin, fdout;
if ((fdin = open(from, O_RDONLY)) == -1) return -1;
if ((fdin = open(from, O_RDONLY)) == -1)
return -1;
if ((fdout = creat(to, mode)) == -1) {
close(fdin);
return -1;
@ -627,7 +642,8 @@ int Extract(const char *from, const char *to, int mode) {
int CountEnviron(char **ep) {
int res = 0;
while (*ep++) ++res;
while (*ep++)
++res;
return res;
}

View file

@ -92,7 +92,8 @@ static int OnFile(const char *fpath, const struct stat *st, int typeflag,
rc = unlink(fpath);
}
if (rc == -1) {
if (force && errno == ENOENT) return 0;
if (force && errno == ENOENT)
return 0;
perror(fpath);
exit(1);
}
@ -110,7 +111,8 @@ static void Remove(const char *path) {
rc = nftw(path, OnFile, 128, FTW_PHYS | FTW_DEPTH);
} else {
if (lstat(path, &st)) {
if (force && errno == ENOENT) return;
if (force && errno == ENOENT)
return;
perror(path);
exit(1);
}
@ -125,7 +127,8 @@ static void Remove(const char *path) {
}
}
if (rc == -1) {
if (force && errno == ENOENT) return;
if (force && errno == ENOENT)
return;
perror(path);
exit(1);
}
@ -134,7 +137,8 @@ static void Remove(const char *path) {
int main(int argc, char *argv[]) {
int i;
prog = argv[0];
if (!prog) prog = "rm";
if (!prog)
prog = "rm";
GetOpts(argc, argv);
if (optind == argc) {
tinyprint(2, prog, ": missing operand\n", NULL);

View file

@ -57,11 +57,13 @@ static wontreturn void DieOom(void) {
}
static void Appends(char **b, const char *s) {
if (appends(b, s) == -1) DieOom();
if (appends(b, s) == -1)
DieOom();
}
static void Appendd(char **b, const void *p, size_t n) {
if (appendd(b, p, n) == -1) DieOom();
if (appendd(b, p, n) == -1)
DieOom();
}
size_t GetFdSize(int fd) {
@ -84,10 +86,12 @@ void Process(const char *p, const char *pe, const char *path, bool isheader) {
p2 = memchr(p, '\n', pe - p);
p2 = p2 ? p2 + 1 : pe;
if (LOOKINGAT(p, pe, "#if")) {
if (isheader && !level++) continue;
if (isheader && !level++)
continue;
}
if (LOOKINGAT(p, pe, "#endif")) {
if (isheader && !--level) continue;
if (isheader && !--level)
continue;
}
if (LOOKINGAT(p, pe, "/* clang-format off */")) {
noformat = true;
@ -114,26 +118,37 @@ void Visit(const char *path) {
char *map;
size_t size;
bool isheader;
if (!endswith(path, ".h") && !endswith(path, ".inc")) return;
if (endswith(path, ".internal.h")) return;
if (endswith(path, "/internal.h")) return;
if (endswith(path, ".internal.inc")) return;
if (endswith(path, "/internal.inc")) return;
if (startswith(path, "libc/isystem/")) return;
if (!endswith(path, ".h") && !endswith(path, ".inc"))
return;
if (endswith(path, ".internal.h"))
return;
if (endswith(path, "/internal.h"))
return;
if (endswith(path, ".internal.inc"))
return;
if (endswith(path, "/internal.inc"))
return;
if (startswith(path, "libc/isystem/"))
return;
isheader = endswith(path, ".h");
if (isheader && isinterned(visited, path)) return;
if (isheader && isinterned(visited, path))
return;
Appends(&output, "\n\f\n/*!BEGIN ");
Appends(&output, path);
Appends(&output, " */\n\n");
intern(visited, path);
if ((fd = open(path, O_RDONLY)) == -1) DieSys(path);
if ((fd = open(path, O_RDONLY)) == -1)
DieSys(path);
if ((size = GetFdSize(fd))) {
map = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0);
if (map == MAP_FAILED) DieSys(path);
if (map == MAP_FAILED)
DieSys(path);
Process(map, map + size, path, isheader);
if (munmap(map, size)) DieSys(path);
if (munmap(map, size))
DieSys(path);
}
if (close(fd)) DieSys(path);
if (close(fd))
DieSys(path);
}
int main(int argc, char *argv[]) {
@ -141,7 +156,8 @@ int main(int argc, char *argv[]) {
const char *src;
struct GetArgs ga;
prog = argv[0];
if (!prog) prog = "rollup";
if (!prog)
prog = "rollup";
visited = newinterner();
Appends(&output, "#ifndef COSMOPOLITAN_H_\n");
Appends(&output, "#define COSMOPOLITAN_H_\n");

View file

@ -268,7 +268,8 @@ void RelayRequest(void) {
rc = read(13, buf, PIPE_BUF);
CHECK_NE(-1, rc);
have = rc;
if (!rc) break;
if (!rc)
break;
transferred += have;
for (i = 0; i < have; i += rc) {
rc = mbedtls_ssl_write(&ezssl, buf + i, have - i);
@ -288,9 +289,11 @@ void RelayRequest(void) {
bool Recv(char *p, int n) {
int i, rc;
for (i = 0; i < n; i += rc) {
do rc = mbedtls_ssl_read(&ezssl, p + i, n - i);
do
rc = mbedtls_ssl_read(&ezssl, p + i, n - i);
while (rc == MBEDTLS_ERR_SSL_WANT_READ);
if (!rc) return false;
if (!rc)
return false;
if (rc < 0) {
if (rc == MBEDTLS_ERR_NET_CONN_RESET) {
EzTlsDie("connection reset", rc);
@ -334,10 +337,12 @@ int ReadResponse(void) {
mbedtls_ssl_close_notify(&ezssl);
break;
} else if (msg[4] == kRunitStdout || msg[4] == kRunitStderr) {
if (!Recv(msg, 4)) goto TruncatedMessage;
if (!Recv(msg, 4))
goto TruncatedMessage;
int n = READ32BE(msg);
char *s = malloc(n);
if (!Recv(s, n)) goto TruncatedMessage;
if (!Recv(s, n))
goto TruncatedMessage;
write(2, s, n);
free(s);
} else {
@ -356,7 +361,8 @@ int RunOnHost(char *spec) {
int err;
char *p;
for (p = spec; *p; ++p) {
if (*p == ':') *p = ' ';
if (*p == ':')
*p = ' ';
}
int got =
sscanf(spec, "%100s %hu %hu", g_hostname, &g_runitdport, &g_sshport);
@ -365,7 +371,8 @@ int RunOnHost(char *spec) {
fprintf(stderr, "what on earth %#s -> %d\n", spec, got);
exit(1);
}
if (!strchr(g_hostname, '.')) strcat(g_hostname, ".test.");
if (!strchr(g_hostname, '.'))
strcat(g_hostname, ".test.");
DEBUGF("connecting to %s port %d", g_hostname, g_runitdport);
for (;;) {
Connect();
@ -373,7 +380,8 @@ int RunOnHost(char *spec) {
struct timespec start = timespec_real();
err = EzHandshake2();
handshake_latency = timespec_tomicros(timespec_sub(timespec_real(), start));
if (!err) break;
if (!err)
break;
WARNF("handshake with %s:%d failed -0x%04x (%s)", //
g_hostname, g_runitdport, err, GetTlsError(err));
close(g_sock);
@ -446,22 +454,27 @@ int SpawnSubprocesses(int argc, char *argv[]) {
// wait for children to terminate
for (;;) {
if ((pid = wait(&ws)) == -1) {
if (errno == EINTR) continue;
if (errno == ECHILD) break;
if (errno == EINTR)
continue;
if (errno == ECHILD)
break;
FATALF("wait failed");
}
for (i = 0; i < argc; ++i) {
if (pids[i] != pid) continue;
if (pids[i] != pid)
continue;
if (WIFEXITED(ws)) {
if (WEXITSTATUS(ws)) {
INFOF("%s exited with %d", argv[i], WEXITSTATUS(ws));
} else {
DEBUGF("%s exited with %d", argv[i], WEXITSTATUS(ws));
}
if (!exitcode) exitcode = WEXITSTATUS(ws);
if (!exitcode)
exitcode = WEXITSTATUS(ws);
} else {
INFOF("%s terminated with %s", argv[i], strsignal(WTERMSIG(ws)));
if (!exitcode) exitcode = 128 + WTERMSIG(ws);
if (!exitcode)
exitcode = 128 + WTERMSIG(ws);
}
break;
}

View file

@ -515,8 +515,10 @@ void *ClientWorker(void *arg) {
int i = 0;
char *args[8] = {0};
args[i++] = client->tmpexepath;
if (use_strace) args[i++] = "--strace";
if (use_ftrace) args[i++] = "--ftrace";
if (use_strace)
args[i++] = "--strace";
if (use_ftrace)
args[i++] = "--ftrace";
// run program, tee'ing stderr to both log and client
DEBUF("spawning %s", client->tmpexepath);
@ -776,11 +778,14 @@ int Serve(void) {
}
void Daemonize(void) {
if (fork() > 0) _exit(0);
if (fork() > 0)
_exit(0);
setsid();
if (fork() > 0) _exit(0);
if (fork() > 0)
_exit(0);
dup2(g_bogusfd, 0);
if (!g_sendready) dup2(g_bogusfd, 1);
if (!g_sendready)
dup2(g_bogusfd, 1);
close(2);
open(kLogFile, O_CREAT | O_WRONLY | O_APPEND | O_CLOEXEC, 0644);
extern long __klog_handle;
@ -796,7 +801,8 @@ int main(int argc, char *argv[]) {
signal(SIGPIPE, SIG_IGN);
setenv("TZ", "PST", true);
gethostname(g_hostname, sizeof(g_hostname));
for (int i = 3; i < 16; ++i) close(i);
for (int i = 3; i < 16; ++i)
close(i);
errno = 0;
// poll()'ing /dev/null stdin file descriptor on xnu returns POLLNVAL?!
if (IsWindows()) {
@ -805,7 +811,8 @@ int main(int argc, char *argv[]) {
g_bogusfd = open("/dev/zero", O_RDONLY | O_CLOEXEC);
}
mkdir("o", 0700);
if (g_daemonize) Daemonize();
if (g_daemonize)
Daemonize();
Serve();
free(g_psk);
#ifdef MODE_DBG

View file

@ -102,7 +102,8 @@ static bool IsSupportedPath(const char *path) {
for (i = 0;; ++i) {
switch (path[i]) {
case 0:
if (i) return true;
if (i)
return true;
// fallthrough
case '\r':
case '\n':
@ -137,8 +138,10 @@ static bool ProduceDigest(const char *path, FILE *f) {
char hexdigest[65];
char mode[2] = {g_mode};
unsigned char digest[32];
if (!IsSupportedPath(path)) return false;
if (!GetDigest(path, f, digest)) return false;
if (!IsSupportedPath(path))
return false;
if (!GetDigest(path, f, digest))
return false;
hexpcpy(hexdigest, digest, 32);
tinyprint(1, hexdigest, " ", mode, path, "\n", NULL);
return true;
@ -152,17 +155,24 @@ static bool CheckDigests(const char *path, FILE *f) {
unsigned char wantdigest[32], gotdigest[32];
char buf[64 + 2 + PATH_MAX + 1 + 1], *p;
for (line = 0; fgets(buf, sizeof(buf), f); ++line) {
if (!*chomp(buf)) continue;
if (!*chomp(buf))
continue;
for (p = buf, i = 0; i < 32; ++i) {
if ((a = kHexToInt[*p++ & 255]) == -1) goto InvalidLine;
if ((b = kHexToInt[*p++ & 255]) == -1) goto InvalidLine;
if ((a = kHexToInt[*p++ & 255]) == -1)
goto InvalidLine;
if ((b = kHexToInt[*p++ & 255]) == -1)
goto InvalidLine;
wantdigest[i] = a << 4 | b;
}
if (*p++ != ' ') goto InvalidLine;
if (!IsModeCharacter(*p++)) goto InvalidLine;
if (*p++ != ' ')
goto InvalidLine;
if (!IsModeCharacter(*p++))
goto InvalidLine;
path2 = p;
if (!*path2) goto InvalidLine;
if (!IsSupportedPath(path2)) continue;
if (!*path2)
goto InvalidLine;
if (!IsSupportedPath(path2))
continue;
if ((f2 = fopen(path2, "rb"))) {
if (GetDigest(path2, f2, gotdigest)) {
if (!memcmp(wantdigest, gotdigest, 32)) {
@ -210,7 +220,8 @@ int main(int argc, char *argv[]) {
FILE *f;
bool k = true;
prog = argv[0];
if (!prog) prog = "sha256sum";
if (!prog)
prog = "sha256sum";
GetOpts(argc, argv);
if (optind == argc) {
f = stdin;

View file

@ -26,9 +26,11 @@
int main(int argc, char *argv[]) {
long x, sum = 0;
if (argc == 2 && !strcmp(argv[1], "-x")) {
while (scanf("%lx", &x) > 0) sum += x;
while (scanf("%lx", &x) > 0)
sum += x;
} else {
while (scanf("%ld", &x) > 0) sum += x;
while (scanf("%ld", &x) > 0)
sum += x;
}
printf("%,ld\n", sum);
return 0;

View file

@ -29,7 +29,8 @@ int main(int argc, char *argv[]) {
const char *prog;
prog = argv[0];
if (!prog) prog = "touch";
if (!prog)
prog = "touch";
if (argc < 2) {
tinyprint(2, prog, ": missing operand\n", NULL);

View file

@ -91,10 +91,12 @@ int main(int argc, char *argv[]) {
p++;
continue;
}
if (i > 1) errx(1, "<stdin>:%zu - too many fields", count);
if (i > 1)
errx(1, "<stdin>:%zu - too many fields", count);
fields[i++] = p;
}
if (i != 2) errx(1, "<stdin>:%zu - malformed line", count);
if (i != 2)
errx(1, "<stdin>:%zu - malformed line", count);
if (unveil(fields[0], fields[1]) == -1)
err(1, "unveil(%s, %s)", fields[0], fields[1]);
@ -104,7 +106,8 @@ int main(int argc, char *argv[]) {
err(1, "getline");
}
if (unveil(NULL, NULL) == -1) err(1, "unveil(NULL, NULL)");
if (unveil(NULL, NULL) == -1)
err(1, "unveil(NULL, NULL)");
__sys_execve(prog, argv + optind, environ);
err(127, "execve");

View file

@ -38,7 +38,8 @@ static wontreturn void PrintUsage(int rc, int fd) {
int main(int argc, char *argv[]) {
prog = argv[0];
if (!prog) prog = "verynice";
if (!prog)
prog = "verynice";
int opt;
while ((opt = getopt(argc, argv, "h")) != -1) {

View file

@ -51,7 +51,8 @@ static wontreturn void Die(const char *path, const char *reason) {
static wontreturn void SysDie(const char *path, const char *func) {
const char *errstr;
if (!(errstr = _strerdoc(errno))) errstr = "EUNKNOWN";
if (!(errstr = _strerdoc(errno)))
errstr = "EUNKNOWN";
tinyprint(2, path, ": ", func, " failed with ", errstr, "\n", NULL);
exit(1);
}
@ -133,7 +134,8 @@ static void CopyZip(void) {
eocd = ineof - kZipCdirHdrMinSize;
stop = MAX(eocd - 65536, inmap);
for (;; --eocd) {
if (eocd < stop) return;
if (eocd < stop)
return;
if (READ32LE(eocd) == kZipCdirHdrMagic) {
if (IsZipEocd32(inmap, insize, eocd - inmap) != kZipOk) {
Die(inpath, "found bad eocd record");
@ -217,7 +219,8 @@ int main(int argc, char *argv[]) {
ShowCrashReports();
#endif
prog = argv[0];
if (!prog) prog = "apelink";
if (!prog)
prog = "apelink";
GetOpts(argc, argv);
if ((infd = open(inpath, O_RDONLY)) == -1) {
SysDie(inpath, "open");

View file

@ -189,9 +189,11 @@ void ProcessFile(struct ElfWriter *elf, const char *path) {
name = name_;
} else {
name = path;
if (basenamify_) name = basename(gc(xstrdup(name)));
if (basenamify_)
name = basename(gc(xstrdup(name)));
name = StripComponents(name, strip_components_);
if (path_prefix_) name = gc(xjoinpaths(path_prefix_, name));
if (path_prefix_)
name = gc(xjoinpaths(path_prefix_, name));
}
if (S_ISDIR(st.st_mode)) {
st.st_size = 0;
@ -225,10 +227,12 @@ void zipobj(int argc, char **argv) {
struct ElfWriter *elf;
unassert(argc < UINT16_MAX / 3 - 64); /* ELF 64k section limit */
GetOpts(&argc, &argv);
for (i = 0; i < argc; ++i) CheckFilenameKosher(argv[i]);
for (i = 0; i < argc; ++i)
CheckFilenameKosher(argv[i]);
elf = elfwriter_open(outpath_, 0644, arch_);
elfwriter_cargoculting(elf);
for (i = 0; i < argc; ++i) ProcessFile(elf, argv[i]);
for (i = 0; i < argc; ++i)
ProcessFile(elf, argv[i]);
PullEndOfCentralDirectoryIntoLinkage(elf);
elfwriter_close(elf);
}