mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-07 10:20:29 +00:00
Move most init back into SetUpOnce
This commit is contained in:
parent
5ea567697d
commit
2869605486
1 changed files with 32 additions and 33 deletions
|
@ -35,44 +35,43 @@
|
||||||
#include "libc/testlib/testlib.h"
|
#include "libc/testlib/testlib.h"
|
||||||
|
|
||||||
static char *self;
|
static char *self;
|
||||||
static bool skiptests, skiparg0;
|
static bool loaded, skiptests, skiparg0;
|
||||||
|
|
||||||
void SetUpOnce(void) {
|
void SetUpOnce(void) {
|
||||||
testlib_enable_tmp_setup_teardown();
|
testlib_enable_tmp_setup_teardown();
|
||||||
|
if (IsMetal()) {
|
||||||
|
skiptests = true;
|
||||||
|
} else if (IsWindows()) {
|
||||||
|
/* do all tests */
|
||||||
|
} else if (!loaded) {
|
||||||
|
ASSERT_STRNE(self, "");
|
||||||
|
ASSERT_SYS(0, 3, open(self, O_RDONLY));
|
||||||
|
char buf[8];
|
||||||
|
ASSERT_SYS(0, 8, pread(3, buf, 8, 0));
|
||||||
|
ASSERT_SYS(0, 0, close(3));
|
||||||
|
if (READ64LE(buf) != READ64LE("MZqFpD='") &&
|
||||||
|
READ64LE(buf) != READ64LE("jartsr='") &&
|
||||||
|
READ64LE(buf) != READ64LE("APEDBG='")) {
|
||||||
|
// GetProgramExecutableName does not work reliably for assimilated
|
||||||
|
// OpenBSD or XNU binaries.
|
||||||
|
skiptests = IsOpenbsd() || (IsXnu() && !IsXnuSilicon());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
skiparg0 =
|
||||||
|
!(IsXnuSilicon() || (getauxval(AT_FLAGS) & AT_FLAGS_PRESERVE_ARGV0));
|
||||||
|
}
|
||||||
|
fprintf(stderr, loaded ? "loaded\n" : "not loaded\n");
|
||||||
|
if (skiptests) {
|
||||||
|
fprintf(stderr, "skipping most GetProgramExecutableName tests\n");
|
||||||
|
} else if (skiparg0) {
|
||||||
|
fprintf(stderr, "skipping argv[0] tests\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((__constructor__)) static void Child(int argc, char *argv[]) {
|
__attribute__((__constructor__)) static void Child(int argc, char *argv[]) {
|
||||||
if (argc < 2 || strcmp(argv[1], "Child")) {
|
loaded = !!__program_executable_name;
|
||||||
bool loaded = !!__program_executable_name;
|
self = GetProgramExecutableName();
|
||||||
self = GetProgramExecutableName();
|
if (argc >= 2 && !strcmp(argv[1], "Child")) {
|
||||||
if (IsMetal()) {
|
|
||||||
skiptests = true;
|
|
||||||
} else if (IsWindows()) {
|
|
||||||
/* do all tests */
|
|
||||||
} else if (!loaded) {
|
|
||||||
ASSERT_STRNE(self, "");
|
|
||||||
ASSERT_SYS(0, 3, open(self, O_RDONLY));
|
|
||||||
char buf[8];
|
|
||||||
ASSERT_SYS(0, 8, pread(3, buf, 8, 0));
|
|
||||||
ASSERT_SYS(0, 0, close(3));
|
|
||||||
if (READ64LE(buf) != READ64LE("MZqFpD='") &&
|
|
||||||
READ64LE(buf) != READ64LE("jartsr='") &&
|
|
||||||
READ64LE(buf) != READ64LE("APEDBG='")) {
|
|
||||||
// GetProgramExecutableName does not work reliably for assimilated
|
|
||||||
// OpenBSD or XNU binaries.
|
|
||||||
skiptests = IsOpenbsd() || (IsXnu() && !IsXnuSilicon());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
skiparg0 =
|
|
||||||
!(IsXnuSilicon() || (getauxval(AT_FLAGS) & AT_FLAGS_PRESERVE_ARGV0));
|
|
||||||
}
|
|
||||||
fprintf(stderr, loaded ? "loaded\n" : "not loaded\n");
|
|
||||||
if (skiptests) {
|
|
||||||
fprintf(stderr, "skipping most GetProgramExecutableName tests\n");
|
|
||||||
} else if (skiparg0) {
|
|
||||||
fprintf(stderr, "skipping argv[0] tests\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
int rc;
|
int rc;
|
||||||
if (!IsWindows()) {
|
if (!IsWindows()) {
|
||||||
rc = sys_chdir("/");
|
rc = sys_chdir("/");
|
||||||
|
@ -82,7 +81,7 @@ __attribute__((__constructor__)) static void Child(int argc, char *argv[]) {
|
||||||
if (rc) {
|
if (rc) {
|
||||||
exit(122);
|
exit(122);
|
||||||
}
|
}
|
||||||
if (strcmp(argv[2], GetProgramExecutableName())) {
|
if (strcmp(argv[2], self)) {
|
||||||
exit(123);
|
exit(123);
|
||||||
}
|
}
|
||||||
if (argc >= 4) {
|
if (argc >= 4) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue