ATF_TC_BODY(path_branch_path, tc) { struct test { const char *in; const char *branch; } tests[] = { { ".", "." }, { "foo", "." }, { "foo/bar", "foo" }, { "/foo", "/" }, { "/foo/bar", "/foo" }, { NULL, NULL }, }; struct test *t; for (t = &tests[0]; t->in != NULL; t++) { atf_fs_path_t p, bp; printf("Input : %s\n", t->in); printf("Expected output: %s\n", t->branch); RE(atf_fs_path_init_fmt(&p, "%s", t->in)); RE(atf_fs_path_branch_path(&p, &bp)); printf("Output : %s\n", atf_fs_path_cstring(&bp)); ATF_REQUIRE(strcmp(atf_fs_path_cstring(&bp), t->branch) == 0); atf_fs_path_fini(&bp); atf_fs_path_fini(&p); printf("\n"); } }
static atf_error_t argv0_to_dir(const char *argv0, atf_fs_path_t *dir) { atf_error_t err; atf_fs_path_t temp; err = atf_fs_path_init_fmt(&temp, "%s", argv0); if (atf_is_error(err)) goto out; err = atf_fs_path_branch_path(&temp, dir); atf_fs_path_fini(&temp); out: return err; }
static atf_error_t srcdir_strip_libtool(atf_fs_path_t *srcdir) { atf_error_t err; atf_fs_path_t parent; err = atf_fs_path_branch_path(srcdir, &parent); if (atf_is_error(err)) goto out; atf_fs_path_fini(srcdir); *srcdir = parent; INV(!atf_is_error(err)); out: return err; }