diff options
Diffstat (limited to 'tools/regression/lib/libc')
37 files changed, 588 insertions, 2882 deletions
diff --git a/tools/regression/lib/libc/nss/mach b/tools/regression/lib/libc/nss/mach index d25d8d6..ab7ce24 100644 --- a/tools/regression/lib/libc/nss/mach +++ b/tools/regression/lib/libc/nss/mach @@ -11,7 +11,6 @@ antioche.antioche.eu.org boulder.tele.dk centaurus.4web.cz chur.math.ntnu.no -cnftp.bjpu.edu.cn console.netbsd.org cvs.fi.netbsd.org cvs.mikrolahti.fi diff --git a/tools/regression/lib/libc/nss/test-getaddr.c b/tools/regression/lib/libc/nss/test-getaddr.c index aae1605..f0729ec 100644 --- a/tools/regression/lib/libc/nss/test-getaddr.c +++ b/tools/regression/lib/libc/nss/test-getaddr.c @@ -67,22 +67,22 @@ IMPLEMENT_TEST_DATA(addrinfo) IMPLEMENT_TEST_FILE_SNAPSHOT(addrinfo) IMPLEMENT_2PASS_TEST(addrinfo) -static void +static void clone_addrinfo(struct addrinfo *dest, struct addrinfo const *src) { assert(dest != NULL); assert(src != NULL); - + memcpy(dest, src, sizeof(struct addrinfo)); if (src->ai_canonname != NULL) dest->ai_canonname = strdup(src->ai_canonname); - + if (src->ai_addr != NULL) { dest->ai_addr = (struct sockaddr *)malloc(src->ai_addrlen); assert(dest->ai_addr != NULL); memcpy(dest->ai_addr, src->ai_addr, src->ai_addrlen); } - + if (src->ai_next != NULL) { dest->ai_next = (struct addrinfo *)malloc( sizeof(struct addrinfo)); @@ -96,7 +96,7 @@ compare_addrinfo_(struct addrinfo *ai1, struct addrinfo *ai2) { if ((ai1 == NULL) || (ai2 == NULL)) return (-1); - + if ((ai1->ai_flags != ai2->ai_flags) || (ai1->ai_family != ai2->ai_family) || (ai1->ai_socktype != ai2->ai_socktype) || @@ -107,11 +107,11 @@ compare_addrinfo_(struct addrinfo *ai1, struct addrinfo *ai2) (((ai1->ai_canonname == NULL) || (ai2->ai_canonname == NULL)) && (ai1->ai_canonname != ai2->ai_canonname))) return (-1); - - if ((ai1->ai_canonname != NULL) && + + if ((ai1->ai_canonname != NULL) && (strcmp(ai1->ai_canonname, ai2->ai_canonname) != 0)) return (-1); - + if ((ai1->ai_addr != NULL) && (memcmp(ai1->ai_addr, ai2->ai_addr, ai1->ai_addrlen) != 0)) return (-1); @@ -122,17 +122,17 @@ compare_addrinfo_(struct addrinfo *ai1, struct addrinfo *ai2) return (compare_addrinfo_(ai1->ai_next, ai2->ai_next)); } -static int +static int compare_addrinfo(struct addrinfo *ai1, struct addrinfo *ai2, void *mdata) { int rv; - + if (debug) { printf("testing equality of 2 addrinfo structures\n"); } rv = compare_addrinfo_(ai1, ai2); - + if (debug) { if (rv == 0) printf("equal\n"); @@ -142,16 +142,16 @@ compare_addrinfo(struct addrinfo *ai1, struct addrinfo *ai2, void *mdata) printf("not equal\n"); } } - + return (rv); } -void +void free_addrinfo(struct addrinfo *ai) { if (ai == NULL) return; - + free(ai->ai_addr); free(ai->ai_canonname); free_addrinfo(ai->ai_next); @@ -159,9 +159,9 @@ free_addrinfo(struct addrinfo *ai) void sdump_addrinfo(struct addrinfo *ai, char *buffer, size_t buflen) -{ +{ int written, i; - + written = snprintf(buffer, buflen, "%d %d %d %d %d ", ai->ai_flags, ai->ai_family, ai->ai_socktype, ai->ai_protocol, ai->ai_addrlen); @@ -169,14 +169,14 @@ sdump_addrinfo(struct addrinfo *ai, char *buffer, size_t buflen) if (written > buflen) return; buflen -= written; - + written = snprintf(buffer, buflen, "%s ", ai->ai_canonname == NULL ? "(null)" : ai->ai_canonname); buffer += written; if (written > buflen) return; buflen -= written; - + if (ai->ai_addr == NULL) { written = snprintf(buffer, buflen, "(null)"); buffer += written; @@ -185,26 +185,26 @@ sdump_addrinfo(struct addrinfo *ai, char *buffer, size_t buflen) buflen -= written; } else { for (i = 0; i < ai->ai_addrlen; ++i ) { - written = snprintf(buffer, buflen, + written = snprintf(buffer, buflen, i + 1 != ai->ai_addrlen ? "%d." : "%d", ((unsigned char *)ai->ai_addr)[i]); buffer += written; if (written > buflen) return; buflen -= written; - + if (buflen == 0) return; - } + } } - + if (ai->ai_next != NULL) { written = snprintf(buffer, buflen, ":"); buffer += written; if (written > buflen) return; buflen -= written; - + sdump_addrinfo(ai->ai_next, buffer, buflen); } } @@ -224,12 +224,12 @@ static int addrinfo_read_snapshot_addr(char *addr, unsigned char *result, size_t len) { char *s, *ps, *ts; - + ps = addr; while ( (s = strsep(&ps, ".")) != NULL) { if (len == 0) return (-1); - + *result = (unsigned char)strtol(s, &ts, 10); ++result; if (*ts != '\0') @@ -265,7 +265,7 @@ addrinfo_read_snapshot_ai(struct addrinfo *ai, char *line) goto fin; break; case 4: - ai->ai_addrlen = (socklen_t)strtol(s, &ts, 10); + ai->ai_addrlen = (socklen_t)strtol(s, &ts, 10); if (*ts != '\0') goto fin; break; @@ -274,7 +274,7 @@ addrinfo_read_snapshot_ai(struct addrinfo *ai, char *line) ai->ai_canonname = strdup(s); assert(ai->ai_canonname != NULL); } - break; + break; case 6: if (strcmp(s, "(null)") != 0) { ai->ai_addr = (struct sockaddr *)malloc( @@ -284,7 +284,7 @@ addrinfo_read_snapshot_ai(struct addrinfo *ai, char *line) rv = addrinfo_read_snapshot_addr(s, (unsigned char *)ai->ai_addr, ai->ai_addrlen); - + if (rv != 0) goto fin; } @@ -294,18 +294,18 @@ addrinfo_read_snapshot_ai(struct addrinfo *ai, char *line) rv = -1; goto fin; }; - + ++i; } fin: - if ((i != 7) || (rv != 0)) { + if ((i != 7) || (rv != 0)) { free_addrinfo(ai); memset(ai, 0, sizeof(struct addrinfo)); return (-1); } - - return (0); + + return (0); } static int @@ -317,33 +317,33 @@ addrinfo_read_snapshot_func(struct addrinfo *ai, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + rv = 0; i = 0; ps = line; - + s = strsep(&ps, ":"); if (s == NULL) return (-1); - + rv = addrinfo_read_snapshot_ai(ai, s); if (rv != 0) return (-1); - + ai2 = ai; while ( (s = strsep(&ps, ":")) != NULL) { ai2->ai_next = (struct addrinfo *)malloc( sizeof(struct addrinfo)); assert(ai2->ai_next != NULL); memset(ai2->ai_next, 0, sizeof(struct addrinfo)); - + rv = addrinfo_read_snapshot_ai(ai2->ai_next, s); if (rv != 0) { - free_addrinfo(ai); + free_addrinfo(ai); return (-1); } - ai2 = ai2->ai_next; + ai2 = ai2->ai_next; } return (0); @@ -356,36 +356,36 @@ addrinfo_test_correctness(struct addrinfo *ai, void *mdata) printf("testing correctness with the following data:\n"); dump_addrinfo(ai); } - + if (ai == NULL) goto errfin; - + if (!((ai->ai_family >= 0) && (ai->ai_family < AF_MAX))) goto errfin; - + if ((ai->ai_socktype != 0) && (ai->ai_socktype != SOCK_STREAM) && (ai->ai_socktype != SOCK_DGRAM) && (ai->ai_socktype != SOCK_RAW)) goto errfin; - + if ((ai->ai_protocol != 0) && (ai->ai_protocol != IPPROTO_UDP) && (ai->ai_protocol != IPPROTO_TCP)) goto errfin; - + if ((ai->ai_flags & ~(AI_CANONNAME | AI_NUMERICHOST | AI_PASSIVE)) != 0) goto errfin; - if ((ai->ai_addrlen != ai->ai_addr->sa_len) || + if ((ai->ai_addrlen != ai->ai_addr->sa_len) || (ai->ai_family != ai->ai_addr->sa_family)) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } @@ -393,27 +393,27 @@ static int addrinfo_read_hostlist_func(struct addrinfo *ai, char *line) { struct addrinfo *result; - int rv; - + int rv; + if (debug) printf("resolving %s: ", line); rv = getaddrinfo(line, NULL, &hints, &result); if (rv == 0) { if (debug) printf("found\n"); - + rv = addrinfo_test_correctness(result, NULL); if (rv != 0) { freeaddrinfo(result); return (rv); } - + clone_addrinfo(ai, result); freeaddrinfo(result); } else { if (debug) printf("not found\n"); - + memset(ai, 0, sizeof(struct addrinfo)); } return (0); @@ -435,10 +435,10 @@ main(int argc, char **argv) char *snapshot_file, *hostlist_file; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; hostlist_file = NULL; memset(&hints, 0, sizeof(struct addrinfo)); @@ -465,38 +465,38 @@ main(int argc, char **argv) default: usage(); } - + TEST_DATA_INIT(addrinfo, &td, clone_addrinfo, free_addrinfo); TEST_DATA_INIT(addrinfo, &td_snap, clone_addrinfo, free_addrinfo); - + if (hostlist_file == NULL) usage(); - + if (access(hostlist_file, R_OK) != 0) { if (debug) printf("can't access the hostlist file %s\n", hostlist_file); - + usage(); } - + if (debug) printf("building host lists from %s\n", hostlist_file); - + rv = TEST_SNAPSHOT_FILE_READ(addrinfo, hostlist_file, &td, addrinfo_read_hostlist_func); if (rv != 0) goto fin; - + if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the snapshot file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -510,7 +510,7 @@ main(int argc, char **argv) } } } - + switch (method) { case TEST_GETADDRINFO: if (snapshot_file != NULL) @@ -519,7 +519,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) { - rv = TEST_SNAPSHOT_FILE_WRITE(addrinfo, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(addrinfo, snapshot_file, &td, sdump_addrinfo); } break; diff --git a/tools/regression/lib/libc/nss/test-getgr.c b/tools/regression/lib/libc/nss/test-getgr.c index 322c636..0ccebae 100644 --- a/tools/regression/lib/libc/nss/test-getgr.c +++ b/tools/regression/lib/libc/nss/test-getgr.c @@ -63,14 +63,14 @@ static void free_group(struct group *); static void sdump_group(struct group *, char *, size_t); static int group_read_snapshot_func(struct group *, char *); -static int group_check_ambiguity(struct group_test_data *, +static int group_check_ambiguity(struct group_test_data *, struct group *); static int group_fill_test_data(struct group_test_data *); static int group_test_correctness(struct group *, void *); static int group_test_getgrnam(struct group *, void *); static int group_test_getgrgid(struct group *, void *); static int group_test_getgrent(struct group *, void *); - + static void usage(void) __attribute__((__noreturn__)); IMPLEMENT_TEST_DATA(group) @@ -83,33 +83,33 @@ clone_group(struct group *dest, struct group const *src) { assert(dest != NULL); assert(src != NULL); - + char **cp; int members_num; - + memset(dest, 0, sizeof(struct group)); - + if (src->gr_name != NULL) { dest->gr_name = strdup(src->gr_name); assert(dest->gr_name != NULL); } - + if (src->gr_passwd != NULL) { dest->gr_passwd = strdup(src->gr_passwd); assert(dest->gr_passwd != NULL); } dest->gr_gid = src->gr_gid; - + if (src->gr_mem != NULL) { members_num = 0; for (cp = src->gr_mem; *cp; ++cp) ++members_num; - + dest->gr_mem = (char **)malloc( (members_num + 1) * (sizeof(char *))); assert(dest->gr_mem != NULL); memset(dest->gr_mem, 0, (members_num+1) * (sizeof(char *))); - + for (cp = src->gr_mem; *cp; ++cp) { dest->gr_mem[cp - src->gr_mem] = strdup(*cp); assert(dest->gr_mem[cp - src->gr_mem] != NULL); @@ -117,52 +117,52 @@ clone_group(struct group *dest, struct group const *src) } } -static void +static void free_group(struct group *grp) { char **cp; - + assert(grp != NULL); - + free(grp->gr_name); free(grp->gr_passwd); - + for (cp = grp->gr_mem; *cp; ++cp) free(*cp); free(grp->gr_mem); } -static int +static int compare_group(struct group *grp1, struct group *grp2, void *mdata) { char **c1, **c2; - + if (grp1 == grp2) return (0); - + if ((grp1 == NULL) || (grp2 == NULL)) goto errfin; - + if ((strcmp(grp1->gr_name, grp2->gr_name) != 0) || (strcmp(grp1->gr_passwd, grp2->gr_passwd) != 0) || (grp1->gr_gid != grp2->gr_gid)) goto errfin; - + c1 = grp1->gr_mem; c2 = grp2->gr_mem; - + if ((grp1->gr_mem == NULL) || (grp2->gr_mem == NULL)) goto errfin; - + for (;*c1 && *c2; ++c1, ++c2) if (strcmp(*c1, *c2) != 0) goto errfin; - + if ((*c1 != '\0') || (*c2 != '\0')) goto errfin; - + return 0; - + errfin: if ((debug) && (mdata == NULL)) { printf("following structures are not equal:\n"); @@ -178,14 +178,14 @@ sdump_group(struct group *grp, char *buffer, size_t buflen) { char **cp; int written; - + written = snprintf(buffer, buflen, "%s %s %d", - grp->gr_name, grp->gr_passwd, grp->gr_gid); + grp->gr_name, grp->gr_passwd, grp->gr_gid); buffer += written; if (written > buflen) return; buflen -= written; - + if (grp->gr_mem != NULL) { if (*(grp->gr_mem) != '\0') { for (cp = grp->gr_mem; *cp; ++cp) { @@ -194,9 +194,9 @@ sdump_group(struct group *grp, char *buffer, size_t buflen) if (written > buflen) return; buflen -= written; - + if (buflen == 0) - return; + return; } } else snprintf(buffer, buflen, " nomem"); @@ -213,7 +213,7 @@ group_read_snapshot_func(struct group *grp, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + i = 0; sl = NULL; ps = line; @@ -243,10 +243,10 @@ group_read_snapshot_func(struct group *grp, char *line) if (sl == NULL) { if (strcmp(s, "(null)") == 0) return (0); - + sl = sl_init(); assert(sl != NULL); - + if (strcmp(s, "nomem") != 0) { ts = strdup(s); assert(ts != NULL); @@ -257,7 +257,7 @@ group_read_snapshot_func(struct group *grp, char *line) assert(ts != NULL); sl_add(sl, ts); } - break; + break; }; ++i; } @@ -268,16 +268,16 @@ group_read_snapshot_func(struct group *grp, char *line) memset(grp, 0, sizeof(struct group)); return (-1); } - + sl_add(sl, NULL); grp->gr_mem = sl->sl_str; /* NOTE: is it a dirty hack or not? */ - free(sl); + free(sl); return (0); } -static void +static void dump_group(struct group *result) { if (result != NULL) { @@ -292,7 +292,7 @@ static int group_fill_test_data(struct group_test_data *td) { struct group *grp; - + setgroupent(1); while ((grp = getgrent()) != NULL) { if (group_test_correctness(grp, NULL) == 0) @@ -301,7 +301,7 @@ group_fill_test_data(struct group_test_data *td) return (-1); } endgrent(); - + return (0); } @@ -312,37 +312,37 @@ group_test_correctness(struct group *grp, void *mdata) printf("testing correctness with the following data:\n"); dump_group(grp); } - + if (grp == NULL) goto errfin; - + if (grp->gr_name == NULL) goto errfin; - + if (grp->gr_passwd == NULL) goto errfin; - + if (grp->gr_mem == NULL) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } /* group_check_ambiguity() is needed here because when doing the getgrent() - * calls sequence, records from different nsswitch sources can be different, + * calls sequence, records from different nsswitch sources can be different, * though having the same pw_name/pw_uid */ static int group_check_ambiguity(struct group_test_data *td, struct group *pwd) { - + return (TEST_DATA_FIND(group, td, pwd, compare_group, NULL) != NULL ? 0 : -1); } @@ -351,7 +351,7 @@ static int group_test_getgrnam(struct group *grp_model, void *mdata) { struct group *grp; - + if (debug) { printf("testing getgrnam() with the following data:\n"); dump_group(grp_model); @@ -360,20 +360,20 @@ group_test_getgrnam(struct group *grp_model, void *mdata) grp = getgrnam(grp_model->gr_name); if (group_test_correctness(grp, NULL) != 0) goto errfin; - + if ((compare_group(grp, grp_model, NULL) != 0) && - (group_check_ambiguity((struct group_test_data *)mdata, grp) + (group_check_ambiguity((struct group_test_data *)mdata, grp) !=0)) goto errfin; - + if (debug) printf("ok\n"); return (0); - + errfin: if (debug) printf("not ok\n"); - + return (-1); } @@ -381,14 +381,14 @@ static int group_test_getgrgid(struct group *grp_model, void *mdata) { struct group *grp; - + if (debug) { printf("testing getgrgid() with the following data...\n"); dump_group(grp_model); - } - + } + grp = getgrgid(grp_model->gr_gid); - if ((group_test_correctness(grp, NULL) != 0) || + if ((group_test_correctness(grp, NULL) != 0) || ((compare_group(grp, grp_model, NULL) != 0) && (group_check_ambiguity((struct group_test_data *)mdata, grp) != 0))) { @@ -402,7 +402,7 @@ group_test_getgrgid(struct group *grp_model, void *mdata) } } -static int +static int group_test_getgrent(struct group *grp, void *mdata) { /* Only correctness can be checked when doing 1-pass test for @@ -426,10 +426,10 @@ main(int argc, char **argv) char *snapshot_file; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; while ((c = getopt(argc, argv, "nge2ds:")) != -1) switch (c) { @@ -454,18 +454,18 @@ main(int argc, char **argv) default: usage(); } - + TEST_DATA_INIT(group, &td, clone_group, free_group); TEST_DATA_INIT(group, &td_snap, clone_group, free_group); if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -474,12 +474,12 @@ main(int argc, char **argv) rv = 0; goto fin; } - + TEST_SNAPSHOT_FILE_READ(group, snapshot_file, &td_snap, group_read_snapshot_func); } } - + rv = group_fill_test_data(&td); if (rv == -1) return (-1); @@ -489,7 +489,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(group, &td, group_test_getgrnam, (void *)&td); else - rv = DO_1PASS_TEST(group, &td_snap, + rv = DO_1PASS_TEST(group, &td_snap, group_test_getgrnam, (void *)&td_snap); break; case TEST_GETGRGID: @@ -497,7 +497,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(group, &td, group_test_getgrgid, (void *)&td); else - rv = DO_1PASS_TEST(group, &td_snap, + rv = DO_1PASS_TEST(group, &td_snap, group_test_getgrgid, (void *)&td_snap); break; case TEST_GETGRENT: @@ -510,7 +510,7 @@ main(int argc, char **argv) break; case TEST_GETGRENT_2PASS: TEST_DATA_INIT(group, &td_2pass, clone_group, free_group); - rv = group_fill_test_data(&td_2pass); + rv = group_fill_test_data(&td_2pass); if (rv != -1) rv = DO_2PASS_TEST(group, &td, &td_2pass, compare_group, NULL); @@ -518,7 +518,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) - rv = TEST_SNAPSHOT_FILE_WRITE(group, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(group, snapshot_file, &td, sdump_group); break; default: @@ -529,6 +529,6 @@ main(int argc, char **argv) fin: TEST_DATA_DESTROY(group, &td_snap); TEST_DATA_DESTROY(group, &td); - free(snapshot_file); + free(snapshot_file); return (rv); } diff --git a/tools/regression/lib/libc/nss/test-gethostby.c b/tools/regression/lib/libc/nss/test-gethostby.c index 77455e7..c6cacc0 100644 --- a/tools/regression/lib/libc/nss/test-gethostby.c +++ b/tools/regression/lib/libc/nss/test-gethostby.c @@ -90,7 +90,7 @@ static int hostent_test_correctness(struct hostent *, void *); static int hostent_test_gethostbyaddr(struct hostent *, void *); static int hostent_test_getaddrinfo_eq(struct hostent *, void *); static int hostent_test_getnameinfo_eq(struct hostent *, void *); - + static void usage(void) __attribute__((__noreturn__)); IMPLEMENT_TEST_DATA(hostent) @@ -103,7 +103,7 @@ __gethostbyname2(const char *name, int af) { struct hostent *he; int error; - + if (use_ipnode_functions == 0) he = gethostbyname2(name, af); else { @@ -112,7 +112,7 @@ __gethostbyname2(const char *name, int af) if (he == NULL); errno = error; } - + return (he); } @@ -121,7 +121,7 @@ __gethostbyaddr(const void *addr, socklen_t len, int af) { struct hostent *he; int error; - + if (use_ipnode_functions == 0) he = gethostbyaddr(addr, len, af); else { @@ -130,8 +130,8 @@ __gethostbyaddr(const void *addr, socklen_t len, int af) if (he == NULL) errno = error; } - - return (he); + + return (he); } static void @@ -147,44 +147,44 @@ clone_hostent(struct hostent *dest, struct hostent const *src) { assert(dest != NULL); assert(src != NULL); - + char **cp; int aliases_num; int addrs_num; size_t offset; - + memset(dest, 0, sizeof(struct hostent)); - + if (src->h_name != NULL) { dest->h_name = strdup(src->h_name); assert(dest->h_name != NULL); } - + dest->h_addrtype = src->h_addrtype; dest->h_length = src->h_length; - + if (src->h_aliases != NULL) { aliases_num = 0; for (cp = src->h_aliases; *cp; ++cp) ++aliases_num; - + dest->h_aliases = (char **)malloc((aliases_num + 1) * (sizeof(char *))); assert(dest->h_aliases != NULL); memset(dest->h_aliases, 0, (aliases_num + 1) * (sizeof(char *))); - + for (cp = src->h_aliases; *cp; ++cp) { dest->h_aliases[cp - src->h_aliases] = strdup(*cp); assert(dest->h_aliases[cp - src->h_aliases] != NULL); } } - + if (src->h_addr_list != NULL) { addrs_num = 0; for (cp = src->h_addr_list; *cp; ++cp) ++addrs_num; - + dest->h_addr_list = (char **)malloc((addrs_num + 1) * (sizeof(char *))); assert(dest->h_addr_list != NULL); @@ -193,7 +193,7 @@ clone_hostent(struct hostent *dest, struct hostent const *src) for (cp = src->h_addr_list; *cp; ++cp) { offset = cp - src->h_addr_list; - dest->h_addr_list[offset] = + dest->h_addr_list[offset] = (char *)malloc(src->h_length); assert(dest->h_addr_list[offset] != NULL); memcpy(dest->h_addr_list[offset], @@ -202,15 +202,15 @@ clone_hostent(struct hostent *dest, struct hostent const *src) } } -static void +static void free_hostent(struct hostent *ht) { char **cp; - + assert(ht != NULL); - + free(ht->h_name); - + if (ht->h_aliases != NULL) { for (cp = ht->h_aliases; *cp; ++cp) free(*cp); @@ -224,33 +224,33 @@ free_hostent(struct hostent *ht) } } -static int +static int compare_hostent(struct hostent *ht1, struct hostent *ht2, void *mdata) { char **c1, **c2, **ct, **cb; int b; - + if (ht1 == ht2) return 0; - + if ((ht1 == NULL) || (ht2 == NULL)) goto errfin; - + if ((ht1->h_name == NULL) || (ht2->h_name == NULL)) goto errfin; - + if ((ht1->h_addrtype != ht2->h_addrtype) || - (ht1->h_length != ht2->h_length) || + (ht1->h_length != ht2->h_length) || (strcmp(ht1->h_name, ht2->h_name) != 0)) goto errfin; - + c1 = ht1->h_aliases; c2 = ht2->h_aliases; - + if (((ht1->h_aliases == NULL) || (ht2->h_aliases == NULL)) && (ht1->h_aliases != ht2->h_aliases)) goto errfin; - + if ((c1 != NULL) && (c2 != NULL)) { cb = c1; for (;*c1; ++c1) { @@ -286,14 +286,14 @@ compare_hostent(struct hostent *ht1, struct hostent *ht2, void *mdata) } } } - + c1 = ht1->h_addr_list; c2 = ht2->h_addr_list; - + if (((ht1->h_addr_list == NULL) || (ht2->h_addr_list== NULL)) && (ht1->h_addr_list != ht2->h_addr_list)) goto errfin; - + if ((c1 != NULL) && (c2 != NULL)) { cb = c1; for (;*c1; ++c1) { @@ -311,7 +311,7 @@ compare_hostent(struct hostent *ht1, struct hostent *ht2, void *mdata) goto errfin; } } - + c1 = cb; for (;*c2; ++c2) { b = 0; @@ -331,7 +331,7 @@ compare_hostent(struct hostent *ht1, struct hostent *ht2, void *mdata) } return 0; - + errfin: if ((debug) && (mdata == NULL)) { printf("following structures are not equal:\n"); @@ -346,28 +346,28 @@ static int check_addrinfo_for_name(struct addrinfo *ai, char const *name) { struct addrinfo *ai2; - + for (ai2 = ai; ai2 != NULL; ai2 = ai2->ai_next) { if (strcmp(ai2->ai_canonname, name) == 0) return (0); } - + return (-1); } static int -check_addrinfo_for_addr(struct addrinfo *ai, char const *addr, +check_addrinfo_for_addr(struct addrinfo *ai, char const *addr, socklen_t addrlen, int af) { struct addrinfo *ai2; - + for (ai2 = ai; ai2 != NULL; ai2 = ai2->ai_next) { if (af != ai2->ai_family) continue; - + switch (af) { case AF_INET: - if (memcmp(addr, + if (memcmp(addr, (void *)&((struct sockaddr_in *)ai2->ai_addr)->sin_addr, min(addrlen, ai2->ai_addrlen)) == 0) return (0); @@ -382,24 +382,24 @@ check_addrinfo_for_addr(struct addrinfo *ai, char const *addr, break; } } - + return (-1); } -static int +static int is_hostent_equal(struct hostent *he, struct addrinfo *ai) { char **cp; int rv; - + if (debug) printf("checking equality of he and ai\n"); - + rv = check_addrinfo_for_name(ai, he->h_name); if (rv != 0) { if (debug) printf("not equal - he->h_name couldn't be found\n"); - + return (rv); } @@ -409,14 +409,14 @@ is_hostent_equal(struct hostent *he, struct addrinfo *ai) if (rv != 0) { if (debug) printf("not equal - one of he->h_addr_list couldn't be found\n"); - + return (rv); } } - + if (debug) printf("equal\n"); - + return (0); } @@ -426,14 +426,14 @@ sdump_hostent(struct hostent *ht, char *buffer, size_t buflen) char **cp; size_t i; int written; - + written = snprintf(buffer, buflen, "%s %d %d", ht->h_name, ht->h_addrtype, ht->h_length); buffer += written; if (written > buflen) return; buflen -= written; - + if (ht->h_aliases != NULL) { if (*(ht->h_aliases) != NULL) { for (cp = ht->h_aliases; *cp; ++cp) { @@ -442,53 +442,53 @@ sdump_hostent(struct hostent *ht, char *buffer, size_t buflen) if (written > buflen) return; buflen -= written; - + if (buflen == 0) - return; + return; } } else { written = snprintf(buffer, buflen, " noaliases"); buffer += written; if (written > buflen) return; - buflen -= written; + buflen -= written; } } else { written = snprintf(buffer, buflen, " (null)"); buffer += written; if (written > buflen) return; - buflen -= written; + buflen -= written; } - + written = snprintf(buffer, buflen, " : "); buffer += written; if (written > buflen) return; - buflen -= written; + buflen -= written; if (ht->h_addr_list != NULL) { if (*(ht->h_addr_list) != NULL) { for (cp = ht->h_addr_list; *cp; ++cp) { for (i = 0; i < ht->h_length; ++i ) { - written = snprintf(buffer, buflen, + written = snprintf(buffer, buflen, i + 1 != ht->h_length ? "%d." : "%d", (unsigned char)(*cp)[i]); buffer += written; if (written > buflen) return; buflen -= written; - + if (buflen == 0) return; } - + if (*(cp + 1) ) { written = snprintf(buffer, buflen, " "); buffer += written; if (written > buflen) return; - buflen -= written; + buflen -= written; } } } else { @@ -496,42 +496,42 @@ sdump_hostent(struct hostent *ht, char *buffer, size_t buflen) buffer += written; if (written > buflen) return; - buflen -= written; + buflen -= written; } } else { written = snprintf(buffer, buflen, " (null)"); buffer += written; if (written > buflen) return; - buflen -= written; - } + buflen -= written; + } } static int hostent_read_hostlist_func(struct hostent *he, char *line) { struct hostent *result; - int rv; - + int rv; + if (debug) printf("resolving %s: ", line); result = __gethostbyname2(line, af_type); if (result != NULL) { if (debug) printf("found\n"); - + rv = hostent_test_correctness(result, NULL); if (rv != 0) { __freehostent(result); return (rv); } - + clone_hostent(he, result); __freehostent(result); } else { if (debug) printf("not found\n"); - + memset(he, 0, sizeof(struct hostent)); he->h_name = strdup(line); assert(he->h_name != NULL); @@ -543,12 +543,12 @@ static int hostent_read_snapshot_addr(char *addr, unsigned char *result, size_t len) { char *s, *ps, *ts; - + ps = addr; while ( (s = strsep(&ps, ".")) != NULL) { if (len == 0) return (-1); - + *result = (unsigned char)strtol(s, &ts, 10); ++result; if (*ts != '\0') @@ -571,7 +571,7 @@ hostent_read_snapshot_func(struct hostent *ht, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + rv = 0; i = 0; sl1 = sl2 = NULL; @@ -595,15 +595,15 @@ hostent_read_snapshot_func(struct hostent *ht, char *line) if (*ts != '\0') goto fin; break; - + case 3: if (sl1 == NULL) { if (strcmp(s, "(null)") == 0) return (0); - + sl1 = sl_init(); assert(sl1 != NULL); - + if (strcmp(s, "noaliases") != 0) { ts = strdup(s); assert(ts != NULL); @@ -618,16 +618,16 @@ hostent_read_snapshot_func(struct hostent *ht, char *line) sl_add(sl1, ts); } } - break; + break; case 4: if (sl2 == NULL) { if (strcmp(s, "(null)") == 0) return (0); - + sl2 = sl_init(); assert(sl2 != NULL); - + if (strcmp(s, "noaddrs") != 0) { ts = (char *)malloc(ht->h_length); assert(ts != NULL); @@ -650,9 +650,9 @@ hostent_read_snapshot_func(struct hostent *ht, char *line) } break; default: - break; + break; }; - + if ((i != 3) && (i != 4)) ++i; } @@ -667,19 +667,19 @@ fin: ht->h_addr_list = sl2->sl_str; } - if ((i != 4) || (rv != 0)) { + if ((i != 4) || (rv != 0)) { free_hostent(ht); memset(ht, 0, sizeof(struct hostent)); return (-1); } - + /* NOTE: is it a dirty hack or not? */ free(sl1); - free(sl2); + free(sl2); return (0); } -static void +static void dump_hostent(struct hostent *result) { if (result != NULL) { @@ -697,34 +697,34 @@ hostent_test_correctness(struct hostent *ht, void *mdata) printf("testing correctness with the following data:\n"); dump_hostent(ht); } - + if (ht == NULL) goto errfin; - + if (ht->h_name == NULL) goto errfin; if (!((ht->h_addrtype >= 0) && (ht->h_addrtype < AF_MAX))) goto errfin; - - if ((ht->h_length != sizeof(struct in_addr)) && + + if ((ht->h_length != sizeof(struct in_addr)) && (ht->h_length != sizeof(struct in6_addr))) goto errfin; - + if (ht->h_aliases == NULL) goto errfin; - + if (ht->h_addr_list == NULL) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } @@ -733,23 +733,23 @@ hostent_test_gethostbyaddr(struct hostent *he, void *mdata) { struct hostent *result; struct hostent_test_data *addr_test_data; - int rv; - + int rv; + addr_test_data = (struct hostent_test_data *)mdata; - + /* We should omit unresolved hostents */ if (he->h_addr_list != NULL) { char **cp; for (cp = he->h_addr_list; *cp; ++cp) { if (debug) printf("doing reverse lookup for %s\n", he->h_name); - + result = __gethostbyaddr(*cp, he->h_length, he->h_addrtype); if (result == NULL) { if (debug) printf("warning: reverse lookup failed\n"); - + continue; } rv = hostent_test_correctness(result, NULL); @@ -757,14 +757,14 @@ hostent_test_gethostbyaddr(struct hostent *he, void *mdata) __freehostent(result); return (rv); } - + if (addr_test_data != NULL) TEST_DATA_APPEND(hostent, addr_test_data, result); - + __freehostent(result); } } - + return (0); } @@ -772,16 +772,16 @@ static int hostent_test_getaddrinfo_eq(struct hostent *he, void *mdata) { struct addrinfo *ai, hints; - int rv; - + int rv; + ai = NULL; memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = af_type; hints.ai_flags = AI_CANONNAME; - + if (debug) printf("using getaddrinfo() to resolve %s\n", he->h_name); - + /* struct hostent *he was not resolved */ if (he->h_addr_list == NULL) { /* We can be sure that he->h_name is not NULL */ @@ -798,20 +798,20 @@ hostent_test_getaddrinfo_eq(struct hostent *he, void *mdata) printf("not ok - should have beed resolved\n"); return (-1); } - + rv = is_hostent_equal(he, ai); if (rv != 0) { if (debug) printf("not ok - addrinfo and hostent are not equal\n"); return (-1); } - + } - + return (0); } -static int +static int hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) { char buffer[NI_MAXHOST]; @@ -820,13 +820,13 @@ hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) struct sockaddr *saddr; struct hostent *result; int rv; - + if (he->h_addr_list != NULL) { char **cp; for (cp = he->h_addr_list; *cp; ++cp) { if (debug) printf("doing reverse lookup for %s\n", he->h_name); - + result = __gethostbyaddr(*cp, he->h_length, he->h_addrtype); if (result != NULL) { @@ -837,16 +837,16 @@ hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) } } else { if (debug) - printf("reverse lookup failed\n"); + printf("reverse lookup failed\n"); } - + switch (he->h_addrtype) { case AF_INET: memset(&sin, 0, sizeof(struct sockaddr_in)); sin.sin_len = sizeof(struct sockaddr_in); sin.sin_family = AF_INET; memcpy(&sin.sin_addr, *cp, he->h_length); - + saddr = (struct sockaddr *)&sin; break; case AF_INET6: @@ -854,7 +854,7 @@ hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) sin6.sin6_len = sizeof(struct sockaddr_in6); sin6.sin6_family = AF_INET6; memcpy(&sin6.sin6_addr, *cp, he->h_length); - + saddr = (struct sockaddr *)&sin6; break; default: @@ -863,38 +863,38 @@ hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) he->h_addrtype); continue; } - + assert(saddr != NULL); - rv = getnameinfo(saddr, saddr->sa_len, buffer, + rv = getnameinfo(saddr, saddr->sa_len, buffer, sizeof(buffer), NULL, 0, NI_NAMEREQD); - + if ((rv != 0) && (result != NULL)) { if (debug) printf("not ok - getnameinfo() didn't make the reverse lookup, when it should have (%s)\n", gai_strerror(rv)); return (rv); } - + if ((rv == 0) && (result == NULL)) { if (debug) - printf("not ok - getnameinfo() made the reverse lookup, when it shouldn't have\n"); + printf("not ok - getnameinfo() made the reverse lookup, when it shouldn't have\n"); return (rv); } - + if ((rv != 0) && (result == NULL)) { if (debug) printf("ok - both getnameinfo() and ***byaddr() failed\n"); - + continue; } - + if (debug) printf("comparing %s with %s\n", result->h_name, - buffer); - + buffer); + rv = strcmp(result->h_name, buffer); __freehostent(result); - + if (rv != 0) { if (debug) printf("not ok - getnameinfo() and ***byaddr() results are not equal\n"); @@ -903,10 +903,10 @@ hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) if (debug) printf("ok - getnameinfo() and ***byaddr() results are equal\n"); } - } + } } - - return (0); + + return (0); } static void @@ -923,13 +923,13 @@ main(int argc, char **argv) { struct hostent_test_data td, td_addr, td_snap; char *snapshot_file, *hostlist_file; - res_state statp; + res_state statp; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; hostlist_file = NULL; while ((c = getopt(argc, argv, "nad2iod46mAcMs:f:")) != -1) @@ -986,37 +986,37 @@ main(int argc, char **argv) if (use_ipnode_functions == 0) { statp = __res_state(); - if ((statp == NULL) || ((statp->options & RES_INIT) == 0 && + if ((statp == NULL) || ((statp->options & RES_INIT) == 0 && res_ninit(statp) == -1)) { if (debug) printf("error: can't init res_state\n"); - + free(snapshot_file); free(hostlist_file); return (-1); } - - if (use_ipv6_mapping == 0) + + if (use_ipv6_mapping == 0) statp->options &= ~RES_USE_INET6; else statp->options |= RES_USE_INET6; } - + TEST_DATA_INIT(hostent, &td, clone_hostent, free_hostent); TEST_DATA_INIT(hostent, &td_addr, clone_hostent, free_hostent); TEST_DATA_INIT(hostent, &td_snap, clone_hostent, free_hostent); - + if (hostlist_file == NULL) usage(); - + if (access(hostlist_file, R_OK) != 0) { if (debug) printf("can't access the hostlist file %s\n", hostlist_file); - + usage(); } - + if (debug) printf("building host lists from %s\n", hostlist_file); @@ -1024,9 +1024,9 @@ main(int argc, char **argv) hostent_read_hostlist_func); if (rv != 0) goto fin; - + if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) { if (method != TEST_GETHOSTBYADDR) method = TEST_BUILD_SNAPSHOT; @@ -1036,7 +1036,7 @@ main(int argc, char **argv) if (debug) printf("can't access the snapshot file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -1050,7 +1050,7 @@ main(int argc, char **argv) } } } - + switch (method) { case TEST_GETHOSTBYNAME2: if (snapshot_file != NULL) @@ -1062,7 +1062,7 @@ main(int argc, char **argv) hostent_test_gethostbyaddr, (void *)&td_addr); if (snapshot_file != NULL) - rv = DO_2PASS_TEST(hostent, &td_addr, &td_snap, + rv = DO_2PASS_TEST(hostent, &td_addr, &td_snap, compare_hostent, NULL); break; case TEST_GETHOSTBYNAME2_GETADDRINFO: @@ -1075,7 +1075,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) { - rv = TEST_SNAPSHOT_FILE_WRITE(hostent, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(hostent, snapshot_file, &td, sdump_hostent); } break; @@ -1083,8 +1083,8 @@ main(int argc, char **argv) if (snapshot_file != NULL) { rv = DO_1PASS_TEST(hostent, &td, hostent_test_gethostbyaddr, (void *)&td_addr); - - rv = TEST_SNAPSHOT_FILE_WRITE(hostent, snapshot_file, + + rv = TEST_SNAPSHOT_FILE_WRITE(hostent, snapshot_file, &td_addr, sdump_hostent); } break; diff --git a/tools/regression/lib/libc/nss/test-getproto.c b/tools/regression/lib/libc/nss/test-getproto.c index 89ad087..a3ba271 100644 --- a/tools/regression/lib/libc/nss/test-getproto.c +++ b/tools/regression/lib/libc/nss/test-getproto.c @@ -63,14 +63,14 @@ static void free_protoent(struct protoent *); static void sdump_protoent(struct protoent *, char *, size_t); static int protoent_read_snapshot_func(struct protoent *, char *); -static int protoent_check_ambiguity(struct protoent_test_data *, +static int protoent_check_ambiguity(struct protoent_test_data *, struct protoent *); static int protoent_fill_test_data(struct protoent_test_data *); static int protoent_test_correctness(struct protoent *, void *); static int protoent_test_getprotobyname(struct protoent *, void *); static int protoent_test_getprotobynumber(struct protoent *, void *); static int protoent_test_getprotoent(struct protoent *, void *); - + static void usage(void) __attribute__((__noreturn__)); IMPLEMENT_TEST_DATA(protoent) @@ -83,28 +83,28 @@ clone_protoent(struct protoent *dest, struct protoent const *src) { assert(dest != NULL); assert(src != NULL); - + char **cp; int aliases_num; - + memset(dest, 0, sizeof(struct protoent)); - + if (src->p_name != NULL) { dest->p_name = strdup(src->p_name); assert(dest->p_name != NULL); } - + dest->p_proto = src->p_proto; - + if (src->p_aliases != NULL) { aliases_num = 0; for (cp = src->p_aliases; *cp; ++cp) ++aliases_num; - + dest->p_aliases = (char **)malloc((aliases_num+1) * (sizeof(char *))); assert(dest->p_aliases != NULL); memset(dest->p_aliases, 0, (aliases_num+1) * (sizeof(char *))); - + for (cp = src->p_aliases; *cp; ++cp) { dest->p_aliases[cp - src->p_aliases] = strdup(*cp); assert(dest->p_aliases[cp - src->p_aliases] != NULL); @@ -112,50 +112,50 @@ clone_protoent(struct protoent *dest, struct protoent const *src) } } -static void +static void free_protoent(struct protoent *pe) { char **cp; - + assert(pe != NULL); - + free(pe->p_name); - + for (cp = pe->p_aliases; *cp; ++cp) free(*cp); free(pe->p_aliases); } -static int +static int compare_protoent(struct protoent *pe1, struct protoent *pe2, void *mdata) { char **c1, **c2; - + if (pe1 == pe2) return 0; - + if ((pe1 == NULL) || (pe2 == NULL)) goto errfin; - + if ((strcmp(pe1->p_name, pe2->p_name) != 0) || (pe1->p_proto != pe2->p_proto)) goto errfin; - + c1 = pe1->p_aliases; c2 = pe2->p_aliases; - + if ((pe1->p_aliases == NULL) || (pe2->p_aliases == NULL)) goto errfin; - + for (;*c1 && *c2; ++c1, ++c2) if (strcmp(*c1, *c2) != 0) goto errfin; - + if ((*c1 != '\0') || (*c2 != '\0')) goto errfin; - + return 0; - + errfin: if ((debug) && (mdata == NULL)) { printf("following structures are not equal:\n"); @@ -171,14 +171,14 @@ sdump_protoent(struct protoent *pe, char *buffer, size_t buflen) { char **cp; int written; - + written = snprintf(buffer, buflen, "%s %d", - pe->p_name, pe->p_proto); + pe->p_name, pe->p_proto); buffer += written; if (written > buflen) return; buflen -= written; - + if (pe->p_aliases != NULL) { if (*(pe->p_aliases) != '\0') { for (cp = pe->p_aliases; *cp; ++cp) { @@ -187,9 +187,9 @@ sdump_protoent(struct protoent *pe, char *buffer, size_t buflen) if (written > buflen) return; buflen -= written; - + if (buflen == 0) - return; + return; } } else snprintf(buffer, buflen, " noaliases"); @@ -206,7 +206,7 @@ protoent_read_snapshot_func(struct protoent *pe, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + i = 0; sl = NULL; ps = line; @@ -230,10 +230,10 @@ protoent_read_snapshot_func(struct protoent *pe, char *line) if (sl == NULL) { if (strcmp(s, "(null)") == 0) return (0); - + sl = sl_init(); assert(sl != NULL); - + if (strcmp(s, "noaliases") != 0) { ts = strdup(s); assert(ts != NULL); @@ -244,7 +244,7 @@ protoent_read_snapshot_func(struct protoent *pe, char *line) assert(ts != NULL); sl_add(sl, ts); } - break; + break; }; ++i; } @@ -254,16 +254,16 @@ protoent_read_snapshot_func(struct protoent *pe, char *line) memset(pe, 0, sizeof(struct protoent)); return (-1); } - + sl_add(sl, NULL); pe->p_aliases = sl->sl_str; /* NOTE: is it a dirty hack or not? */ - free(sl); + free(sl); return (0); } -static void +static void dump_protoent(struct protoent *result) { if (result != NULL) { @@ -278,7 +278,7 @@ static int protoent_fill_test_data(struct protoent_test_data *td) { struct protoent *pe; - + setprotoent(1); while ((pe = getprotoent()) != NULL) { if (protoent_test_correctness(pe, NULL) == 0) @@ -287,7 +287,7 @@ protoent_fill_test_data(struct protoent_test_data *td) return (-1); } endprotoent(); - + return (0); } @@ -298,39 +298,39 @@ protoent_test_correctness(struct protoent *pe, void *mdata) printf("testing correctness with the following data:\n"); dump_protoent(pe); } - + if (pe == NULL) goto errfin; - + if (pe->p_name == NULL) goto errfin; - + if (pe->p_proto < 0) goto errfin; - + if (pe->p_aliases == NULL) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } /* protoent_check_ambiguity() is needed when one port+proto is associated with * more than one peice (these cases are usually marked as PROBLEM in - * /etc/peices. This functions is needed also when one peice+proto is + * /etc/peices. This functions is needed also when one peice+proto is * associated with several ports. We have to check all the protoent structures * to make sure that pe really exists and correct */ static int protoent_check_ambiguity(struct protoent_test_data *td, struct protoent *pe) { - + return (TEST_DATA_FIND(protoent, td, pe, compare_protoent, NULL) != NULL ? 0 : -1); } @@ -340,7 +340,7 @@ protoent_test_getprotobyname(struct protoent *pe_model, void *mdata) { char **alias; struct protoent *pe; - + if (debug) { printf("testing getprotobyname() with the following data:\n"); dump_protoent(pe_model); @@ -349,32 +349,32 @@ protoent_test_getprotobyname(struct protoent *pe_model, void *mdata) pe = getprotobyname(pe_model->p_name); if (protoent_test_correctness(pe, NULL) != 0) goto errfin; - + if ((compare_protoent(pe, pe_model, NULL) != 0) && - (protoent_check_ambiguity((struct protoent_test_data *)mdata, pe) + (protoent_check_ambiguity((struct protoent_test_data *)mdata, pe) !=0)) goto errfin; - + for (alias = pe_model->p_aliases; *alias; ++alias) { pe = getprotobyname(*alias); - + if (protoent_test_correctness(pe, NULL) != 0) goto errfin; - + if ((compare_protoent(pe, pe_model, NULL) != 0) && (protoent_check_ambiguity( (struct protoent_test_data *)mdata, pe) != 0)) goto errfin; } - + if (debug) printf("ok\n"); return (0); - + errfin: if (debug) printf("not ok\n"); - + return (-1); } @@ -382,14 +382,14 @@ static int protoent_test_getprotobynumber(struct protoent *pe_model, void *mdata) { struct protoent *pe; - + if (debug) { printf("testing getprotobyport() with the following data...\n"); dump_protoent(pe_model); - } - + } + pe = getprotobynumber(pe_model->p_proto); - if ((protoent_test_correctness(pe, NULL) != 0) || + if ((protoent_test_correctness(pe, NULL) != 0) || ((compare_protoent(pe, pe_model, NULL) != 0) && (protoent_check_ambiguity((struct protoent_test_data *)mdata, pe) != 0))) { @@ -403,7 +403,7 @@ protoent_test_getprotobynumber(struct protoent *pe_model, void *mdata) } } -static int +static int protoent_test_getprotoent(struct protoent *pe, void *mdata) { /* Only correctness can be checked when doing 1-pass test for @@ -427,10 +427,10 @@ main(int argc, char **argv) char *snapshot_file; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; while ((c = getopt(argc, argv, "nve2ds:")) != -1) switch (c) { @@ -455,18 +455,18 @@ main(int argc, char **argv) default: usage(); } - + TEST_DATA_INIT(protoent, &td, clone_protoent, free_protoent); TEST_DATA_INIT(protoent, &td_snap, clone_protoent, free_protoent); if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -475,12 +475,12 @@ main(int argc, char **argv) rv = 0; goto fin; } - + TEST_SNAPSHOT_FILE_READ(protoent, snapshot_file, &td_snap, protoent_read_snapshot_func); } } - + rv = protoent_fill_test_data(&td); if (rv == -1) return (-1); @@ -490,7 +490,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(protoent, &td, protoent_test_getprotobyname, (void *)&td); else - rv = DO_1PASS_TEST(protoent, &td_snap, + rv = DO_1PASS_TEST(protoent, &td_snap, protoent_test_getprotobyname, (void *)&td_snap); break; case TEST_GETPROTOBYNUMBER: @@ -498,12 +498,12 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(protoent, &td, protoent_test_getprotobynumber, (void *)&td); else - rv = DO_1PASS_TEST(protoent, &td_snap, + rv = DO_1PASS_TEST(protoent, &td_snap, protoent_test_getprotobynumber, (void *)&td_snap); break; case TEST_GETPROTOENT: if (snapshot_file == NULL) - rv = DO_1PASS_TEST(protoent, &td, + rv = DO_1PASS_TEST(protoent, &td, protoent_test_getprotoent, (void *)&td); else rv = DO_2PASS_TEST(protoent, &td, &td_snap, @@ -520,7 +520,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) - rv = TEST_SNAPSHOT_FILE_WRITE(protoent, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(protoent, snapshot_file, &td, sdump_protoent); break; default: @@ -531,6 +531,6 @@ main(int argc, char **argv) fin: TEST_DATA_DESTROY(protoent, &td_snap); TEST_DATA_DESTROY(protoent, &td); - free(snapshot_file); + free(snapshot_file); return (rv); } diff --git a/tools/regression/lib/libc/nss/test-getpw.c b/tools/regression/lib/libc/nss/test-getpw.c index bb88f6a..a0b348d 100644 --- a/tools/regression/lib/libc/nss/test-getpw.c +++ b/tools/regression/lib/libc/nss/test-getpw.c @@ -68,7 +68,7 @@ static int passwd_test_correctness(struct passwd *, void *); static int passwd_test_getpwnam(struct passwd *, void *); static int passwd_test_getpwuid(struct passwd *, void *); static int passwd_test_getpwent(struct passwd *, void *); - + static void usage(void) __attribute__((__noreturn__)); IMPLEMENT_TEST_DATA(passwd) @@ -76,12 +76,12 @@ IMPLEMENT_TEST_FILE_SNAPSHOT(passwd) IMPLEMENT_1PASS_TEST(passwd) IMPLEMENT_2PASS_TEST(passwd) -static void +static void clone_passwd(struct passwd *dest, struct passwd const *src) { assert(dest != NULL); assert(src != NULL); - + memcpy(dest, src, sizeof(struct passwd)); if (src->pw_name != NULL) dest->pw_name = strdup(src->pw_name); @@ -97,15 +97,15 @@ clone_passwd(struct passwd *dest, struct passwd const *src) dest->pw_shell = strdup(dest->pw_shell); } -static int +static int compare_passwd(struct passwd *pwd1, struct passwd *pwd2, void *mdata) { assert(pwd1 != NULL); assert(pwd2 != NULL); - + if (pwd1 == pwd2) return (0); - + if ((pwd1->pw_uid != pwd2->pw_uid) || (pwd1->pw_gid != pwd2->pw_gid) || (pwd1->pw_change != pwd2->pw_change) || @@ -116,14 +116,14 @@ compare_passwd(struct passwd *pwd1, struct passwd *pwd2, void *mdata) (strcmp(pwd1->pw_class, pwd2->pw_class) != 0) || (strcmp(pwd1->pw_gecos, pwd2->pw_gecos) != 0) || (strcmp(pwd1->pw_dir, pwd2->pw_dir) != 0) || - (strcmp(pwd1->pw_shell, pwd2->pw_shell) != 0) + (strcmp(pwd1->pw_shell, pwd2->pw_shell) != 0) ) return (-1); else return (0); } -static void +static void free_passwd(struct passwd *pwd) { free(pwd->pw_name); @@ -134,7 +134,7 @@ free_passwd(struct passwd *pwd) free(pwd->pw_shell); } -static void +static void sdump_passwd(struct passwd *pwd, char *buffer, size_t buflen) { snprintf(buffer, buflen, "%s:%s:%d:%d:%d:%s:%s:%s:%s:%d:%d", @@ -154,7 +154,7 @@ dump_passwd(struct passwd *pwd) printf("(null)\n"); } -static int +static int passwd_read_snapshot_func(struct passwd *pwd, char *line) { char *s, *ps, *ts; @@ -162,7 +162,7 @@ passwd_read_snapshot_func(struct passwd *pwd, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + i = 0; ps = line; memset(pwd, 0, sizeof(struct passwd)); @@ -174,7 +174,7 @@ passwd_read_snapshot_func(struct passwd *pwd, char *line) break; case 1: pwd->pw_passwd = strdup(s); - assert(pwd->pw_passwd != NULL); + assert(pwd->pw_passwd != NULL); break; case 2: pwd->pw_uid = (uid_t)strtol(s, &ts, 10); @@ -218,7 +218,7 @@ passwd_read_snapshot_func(struct passwd *pwd, char *line) goto fin; break; default: - break; + break; }; ++i; } @@ -229,7 +229,7 @@ fin: memset(pwd, 0, sizeof(struct passwd)); return (-1); } - + return (0); } @@ -237,7 +237,7 @@ static int passwd_fill_test_data(struct passwd_test_data *td) { struct passwd *pwd; - + setpassent(1); while ((pwd = getpwent()) != NULL) { if (passwd_test_correctness(pwd, NULL) == 0) @@ -246,7 +246,7 @@ passwd_fill_test_data(struct passwd_test_data *td) return (-1); } endpwent(); - + return (0); } @@ -257,9 +257,9 @@ passwd_test_correctness(struct passwd *pwd, void *mdata) printf("testing correctness with the following data:\n"); dump_passwd(pwd); } - + if (pwd == NULL) - return (-1); + return (-1); if (pwd->pw_name == NULL) goto errfin; @@ -278,25 +278,25 @@ passwd_test_correctness(struct passwd *pwd, void *mdata) if (pwd->pw_shell == NULL) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } /* passwd_check_ambiguity() is needed here because when doing the getpwent() - * calls sequence, records from different nsswitch sources can be different, + * calls sequence, records from different nsswitch sources can be different, * though having the same pw_name/pw_uid */ static int passwd_check_ambiguity(struct passwd_test_data *td, struct passwd *pwd) { - + return (TEST_DATA_FIND(passwd, td, pwd, compare_passwd, NULL) != NULL ? 0 : -1); } @@ -305,7 +305,7 @@ static int passwd_test_getpwnam(struct passwd *pwd_model, void *mdata) { struct passwd *pwd; - + if (debug) { printf("testing getpwnam() with the following data:\n"); dump_passwd(pwd_model); @@ -314,20 +314,20 @@ passwd_test_getpwnam(struct passwd *pwd_model, void *mdata) pwd = getpwnam(pwd_model->pw_name); if (passwd_test_correctness(pwd, NULL) != 0) goto errfin; - + if ((compare_passwd(pwd, pwd_model, NULL) != 0) && - (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd) + (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd) !=0)) goto errfin; - + if (debug) printf("ok\n"); return (0); - + errfin: if (debug) printf("not ok\n"); - + return (-1); } @@ -335,14 +335,14 @@ static int passwd_test_getpwuid(struct passwd *pwd_model, void *mdata) { struct passwd *pwd; - + if (debug) { printf("testing getpwuid() with the following data...\n"); dump_passwd(pwd_model); - } - + } + pwd = getpwuid(pwd_model->pw_uid); - if ((passwd_test_correctness(pwd, NULL) != 0) || + if ((passwd_test_correctness(pwd, NULL) != 0) || ((compare_passwd(pwd, pwd_model, NULL) != 0) && (passwd_check_ambiguity((struct passwd_test_data *)mdata, pwd) != 0))) { @@ -356,7 +356,7 @@ passwd_test_getpwuid(struct passwd *pwd_model, void *mdata) } } -static int +static int passwd_test_getpwent(struct passwd *pwd, void *mdata) { /* Only correctness can be checked when doing 1-pass test for @@ -380,10 +380,10 @@ main(int argc, char **argv) char *snapshot_file; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; while ((c = getopt(argc, argv, "nue2ds:")) != -1) switch (c) { @@ -408,18 +408,18 @@ main(int argc, char **argv) default: usage(); } - + TEST_DATA_INIT(passwd, &td, clone_passwd, free_passwd); TEST_DATA_INIT(passwd, &td_snap, clone_passwd, free_passwd); if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -428,23 +428,23 @@ main(int argc, char **argv) rv = 0; goto fin; } - + TEST_SNAPSHOT_FILE_READ(passwd, snapshot_file, &td_snap, passwd_read_snapshot_func); } } - + rv = passwd_fill_test_data(&td); if (rv == -1) return (-1); - + switch (method) { case TEST_GETPWNAM: if (snapshot_file == NULL) rv = DO_1PASS_TEST(passwd, &td, passwd_test_getpwnam, (void *)&td); else - rv = DO_1PASS_TEST(passwd, &td_snap, + rv = DO_1PASS_TEST(passwd, &td_snap, passwd_test_getpwnam, (void *)&td_snap); break; case TEST_GETPWUID: @@ -452,7 +452,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(passwd, &td, passwd_test_getpwuid, (void *)&td); else - rv = DO_1PASS_TEST(passwd, &td_snap, + rv = DO_1PASS_TEST(passwd, &td_snap, passwd_test_getpwuid, (void *)&td_snap); break; case TEST_GETPWENT: @@ -465,7 +465,7 @@ main(int argc, char **argv) break; case TEST_GETPWENT_2PASS: TEST_DATA_INIT(passwd, &td_2pass, clone_passwd, free_passwd); - rv = passwd_fill_test_data(&td_2pass); + rv = passwd_fill_test_data(&td_2pass); if (rv != -1) rv = DO_2PASS_TEST(passwd, &td, &td_2pass, compare_passwd, NULL); @@ -473,7 +473,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) - rv = TEST_SNAPSHOT_FILE_WRITE(passwd, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(passwd, snapshot_file, &td, sdump_passwd); break; default: @@ -484,6 +484,6 @@ main(int argc, char **argv) fin: TEST_DATA_DESTROY(passwd, &td_snap); TEST_DATA_DESTROY(passwd, &td); - free(snapshot_file); + free(snapshot_file); return (rv); } diff --git a/tools/regression/lib/libc/nss/test-getrpc.c b/tools/regression/lib/libc/nss/test-getrpc.c index 4041e88..707186e 100644 --- a/tools/regression/lib/libc/nss/test-getrpc.c +++ b/tools/regression/lib/libc/nss/test-getrpc.c @@ -63,14 +63,14 @@ static void free_rpcent(struct rpcent *); static void sdump_rpcent(struct rpcent *, char *, size_t); static int rpcent_read_snapshot_func(struct rpcent *, char *); -static int rpcent_check_ambiguity(struct rpcent_test_data *, +static int rpcent_check_ambiguity(struct rpcent_test_data *, struct rpcent *); static int rpcent_fill_test_data(struct rpcent_test_data *); static int rpcent_test_correctness(struct rpcent *, void *); static int rpcent_test_getrpcbyname(struct rpcent *, void *); static int rpcent_test_getrpcbynumber(struct rpcent *, void *); static int rpcent_test_getrpcent(struct rpcent *, void *); - + static void usage(void) __attribute__((__noreturn__)); IMPLEMENT_TEST_DATA(rpcent) @@ -83,28 +83,28 @@ clone_rpcent(struct rpcent *dest, struct rpcent const *src) { assert(dest != NULL); assert(src != NULL); - + char **cp; int aliases_num; - + memset(dest, 0, sizeof(struct rpcent)); - + if (src->r_name != NULL) { dest->r_name = strdup(src->r_name); assert(dest->r_name != NULL); } - + dest->r_number = src->r_number; - + if (src->r_aliases != NULL) { aliases_num = 0; for (cp = src->r_aliases; *cp; ++cp) ++aliases_num; - + dest->r_aliases = (char **)malloc((aliases_num+1) * (sizeof(char *))); assert(dest->r_aliases != NULL); memset(dest->r_aliases, 0, (aliases_num+1) * (sizeof(char *))); - + for (cp = src->r_aliases; *cp; ++cp) { dest->r_aliases[cp - src->r_aliases] = strdup(*cp); assert(dest->r_aliases[cp - src->r_aliases] != NULL); @@ -112,50 +112,50 @@ clone_rpcent(struct rpcent *dest, struct rpcent const *src) } } -static void +static void free_rpcent(struct rpcent *rpc) { char **cp; - + assert(rpc != NULL); - + free(rpc->r_name); - + for (cp = rpc->r_aliases; *cp; ++cp) free(*cp); free(rpc->r_aliases); } -static int +static int compare_rpcent(struct rpcent *rpc1, struct rpcent *rpc2, void *mdata) { char **c1, **c2; - + if (rpc1 == rpc2) return 0; - + if ((rpc1 == NULL) || (rpc2 == NULL)) goto errfin; - + if ((strcmp(rpc1->r_name, rpc2->r_name) != 0) || (rpc1->r_number != rpc2->r_number)) goto errfin; - + c1 = rpc1->r_aliases; c2 = rpc2->r_aliases; - + if ((rpc1->r_aliases == NULL) || (rpc2->r_aliases == NULL)) goto errfin; - + for (;*c1 && *c2; ++c1, ++c2) if (strcmp(*c1, *c2) != 0) goto errfin; - + if ((*c1 != '\0') || (*c2 != '\0')) goto errfin; - + return 0; - + errfin: if ((debug) && (mdata == NULL)) { printf("following structures are not equal:\n"); @@ -171,14 +171,14 @@ sdump_rpcent(struct rpcent *rpc, char *buffer, size_t buflen) { char **cp; int written; - + written = snprintf(buffer, buflen, "%s %d", - rpc->r_name, rpc->r_number); + rpc->r_name, rpc->r_number); buffer += written; if (written > buflen) return; buflen -= written; - + if (rpc->r_aliases != NULL) { if (*(rpc->r_aliases) != '\0') { for (cp = rpc->r_aliases; *cp; ++cp) { @@ -187,9 +187,9 @@ sdump_rpcent(struct rpcent *rpc, char *buffer, size_t buflen) if (written > buflen) return; buflen -= written; - + if (buflen == 0) - return; + return; } } else snprintf(buffer, buflen, " noaliases"); @@ -206,7 +206,7 @@ rpcent_read_snapshot_func(struct rpcent *rpc, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + i = 0; sl = NULL; ps = line; @@ -230,10 +230,10 @@ rpcent_read_snapshot_func(struct rpcent *rpc, char *line) if (sl == NULL) { if (strcmp(s, "(null)") == 0) return (0); - + sl = sl_init(); assert(sl != NULL); - + if (strcmp(s, "noaliases") != 0) { ts = strdup(s); assert(ts != NULL); @@ -244,7 +244,7 @@ rpcent_read_snapshot_func(struct rpcent *rpc, char *line) assert(ts != NULL); sl_add(sl, ts); } - break; + break; }; ++i; } @@ -254,16 +254,16 @@ rpcent_read_snapshot_func(struct rpcent *rpc, char *line) memset(rpc, 0, sizeof(struct rpcent)); return (-1); } - + sl_add(sl, NULL); rpc->r_aliases = sl->sl_str; /* NOTE: is it a dirty hack or not? */ - free(sl); + free(sl); return (0); } -static void +static void dump_rpcent(struct rpcent *result) { if (result != NULL) { @@ -278,7 +278,7 @@ static int rpcent_fill_test_data(struct rpcent_test_data *td) { struct rpcent *rpc; - + setrpcent(1); while ((rpc = getrpcent()) != NULL) { if (rpcent_test_correctness(rpc, NULL) == 0) @@ -287,7 +287,7 @@ rpcent_fill_test_data(struct rpcent_test_data *td) return (-1); } endrpcent(); - + return (0); } @@ -298,39 +298,39 @@ rpcent_test_correctness(struct rpcent *rpc, void *mdata) printf("testing correctness with the following data:\n"); dump_rpcent(rpc); } - + if (rpc == NULL) goto errfin; - + if (rpc->r_name == NULL) goto errfin; - + if (rpc->r_number < 0) goto errfin; - + if (rpc->r_aliases == NULL) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } /* rpcent_check_ambiguity() is needed when one port+rpc is associated with * more than one peice (these cases are usually marked as PROBLEM in - * /etc/peices. This functions is needed also when one peice+rpc is + * /etc/peices. This functions is needed also when one peice+rpc is * associated with several ports. We have to check all the rpcent structures * to make sure that rpc really exists and correct */ static int rpcent_check_ambiguity(struct rpcent_test_data *td, struct rpcent *rpc) { - + return (TEST_DATA_FIND(rpcent, td, rpc, compare_rpcent, NULL) != NULL ? 0 : -1); } @@ -340,7 +340,7 @@ rpcent_test_getrpcbyname(struct rpcent *rpc_model, void *mdata) { char **alias; struct rpcent *rpc; - + if (debug) { printf("testing getrpcbyname() with the following data:\n"); dump_rpcent(rpc_model); @@ -349,32 +349,32 @@ rpcent_test_getrpcbyname(struct rpcent *rpc_model, void *mdata) rpc = getrpcbyname(rpc_model->r_name); if (rpcent_test_correctness(rpc, NULL) != 0) goto errfin; - + if ((compare_rpcent(rpc, rpc_model, NULL) != 0) && - (rpcent_check_ambiguity((struct rpcent_test_data *)mdata, rpc) + (rpcent_check_ambiguity((struct rpcent_test_data *)mdata, rpc) !=0)) goto errfin; - + for (alias = rpc_model->r_aliases; *alias; ++alias) { rpc = getrpcbyname(*alias); - + if (rpcent_test_correctness(rpc, NULL) != 0) goto errfin; - + if ((compare_rpcent(rpc, rpc_model, NULL) != 0) && (rpcent_check_ambiguity( (struct rpcent_test_data *)mdata, rpc) != 0)) goto errfin; } - + if (debug) printf("ok\n"); return (0); - + errfin: if (debug) printf("not ok\n"); - + return (-1); } @@ -382,14 +382,14 @@ static int rpcent_test_getrpcbynumber(struct rpcent *rpc_model, void *mdata) { struct rpcent *rpc; - + if (debug) { printf("testing getrpcbyport() with the following data...\n"); dump_rpcent(rpc_model); - } - + } + rpc = getrpcbynumber(rpc_model->r_number); - if ((rpcent_test_correctness(rpc, NULL) != 0) || + if ((rpcent_test_correctness(rpc, NULL) != 0) || ((compare_rpcent(rpc, rpc_model, NULL) != 0) && (rpcent_check_ambiguity((struct rpcent_test_data *)mdata, rpc) != 0))) { @@ -403,7 +403,7 @@ rpcent_test_getrpcbynumber(struct rpcent *rpc_model, void *mdata) } } -static int +static int rpcent_test_getrpcent(struct rpcent *rpc, void *mdata) { /* Only correctness can be checked when doing 1-pass test for @@ -427,10 +427,10 @@ main(int argc, char **argv) char *snapshot_file; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; while ((c = getopt(argc, argv, "nve2ds:")) != -1) switch (c) { @@ -455,18 +455,18 @@ main(int argc, char **argv) default: usage(); } - + TEST_DATA_INIT(rpcent, &td, clone_rpcent, free_rpcent); TEST_DATA_INIT(rpcent, &td_snap, clone_rpcent, free_rpcent); if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -475,12 +475,12 @@ main(int argc, char **argv) rv = 0; goto fin; } - + TEST_SNAPSHOT_FILE_READ(rpcent, snapshot_file, &td_snap, rpcent_read_snapshot_func); } } - + rv = rpcent_fill_test_data(&td); if (rv == -1) return (-1); @@ -490,7 +490,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(rpcent, &td, rpcent_test_getrpcbyname, (void *)&td); else - rv = DO_1PASS_TEST(rpcent, &td_snap, + rv = DO_1PASS_TEST(rpcent, &td_snap, rpcent_test_getrpcbyname, (void *)&td_snap); break; case TEST_GETRPCBYNUMBER: @@ -498,7 +498,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(rpcent, &td, rpcent_test_getrpcbynumber, (void *)&td); else - rv = DO_1PASS_TEST(rpcent, &td_snap, + rv = DO_1PASS_TEST(rpcent, &td_snap, rpcent_test_getrpcbynumber, (void *)&td_snap); break; case TEST_GETRPCENT: @@ -511,7 +511,7 @@ main(int argc, char **argv) break; case TEST_GETRPCENT_2PASS: TEST_DATA_INIT(rpcent, &td_2pass, clone_rpcent, free_rpcent); - rv = rpcent_fill_test_data(&td_2pass); + rv = rpcent_fill_test_data(&td_2pass); if (rv != -1) rv = DO_2PASS_TEST(rpcent, &td, &td_2pass, compare_rpcent, NULL); @@ -519,7 +519,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) - rv = TEST_SNAPSHOT_FILE_WRITE(rpcent, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(rpcent, snapshot_file, &td, sdump_rpcent); break; default: @@ -530,6 +530,6 @@ main(int argc, char **argv) fin: TEST_DATA_DESTROY(rpcent, &td_snap); TEST_DATA_DESTROY(rpcent, &td); - free(snapshot_file); + free(snapshot_file); return (rv); } diff --git a/tools/regression/lib/libc/nss/test-getserv.c b/tools/regression/lib/libc/nss/test-getserv.c index 79d42f0..31e4700 100644 --- a/tools/regression/lib/libc/nss/test-getserv.c +++ b/tools/regression/lib/libc/nss/test-getserv.c @@ -63,14 +63,14 @@ static void free_servent(struct servent *); static void sdump_servent(struct servent *, char *, size_t); static int servent_read_snapshot_func(struct servent *, char *); -static int servent_check_ambiguity(struct servent_test_data *, +static int servent_check_ambiguity(struct servent_test_data *, struct servent *); static int servent_fill_test_data(struct servent_test_data *); static int servent_test_correctness(struct servent *, void *); static int servent_test_getservbyname(struct servent *, void *); static int servent_test_getservbyport(struct servent *, void *); static int servent_test_getservent(struct servent *, void *); - + static void usage(void) __attribute__((__noreturn__)); IMPLEMENT_TEST_DATA(servent) @@ -83,32 +83,32 @@ clone_servent(struct servent *dest, struct servent const *src) { assert(dest != NULL); assert(src != NULL); - + char **cp; int aliases_num; - + memset(dest, 0, sizeof(struct servent)); - + if (src->s_name != NULL) { dest->s_name = strdup(src->s_name); assert(dest->s_name != NULL); } - + if (src->s_proto != NULL) { dest->s_proto = strdup(src->s_proto); assert(dest->s_proto != NULL); } dest->s_port = src->s_port; - + if (src->s_aliases != NULL) { aliases_num = 0; for (cp = src->s_aliases; *cp; ++cp) ++aliases_num; - + dest->s_aliases = (char **)malloc((aliases_num+1) * (sizeof(char *))); assert(dest->s_aliases != NULL); memset(dest->s_aliases, 0, (aliases_num+1) * (sizeof(char *))); - + for (cp = src->s_aliases; *cp; ++cp) { dest->s_aliases[cp - src->s_aliases] = strdup(*cp); assert(dest->s_aliases[cp - src->s_aliases] != NULL); @@ -116,52 +116,52 @@ clone_servent(struct servent *dest, struct servent const *src) } } -static void +static void free_servent(struct servent *serv) { char **cp; - + assert(serv != NULL); - + free(serv->s_name); free(serv->s_proto); - + for (cp = serv->s_aliases; *cp; ++cp) free(*cp); free(serv->s_aliases); } -static int +static int compare_servent(struct servent *serv1, struct servent *serv2, void *mdata) { char **c1, **c2; - + if (serv1 == serv2) return 0; - + if ((serv1 == NULL) || (serv2 == NULL)) goto errfin; - + if ((strcmp(serv1->s_name, serv2->s_name) != 0) || (strcmp(serv1->s_proto, serv2->s_proto) != 0) || (serv1->s_port != serv2->s_port)) goto errfin; - + c1 = serv1->s_aliases; c2 = serv2->s_aliases; - + if ((serv1->s_aliases == NULL) || (serv2->s_aliases == NULL)) goto errfin; - + for (;*c1 && *c2; ++c1, ++c2) if (strcmp(*c1, *c2) != 0) goto errfin; - + if ((*c1 != '\0') || (*c2 != '\0')) goto errfin; - + return 0; - + errfin: if ((debug) && (mdata == NULL)) { printf("following structures are not equal:\n"); @@ -177,14 +177,14 @@ sdump_servent(struct servent *serv, char *buffer, size_t buflen) { char **cp; int written; - + written = snprintf(buffer, buflen, "%s %d %s", - serv->s_name, ntohs(serv->s_port), serv->s_proto); + serv->s_name, ntohs(serv->s_port), serv->s_proto); buffer += written; if (written > buflen) return; buflen -= written; - + if (serv->s_aliases != NULL) { if (*(serv->s_aliases) != '\0') { for (cp = serv->s_aliases; *cp; ++cp) { @@ -193,9 +193,9 @@ sdump_servent(struct servent *serv, char *buffer, size_t buflen) if (written > buflen) return; buflen -= written; - + if (buflen == 0) - return; + return; } } else snprintf(buffer, buflen, " noaliases"); @@ -212,7 +212,7 @@ servent_read_snapshot_func(struct servent *serv, char *line) if (debug) printf("1 line read from snapshot:\n%s\n", line); - + i = 0; sl = NULL; ps = line; @@ -242,10 +242,10 @@ servent_read_snapshot_func(struct servent *serv, char *line) if (sl == NULL) { if (strcmp(s, "(null)") == 0) return (0); - + sl = sl_init(); assert(sl != NULL); - + if (strcmp(s, "noaliases") != 0) { ts = strdup(s); assert(ts != NULL); @@ -256,7 +256,7 @@ servent_read_snapshot_func(struct servent *serv, char *line) assert(ts != NULL); sl_add(sl, ts); } - break; + break; }; ++i; } @@ -267,16 +267,16 @@ servent_read_snapshot_func(struct servent *serv, char *line) memset(serv, 0, sizeof(struct servent)); return (-1); } - + sl_add(sl, NULL); serv->s_aliases = sl->sl_str; /* NOTE: is it a dirty hack or not? */ - free(sl); + free(sl); return (0); } -static void +static void dump_servent(struct servent *result) { if (result != NULL) { @@ -291,7 +291,7 @@ static int servent_fill_test_data(struct servent_test_data *td) { struct servent *serv; - + setservent(1); while ((serv = getservent()) != NULL) { if (servent_test_correctness(serv, NULL) == 0) @@ -300,7 +300,7 @@ servent_fill_test_data(struct servent_test_data *td) return (-1); } endservent(); - + return (0); } @@ -311,42 +311,42 @@ servent_test_correctness(struct servent *serv, void *mdata) printf("testing correctness with the following data:\n"); dump_servent(serv); } - + if (serv == NULL) goto errfin; - + if (serv->s_name == NULL) goto errfin; - + if (serv->s_proto == NULL) goto errfin; - + if (ntohs(serv->s_port < 0)) goto errfin; - + if (serv->s_aliases == NULL) goto errfin; - + if (debug) printf("correct\n"); - - return (0); + + return (0); errfin: if (debug) printf("incorrect\n"); - + return (-1); } /* servent_check_ambiguity() is needed when one port+proto is associated with * more than one service (these cases are usually marked as PROBLEM in - * /etc/services. This functions is needed also when one service+proto is + * /etc/services. This functions is needed also when one service+proto is * associated with several ports. We have to check all the servent structures * to make sure that serv really exists and correct */ static int servent_check_ambiguity(struct servent_test_data *td, struct servent *serv) { - + return (TEST_DATA_FIND(servent, td, serv, compare_servent, NULL) != NULL ? 0 : -1); } @@ -356,7 +356,7 @@ servent_test_getservbyname(struct servent *serv_model, void *mdata) { char **alias; struct servent *serv; - + if (debug) { printf("testing getservbyname() with the following data:\n"); dump_servent(serv_model); @@ -365,32 +365,32 @@ servent_test_getservbyname(struct servent *serv_model, void *mdata) serv = getservbyname(serv_model->s_name, serv_model->s_proto); if (servent_test_correctness(serv, NULL) != 0) goto errfin; - + if ((compare_servent(serv, serv_model, NULL) != 0) && - (servent_check_ambiguity((struct servent_test_data *)mdata, serv) + (servent_check_ambiguity((struct servent_test_data *)mdata, serv) !=0)) goto errfin; - + for (alias = serv_model->s_aliases; *alias; ++alias) { serv = getservbyname(*alias, serv_model->s_proto); - + if (servent_test_correctness(serv, NULL) != 0) goto errfin; - + if ((compare_servent(serv, serv_model, NULL) != 0) && (servent_check_ambiguity( (struct servent_test_data *)mdata, serv) != 0)) goto errfin; } - + if (debug) printf("ok\n"); return (0); - + errfin: if (debug) printf("not ok\n"); - + return (-1); } @@ -398,14 +398,14 @@ static int servent_test_getservbyport(struct servent *serv_model, void *mdata) { struct servent *serv; - + if (debug) { printf("testing getservbyport() with the following data...\n"); dump_servent(serv_model); - } - + } + serv = getservbyport(serv_model->s_port, serv_model->s_proto); - if ((servent_test_correctness(serv, NULL) != 0) || + if ((servent_test_correctness(serv, NULL) != 0) || ((compare_servent(serv, serv_model, NULL) != 0) && (servent_check_ambiguity((struct servent_test_data *)mdata, serv) != 0))) { @@ -419,7 +419,7 @@ servent_test_getservbyport(struct servent *serv_model, void *mdata) } } -static int +static int servent_test_getservent(struct servent *serv, void *mdata) { /* Only correctness can be checked when doing 1-pass test for @@ -443,10 +443,10 @@ main(int argc, char **argv) char *snapshot_file; int rv; int c; - + if (argc < 2) usage(); - + snapshot_file = NULL; while ((c = getopt(argc, argv, "npe2ds:")) != -1) switch (c) { @@ -471,18 +471,18 @@ main(int argc, char **argv) default: usage(); } - + TEST_DATA_INIT(servent, &td, clone_servent, free_servent); TEST_DATA_INIT(servent, &td_snap, clone_servent, free_servent); if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -491,12 +491,12 @@ main(int argc, char **argv) rv = 0; goto fin; } - + TEST_SNAPSHOT_FILE_READ(servent, snapshot_file, &td_snap, servent_read_snapshot_func); } } - + rv = servent_fill_test_data(&td); if (rv == -1) return (-1); @@ -506,7 +506,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(servent, &td, servent_test_getservbyname, (void *)&td); else - rv = DO_1PASS_TEST(servent, &td_snap, + rv = DO_1PASS_TEST(servent, &td_snap, servent_test_getservbyname, (void *)&td_snap); break; case TEST_GETSERVBYPORT: @@ -514,7 +514,7 @@ main(int argc, char **argv) rv = DO_1PASS_TEST(servent, &td, servent_test_getservbyport, (void *)&td); else - rv = DO_1PASS_TEST(servent, &td_snap, + rv = DO_1PASS_TEST(servent, &td_snap, servent_test_getservbyport, (void *)&td_snap); break; case TEST_GETSERVENT: @@ -527,7 +527,7 @@ main(int argc, char **argv) break; case TEST_GETSERVENT_2PASS: TEST_DATA_INIT(servent, &td_2pass, clone_servent, free_servent); - rv = servent_fill_test_data(&td_2pass); + rv = servent_fill_test_data(&td_2pass); if (rv != -1) rv = DO_2PASS_TEST(servent, &td, &td_2pass, compare_servent, NULL); @@ -535,7 +535,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) - rv = TEST_SNAPSHOT_FILE_WRITE(servent, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(servent, snapshot_file, &td, sdump_servent); break; default: @@ -546,6 +546,6 @@ main(int argc, char **argv) fin: TEST_DATA_DESTROY(servent, &td_snap); TEST_DATA_DESTROY(servent, &td); - free(snapshot_file); + free(snapshot_file); return (rv); } diff --git a/tools/regression/lib/libc/nss/test-getusershell.c b/tools/regression/lib/libc/nss/test-getusershell.c index 8682591..b7b835f 100644 --- a/tools/regression/lib/libc/nss/test-getusershell.c +++ b/tools/regression/lib/libc/nss/test-getusershell.c @@ -67,29 +67,29 @@ IMPLEMENT_TEST_DATA(usershell) IMPLEMENT_TEST_FILE_SNAPSHOT(usershell) IMPLEMENT_2PASS_TEST(usershell) -static void +static void clone_usershell(struct usershell *dest, struct usershell const *src) { assert(dest != NULL); assert(src != NULL); - + if (src->path != NULL) { dest->path = strdup(src->path); assert(dest->path != NULL); } } -static int +static int compare_usershell(struct usershell *us1, struct usershell *us2, void *mdata) { int rv; - + assert(us1 != NULL); assert(us2 != NULL); - + dump_usershell(us1); dump_usershell(us2); - + if (us1 == us2) return (0); @@ -99,17 +99,17 @@ compare_usershell(struct usershell *us1, struct usershell *us2, void *mdata) dump_usershell(us1); dump_usershell(us2); } - + return (rv); } -static void +static void free_usershell(struct usershell *us) { free(us->path); } -static void +static void sdump_usershell(struct usershell *us, char *buffer, size_t buflen) { snprintf(buffer, buflen, "%s", us->path); @@ -126,12 +126,12 @@ dump_usershell(struct usershell *us) printf("(null)\n"); } -static int +static int usershell_read_snapshot_func(struct usershell *us, char *line) { us->path = strdup(line); assert(us->path != NULL); - + return (0); } @@ -152,7 +152,7 @@ main(int argc, char **argv) char *snapshot_file; int rv; int c; - + if (argc < 2) usage(); @@ -170,10 +170,10 @@ main(int argc, char **argv) usage(); } } - + TEST_DATA_INIT(usershell, &td, clone_usershell, free_usershell); TEST_DATA_INIT(usershell, &td_snap, clone_usershell, free_usershell); - + setusershell(); while ((ushell.path = getusershell()) != NULL) { if (debug) { @@ -183,17 +183,17 @@ main(int argc, char **argv) TEST_DATA_APPEND(usershell, &td, &ushell); } endusershell(); - - + + if (snapshot_file != NULL) { - if (access(snapshot_file, W_OK | R_OK) != 0) { + if (access(snapshot_file, W_OK | R_OK) != 0) { if (errno == ENOENT) method = TEST_BUILD_SNAPSHOT; else { if (debug) printf("can't access the snapshot file %s\n", snapshot_file); - + rv = -1; goto fin; } @@ -207,7 +207,7 @@ main(int argc, char **argv) } } } - + switch (method) { case TEST_GETUSERSHELL: if (snapshot_file != NULL) { @@ -217,7 +217,7 @@ main(int argc, char **argv) break; case TEST_BUILD_SNAPSHOT: if (snapshot_file != NULL) { - rv = TEST_SNAPSHOT_FILE_WRITE(usershell, snapshot_file, &td, + rv = TEST_SNAPSHOT_FILE_WRITE(usershell, snapshot_file, &td, sdump_usershell); } break; diff --git a/tools/regression/lib/libc/nss/testutil.h b/tools/regression/lib/libc/nss/testutil.h index acd69ac..711c49f 100644 --- a/tools/regression/lib/libc/nss/testutil.h +++ b/tools/regression/lib/libc/nss/testutil.h @@ -53,8 +53,8 @@ int __##ent##_test_data_compare(struct ent##_test_data *, \ void *), void *); \ struct ent *__##ent##_test_data_find(struct ent##_test_data *, struct ent *,\ int (*)(struct ent *, struct ent *, void *), void *); \ -void __##ent##_test_data_clear(struct ent##_test_data *); - +void __##ent##_test_data_clear(struct ent##_test_data *); + #define TEST_DATA_INIT(ent, td, clonef, freef)\ __##ent##_test_data_init(td, clonef, freef) #define TEST_DATA_DESTROY(ent, td) __##ent##_test_data_destroy(td) @@ -191,9 +191,8 @@ __##ent##_test_data_clear(struct ent##_test_data *td) \ td->free_func(&e->data); \ free(e); \ } \ -} +} - \ #define DECLARE_TEST_FILE_SNAPSHOT(ent) \ struct ent##_snp_param { \ FILE *fp; \ @@ -204,8 +203,8 @@ int __##ent##_snapshot_write_func(struct ent *, void *); \ int __##ent##_snapshot_write(char const *, struct ent##_test_data *, \ void (*)(struct ent *, char *, size_t)); \ int __##ent##_snapshot_read(char const *, struct ent##_test_data *, \ - int (*)(struct ent *, char *)); - + int (*)(struct ent *, char *)); + #define TEST_SNAPSHOT_FILE_WRITE(ent, fname, td, f) \ __##ent##_snapshot_write(fname, td, f) #define TEST_SNAPSHOT_FILE_READ(ent, fname, td, f) \ @@ -294,8 +293,8 @@ fin: \ #define DECLARE_1PASS_TEST(ent) \ int __##ent##_1pass_test(struct ent##_test_data *, \ int (*)(struct ent *, void *), \ - void *); - + void *); + #define DO_1PASS_TEST(ent, td, f, mdata) \ __##ent##_1pass_test(td, f, mdata) @@ -318,7 +317,7 @@ int __##ent##_2pass_test(struct ent##_test_data *, \ #define DO_2PASS_TEST(ent, td1, td2, f, mdata) \ __##ent##_2pass_test(td1, td2, f, mdata) - + #define IMPLEMENT_2PASS_TEST(ent) \ int \ __##ent##_2pass_test(struct ent##_test_data *td1, \ diff --git a/tools/regression/lib/libc/resolv/mach b/tools/regression/lib/libc/resolv/mach index f3c3981..ab7ce24 100644 --- a/tools/regression/lib/libc/resolv/mach +++ b/tools/regression/lib/libc/resolv/mach @@ -1,3 +1,5 @@ +# $FreeBSD$ +localhost above.warped.net anoncvs.cirr.com anoncvs.isc.netbsd.org @@ -9,7 +11,6 @@ antioche.antioche.eu.org boulder.tele.dk centaurus.4web.cz chur.math.ntnu.no -cnftp.bjpu.edu.cn console.netbsd.org cvs.fi.netbsd.org cvs.mikrolahti.fi diff --git a/tools/regression/lib/libc/resolv/resolv.c b/tools/regression/lib/libc/resolv/resolv.c index d481ecf..2ec3eeb 100644 --- a/tools/regression/lib/libc/resolv/resolv.c +++ b/tools/regression/lib/libc/resolv/resolv.c @@ -90,8 +90,11 @@ load(const char *fname) char c = line[len]; char *ptr; line[len] = '\0'; - for (ptr = strtok(line, WS); ptr; ptr = strtok(NULL, WS)) + for (ptr = strtok(line, WS); ptr; ptr = strtok(NULL, WS)) { + if (ptr == '\0' || ptr[0] == '#') + continue; sl_add(hosts, strdup(ptr)); + } line[len] = c; } diff --git a/tools/regression/lib/libc/stdio/Makefile b/tools/regression/lib/libc/stdio/Makefile deleted file mode 100644 index 688ea2a..0000000 --- a/tools/regression/lib/libc/stdio/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# $FreeBSD$ - -TESTS= test-fdopen \ - test-fopen \ - test-freopen \ - test-getdelim \ - test-mkostemp \ - test-open_memstream \ - test-open_wmemstream \ - test-perror \ - test-print-positional \ - test-printbasic \ - test-printfloat \ - test-scanfloat - -CFLAGS+= -lm - -.PHONY: tests -tests: ${TESTS} - for p in ${TESTS}; do ${.OBJDIR}/$$p; done - -.PHONY: clean -clean: - -rm -f ${TESTS} diff --git a/tools/regression/lib/libc/stdio/test-fdopen.c b/tools/regression/lib/libc/stdio/test-fdopen.c deleted file mode 100644 index 33b33c5..0000000 --- a/tools/regression/lib/libc/stdio/test-fdopen.c +++ /dev/null @@ -1,105 +0,0 @@ -/*- - * Copyright (c) 2014 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <fcntl.h> -#include <stdbool.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -static int testnum = 1; - -static void -runtest(const char *fname, int intmode, const char *strmode, bool success) -{ - FILE *fp; - int fd; - - fd = open(fname, intmode); - if (fd == -1) { - printf("not ok %d - open(\"%s\", %#x) failed\n", - testnum++, fname, intmode); - return; - } - fp = fdopen(fd, strmode); - if (fp == NULL) { - close(fd); - if (success) - printf("not ok %d - " - "fdopen(open(\"%s\", %#x), \"%s\") failed\n", - testnum++, fname, intmode, strmode); - else - printf("ok %d - " - "fdopen(open(\"%s\", %#x), \"%s\") failed\n", - testnum++, fname, intmode, strmode); - return; - } - if (success) - printf("ok %d - " - "fdopen(open(\"%s\", %#x), \"%s\") succeeded\n", - testnum++, fname, intmode, strmode); - else - printf("not ok %d - " - "fdopen(open(\"%s\", %#x), \"%s\") succeeded\n", - testnum++, fname, intmode, strmode); - fclose(fp); -} - -/* - * Test program for fdopen(). - */ -int -main(int argc, char *argv[]) -{ - printf("1..19\n"); - runtest("/dev/null", O_RDONLY, "r", true); - runtest("/dev/null", O_WRONLY, "r", false); - runtest("/dev/null", O_RDWR, "r", true); - runtest("/dev/null", O_RDONLY, "w", false); - runtest("/dev/null", O_WRONLY, "w", true); - runtest("/dev/null", O_RDWR, "w", true); - runtest("/dev/null", O_RDONLY, "a", false); - runtest("/dev/null", O_WRONLY, "a", true); - runtest("/dev/null", O_RDWR, "a", true); - runtest("/dev/null", O_RDONLY, "r+", false); - runtest("/dev/null", O_WRONLY, "r+", false); - runtest("/dev/null", O_RDWR, "r+", true); - runtest("/dev/null", O_RDONLY, "w+", false); - runtest("/dev/null", O_WRONLY, "w+", false); - runtest("/dev/null", O_RDWR, "w+", true); - runtest("/bin/sh", O_EXEC, "r", false); - runtest("/bin/sh", O_EXEC, "w", false); - runtest("/bin/sh", O_EXEC, "r+", false); - runtest("/bin/sh", O_EXEC, "w+", false); - - return 0; -} - -/* vim:ts=8:cin:sw=8 - * */ diff --git a/tools/regression/lib/libc/stdio/test-fdopen.t b/tools/regression/lib/libc/stdio/test-fdopen.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-fdopen.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-fopen.c b/tools/regression/lib/libc/stdio/test-fopen.c deleted file mode 100644 index 8605717..0000000 --- a/tools/regression/lib/libc/stdio/test-fopen.c +++ /dev/null @@ -1,113 +0,0 @@ -/*- - * Copyright (c) 2013 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> - -/* - * O_ACCMODE is currently defined incorrectly. This is what it should be. - * Various code depends on the incorrect value. - */ -#define CORRECT_O_ACCMODE (O_ACCMODE | O_EXEC) - -static int testnum = 1; - -static void -runtest(const char *fname, const char *mode) -{ - FILE *fp; - int fd, flags, wantedflags; - - fp = fopen(fname, mode); - if (fp == NULL) { - printf("not ok %d - fopen(\"%s\", \"%s\") failed\n", - testnum++, fname, mode); - printf("not ok %d - FD_CLOEXEC # SKIP\n", - testnum++); - return; - } - fd = fileno(fp); - if (fd < 0) - printf("not ok %d - fileno() failed\n", testnum++); - else - printf("ok %d - fopen(\"%s\", \"%s\") and fileno() succeeded\n", - testnum++, fname, mode); - if (fcntl(fd, F_GETFD) == (strchr(mode, 'e') != NULL ? FD_CLOEXEC : 0)) - printf("ok %d - FD_CLOEXEC flag correct\n", testnum++); - else - printf("not ok %d - FD_CLOEXEC flag incorrect\n", testnum++); - flags = fcntl(fd, F_GETFL); - if (strchr(mode, '+')) - wantedflags = O_RDWR | (*mode == 'a' ? O_APPEND : 0); - else if (*mode == 'r') - wantedflags = O_RDONLY; - else if (*mode == 'w') - wantedflags = O_WRONLY; - else if (*mode == 'a') - wantedflags = O_WRONLY | O_APPEND; - else - wantedflags = -1; - if (wantedflags == -1) - printf("not ok %d - unrecognized mode\n", testnum++); - else if ((flags & (CORRECT_O_ACCMODE | O_APPEND)) == wantedflags) - printf("ok %d - correct access mode\n", testnum++); - else - printf("not ok %d - incorrect access mode\n", testnum++); - fclose(fp); -} - -/* - * Test program for fopen(). - */ -int -main(int argc, char *argv[]) -{ - printf("1..45\n"); - runtest("/dev/null", "r"); - runtest("/dev/null", "r+"); - runtest("/dev/null", "w"); - runtest("/dev/null", "w+"); - runtest("/dev/null", "a"); - runtest("/dev/null", "a+"); - runtest("/dev/null", "re"); - runtest("/dev/null", "r+e"); - runtest("/dev/null", "we"); - runtest("/dev/null", "w+e"); - runtest("/dev/null", "ae"); - runtest("/dev/null", "a+e"); - runtest("/dev/null", "re+"); - runtest("/dev/null", "we+"); - runtest("/dev/null", "ae+"); - - return 0; -} - -/* vim:ts=8:cin:sw=8 - * */ diff --git a/tools/regression/lib/libc/stdio/test-fopen.t b/tools/regression/lib/libc/stdio/test-fopen.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-fopen.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-freopen.c b/tools/regression/lib/libc/stdio/test-freopen.c deleted file mode 100644 index 37f3598..0000000 --- a/tools/regression/lib/libc/stdio/test-freopen.c +++ /dev/null @@ -1,109 +0,0 @@ -/*- - * Copyright (c) 2014 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdbool.h> -#include <stdio.h> -#include <string.h> - -static int testnum = 1; - -static void -runtest(const char *fname1, const char *mode1, const char *fname2, - const char *mode2, bool success) -{ - FILE *fp1, *fp2; - const char *fname2_print; - - fname2_print = fname2 != NULL ? fname2 : "<NULL>"; - fp1 = fopen(fname1, mode1); - if (fp1 == NULL) { - printf("not ok %d - fopen(\"%s\", \"%s\") failed\n", - testnum++, fname1, mode1); - return; - } - fp2 = freopen(fname2, mode2, fp1); - if (fp2 == NULL) { - fclose(fp1); - if (success) - printf("not ok %d - " - "freopen(\"%s\", \"%s\", fopen(\"%s\", \"%s\")) " - "failed\n", - testnum++, fname2_print, mode2, fname1, mode1); - else - printf("ok %d - " - "freopen(\"%s\", \"%s\", fopen(\"%s\", \"%s\")) " - "failed\n", - testnum++, fname2_print, mode2, fname1, mode1); - return; - } - if (success) - printf("ok %d - " - "freopen(\"%s\", \"%s\", fopen(\"%s\", \"%s\")) " - "succeeded\n", - testnum++, fname2_print, mode2, fname1, mode1); - else - printf("not ok %d - " - "freopen(\"%s\", \"%s\", fopen(\"%s\", \"%s\")) " - "succeeded\n", - testnum++, fname2_print, mode2, fname1, mode1); - fclose(fp2); -} - -/* - * Test program for freopen(). - */ -int -main(int argc, char *argv[]) -{ - printf("1..19\n"); - runtest("/dev/null", "r", NULL, "r", true); - runtest("/dev/null", "w", NULL, "r", false); - runtest("/dev/null", "r+", NULL, "r", true); - runtest("/dev/null", "r", NULL, "w", false); - runtest("/dev/null", "w", NULL, "w", true); - runtest("/dev/null", "r+", NULL, "w", true); - runtest("/dev/null", "r", NULL, "a", false); - runtest("/dev/null", "w", NULL, "a", true); - runtest("/dev/null", "r+", NULL, "a", true); - runtest("/dev/null", "r", NULL, "r+", false); - runtest("/dev/null", "w", NULL, "r+", false); - runtest("/dev/null", "r+", NULL, "r+", true); - runtest("/dev/null", "r", NULL, "w+", false); - runtest("/dev/null", "w", NULL, "w+", false); - runtest("/dev/null", "r+", NULL, "w+", true); - runtest("/bin/sh", "r", NULL, "r", true); - runtest("/bin/sh", "r", "/bin/sh", "r", true); - runtest("/bin/sh", "r", "/dev/null", "r", true); - runtest("/bin/sh", "r", "/dev/null", "w", true); - - return 0; -} - -/* vim:ts=8:cin:sw=8 - * */ diff --git a/tools/regression/lib/libc/stdio/test-freopen.t b/tools/regression/lib/libc/stdio/test-freopen.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-freopen.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-getdelim.c b/tools/regression/lib/libc/stdio/test-getdelim.c deleted file mode 100644 index c68c21e..0000000 --- a/tools/regression/lib/libc/stdio/test-getdelim.c +++ /dev/null @@ -1,187 +0,0 @@ -/*- - * Copyright (c) 2009 David Schultz <das@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#define _WITH_GETLINE -#include <assert.h> -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define CHUNK_MAX 10 - -/* The assertions depend on this string. */ -char apothegm[] = "All work and no play\0 makes Jack a dull boy.\n"; - -/* - * This is a neurotic reader function designed to give getdelim() a - * hard time. It reads through the string `apothegm' and returns a - * random number of bytes up to the requested length. - */ -static int -_reader(void *cookie, char *buf, int len) -{ - size_t *offp = cookie; - size_t r; - - r = random() % CHUNK_MAX + 1; - if (len > r) - len = r; - if (len > sizeof(apothegm) - *offp) - len = sizeof(apothegm) - *offp; - memcpy(buf, apothegm + *offp, len); - *offp += len; - return (len); -} - -static FILE * -mkfilebuf(void) -{ - size_t *offp; - - offp = malloc(sizeof(*offp)); /* XXX leak */ - *offp = 0; - return (fropen(offp, _reader)); -} - -int -main(int argc, char *argv[]) -{ - FILE *fp; - char *line; - size_t linecap; - int i, n; - - srandom(0); - - printf("1..6\n"); - - /* - * Test multiple times with different buffer sizes - * and different _reader() return values. - */ - errno = 0; - for (i = 0; i < 8; i++) { - fp = mkfilebuf(); - linecap = i; - line = malloc(i); - /* First line: the full apothegm */ - assert(getline(&line, &linecap, fp) == sizeof(apothegm) - 1); - assert(memcmp(line, apothegm, sizeof(apothegm)) == 0); - assert(linecap >= sizeof(apothegm)); - /* Second line: the NUL terminator following the newline */ - assert(getline(&line, &linecap, fp) == 1); - assert(line[0] == '\0' && line[1] == '\0'); - /* Third line: EOF */ - line[0] = 'X'; - assert(getline(&line, &linecap, fp) == -1); - assert(line[0] == '\0'); - free(line); - line = NULL; - assert(feof(fp)); - assert(!ferror(fp)); - fclose(fp); - } - assert(errno == 0); - printf("ok 1 - getline basic\n"); - - /* Make sure read errors are handled properly. */ - linecap = 0; - errno = 0; - assert(getline(&line, &linecap, stdout) == -1); - assert(errno == EBADF); - errno = 0; - assert(getdelim(&line, &linecap, 'X', stdout) == -1); - assert(errno == EBADF); - assert(ferror(stdout)); - printf("ok 2 - stream error\n"); - - /* Make sure NULL linep or linecapp pointers are handled. */ - fp = mkfilebuf(); - assert(getline(NULL, &linecap, fp) == -1); - assert(errno == EINVAL); - assert(getline(&line, NULL, fp) == -1); - assert(errno == EINVAL); - assert(ferror(fp)); - fclose(fp); - printf("ok 3 - invalid params\n"); - - /* Make sure getline() allocates memory as needed if fp is at EOF. */ - errno = 0; - fp = mkfilebuf(); - while (!feof(fp)) /* advance to EOF; can't fseek this stream */ - getc(fp); - free(line); - line = NULL; - linecap = 0; - assert(getline(&line, &linecap, fp) == -1); - assert(line[0] == '\0'); - assert(linecap > 0); - assert(errno == 0); - assert(feof(fp)); - assert(!ferror(fp)); - fclose(fp); - printf("ok 4 - eof\n"); - - /* Make sure a NUL delimiter works. */ - fp = mkfilebuf(); - n = strlen(apothegm); - assert(getdelim(&line, &linecap, '\0', fp) == n + 1); - assert(strcmp(line, apothegm) == 0); - assert(line[n + 1] == '\0'); - assert(linecap > n + 1); - n = strlen(apothegm + n + 1); - assert(getdelim(&line, &linecap, '\0', fp) == n + 1); - assert(line[n + 1] == '\0'); - assert(linecap > n + 1); - assert(errno == 0); - assert(!ferror(fp)); - fclose(fp); - printf("ok 5 - nul\n"); - - /* Make sure NULL *linep and zero *linecapp are handled. */ - fp = mkfilebuf(); - free(line); - line = NULL; - linecap = 42; - assert(getline(&line, &linecap, fp) == sizeof(apothegm) - 1); - assert(memcmp(line, apothegm, sizeof(apothegm)) == 0); - fp = mkfilebuf(); - free(line); - line = malloc(100); - linecap = 0; - assert(getline(&line, &linecap, fp) == sizeof(apothegm) - 1); - assert(memcmp(line, apothegm, sizeof(apothegm)) == 0); - free(line); - assert(!ferror(fp)); - fclose(fp); - printf("ok 6 - empty/NULL initial buffer\n"); - - exit(0); -} diff --git a/tools/regression/lib/libc/stdio/test-getdelim.t b/tools/regression/lib/libc/stdio/test-getdelim.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-getdelim.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-mkostemp.c b/tools/regression/lib/libc/stdio/test-mkostemp.c deleted file mode 100644 index 5f67c72..0000000 --- a/tools/regression/lib/libc/stdio/test-mkostemp.c +++ /dev/null @@ -1,164 +0,0 @@ -/*- - * Copyright (c) 2013 Jilles Tjoelker - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Test program for mkostemp(). - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/stat.h> - -#include <errno.h> -#include <fcntl.h> -#include <paths.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -static const char template[] = _PATH_TMP "mkostemp.XXXXXXXX"; -static int testnum; - -#define MISCFLAGS (O_APPEND | O_DIRECT | O_SHLOCK | O_EXLOCK | O_SYNC) - -static void -test_one(int oflags) -{ - char tmpf[sizeof(template)]; - struct stat st1, st2; - int fd; - - memcpy(tmpf, template, sizeof(tmpf)); - fd = mkostemp(tmpf, oflags); - if (fd < 0) { - printf("not ok %d - oflags=%#x " - "mkostemp() reported failure: %s\n", - testnum++, oflags, strerror(errno)); - return; - } - if (memcmp(tmpf, template, sizeof(tmpf) - 8 - 1) != 0) { - printf("not ok %d - oflags=%#x " - "returned pathname does not match template: %s\n", - testnum++, oflags, tmpf); - return; - } - do { - if (fcntl(fd, F_GETFD) != - (oflags & O_CLOEXEC ? FD_CLOEXEC : 0)) { - printf("not ok %d - oflags=%#x " - "close-on-exec flag incorrect\n", - testnum++, oflags); - break; - } - if ((fcntl(fd, F_GETFL) & MISCFLAGS) != (oflags & MISCFLAGS)) { - printf("not ok %d - oflags=%#x " - "open flags incorrect\n", - testnum++, oflags); - break; - } - if (stat(tmpf, &st1) == -1) { - printf("not ok %d - oflags=%#x " - "cannot stat returned pathname %s: %s\n", - testnum++, oflags, tmpf, strerror(errno)); - break; - } - if (fstat(fd, &st2) == -1) { - printf("not ok %d - oflags=%#x " - "cannot fstat returned fd %d: %s\n", - testnum++, oflags, fd, strerror(errno)); - break; - } - if (!S_ISREG(st1.st_mode) || (st1.st_mode & 0777) != 0600 || - st1.st_nlink != 1 || st1.st_size != 0) { - printf("not ok %d - oflags=%#x " - "named file attributes incorrect\n", - testnum++, oflags); - break; - } - if (!S_ISREG(st2.st_mode) || (st2.st_mode & 0777) != 0600 || - st2.st_nlink != 1 || st2.st_size != 0) { - printf("not ok %d - oflags=%#x " - "opened file attributes incorrect\n", - testnum++, oflags); - break; - } - if (st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino) { - printf("not ok %d - oflags=%#x " - "named and opened file do not match\n", - testnum++, oflags); - break; - } - (void)unlink(tmpf); - if (fstat(fd, &st2) == -1) - printf("not ok %d - oflags=%#x " - "cannot fstat returned fd %d again: %s\n", - testnum++, oflags, fd, strerror(errno)); - else if (st2.st_nlink != 0) - printf("not ok %d - oflags=%#x " - "st_nlink is not 0 after unlink\n", - testnum++, oflags); - else - printf("ok %d - oflags=%#x\n", testnum++, oflags); - (void)close(fd); - return; - } while (0); - (void)close(fd); - (void)unlink(tmpf); -} - -static void -test_badflags(void) -{ - char tmpf[sizeof(template)]; - - memcpy(tmpf, template, sizeof(tmpf)); - if (mkostemp(tmpf, O_CREAT) == -1) - printf("ok %d - mkostemp(O_CREAT) correctly failed\n", - testnum++); - else - printf("not ok %d - mkostemp(O_CREAT) wrongly succeeded\n", - testnum++); -} - -int -main(int argc, char *argv[]) -{ - int i; - const char *e; - - printf("1..5\n"); - testnum = 1; - - test_one(0); - test_one(O_CLOEXEC); - test_one(O_APPEND); - test_one(O_APPEND | O_CLOEXEC); - test_badflags(); - - return (0); -} diff --git a/tools/regression/lib/libc/stdio/test-mkostemp.t b/tools/regression/lib/libc/stdio/test-mkostemp.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-mkostemp.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-open_memstream.c b/tools/regression/lib/libc/stdio/test-open_memstream.c deleted file mode 100644 index fdbda30..0000000 --- a/tools/regression/lib/libc/stdio/test-open_memstream.c +++ /dev/null @@ -1,203 +0,0 @@ -/*- - * Copyright (c) 2013 Hudson River Trading LLC - * Written by: John H. Baldwin <jhb@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <err.h> -#include <errno.h> -#include <limits.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <wchar.h> - -static char *buf; -static size_t len; - -static void -assert_stream(const char *contents) -{ - if (strlen(contents) != len) - printf("bad length %zd for \"%s\"\n", len, contents); - else if (strncmp(buf, contents, strlen(contents)) != 0) - printf("bad buffer \"%s\" for \"%s\"\n", buf, contents); -} - -static void -open_group_test(void) -{ - FILE *fp; - off_t eob; - - fp = open_memstream(&buf, &len); - if (fp == NULL) - err(1, "failed to open stream"); - - fprintf(fp, "hello my world"); - fflush(fp); - assert_stream("hello my world"); - eob = ftello(fp); - rewind(fp); - fprintf(fp, "good-bye"); - fseeko(fp, eob, SEEK_SET); - fclose(fp); - assert_stream("good-bye world"); - free(buf); -} - -static void -simple_tests(void) -{ - static const char zerobuf[] = - { 'f', 'o', 'o', 0, 0, 0, 0, 'b', 'a', 'r', 0 }; - char c; - FILE *fp; - - fp = open_memstream(&buf, NULL); - if (fp != NULL) - errx(1, "did not fail to open stream"); - else if (errno != EINVAL) - err(1, "incorrect error for bad length pointer"); - fp = open_memstream(NULL, &len); - if (fp != NULL) - errx(1, "did not fail to open stream"); - else if (errno != EINVAL) - err(1, "incorrect error for bad buffer pointer"); - fp = open_memstream(&buf, &len); - if (fp == NULL) - err(1, "failed to open stream"); - fflush(fp); - assert_stream(""); - if (fwide(fp, 0) >= 0) - printf("stream is not byte-oriented\n"); - - fprintf(fp, "fo"); - fflush(fp); - assert_stream("fo"); - fputc('o', fp); - fflush(fp); - assert_stream("foo"); - rewind(fp); - fflush(fp); - assert_stream(""); - fseek(fp, 0, SEEK_END); - fflush(fp); - assert_stream("foo"); - - /* - * Test seeking out past the current end. Should zero-fill the - * intermediate area. - */ - fseek(fp, 4, SEEK_END); - fprintf(fp, "bar"); - fflush(fp); - - /* - * Can't use assert_stream() here since this should contain - * embedded null characters. - */ - if (len != 10) - printf("bad length %zd for zero-fill test\n", len); - else if (memcmp(buf, zerobuf, sizeof(zerobuf)) != 0) - printf("bad buffer for zero-fill test\n"); - - fseek(fp, 3, SEEK_SET); - fprintf(fp, " in "); - fflush(fp); - assert_stream("foo in "); - fseek(fp, 0, SEEK_END); - fflush(fp); - assert_stream("foo in bar"); - - rewind(fp); - if (fread(&c, sizeof(c), 1, fp) != 0) - printf("fread did not fail\n"); - else if (!ferror(fp)) - printf("error indicator not set after fread\n"); - else - clearerr(fp); - - fseek(fp, 4, SEEK_SET); - fprintf(fp, "bar baz"); - fclose(fp); - assert_stream("foo bar baz"); - free(buf); -} - -static void -seek_tests(void) -{ - FILE *fp; - - fp = open_memstream(&buf, &len); - if (fp == NULL) - err(1, "failed to open stream"); -#define SEEK_FAIL(offset, whence, error) do { \ - errno = 0; \ - if (fseeko(fp, (offset), (whence)) == 0) \ - printf("fseeko(%s, %s) did not fail, set pos to %jd\n", \ - __STRING(offset), __STRING(whence), \ - (intmax_t)ftello(fp)); \ - else if (errno != (error)) \ - printf("fseeko(%s, %s) failed with %d rather than %s\n",\ - __STRING(offset), __STRING(whence), errno, \ - __STRING(error)); \ -} while (0) - -#define SEEK_OK(offset, whence, result) do { \ - if (fseeko(fp, (offset), (whence)) != 0) \ - printf("fseeko(%s, %s) failed: %s\n", \ - __STRING(offset), __STRING(whence), strerror(errno)); \ - else if (ftello(fp) != (result)) \ - printf("fseeko(%s, %s) seeked to %jd rather than %s\n", \ - __STRING(offset), __STRING(whence), \ - (intmax_t)ftello(fp), __STRING(result)); \ -} while (0) - - SEEK_FAIL(-1, SEEK_SET, EINVAL); - SEEK_FAIL(-1, SEEK_CUR, EINVAL); - SEEK_FAIL(-1, SEEK_END, EINVAL); - fprintf(fp, "foo"); - SEEK_OK(-1, SEEK_CUR, 2); - SEEK_OK(0, SEEK_SET, 0); - SEEK_OK(-1, SEEK_END, 2); - SEEK_OK(OFF_MAX - 1, SEEK_SET, OFF_MAX - 1); - SEEK_FAIL(2, SEEK_CUR, EOVERFLOW); - fclose(fp); -} - -int -main(int ac, char **av) -{ - - open_group_test(); - simple_tests(); - seek_tests(); - return (0); -} diff --git a/tools/regression/lib/libc/stdio/test-open_memstream.t b/tools/regression/lib/libc/stdio/test-open_memstream.t deleted file mode 100644 index bd5157b..0000000 --- a/tools/regression/lib/libc/stdio/test-open_memstream.t +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -echo 1..1 -if ./$executable; then - echo ok 1 - $executable successful -else - echo not ok 1 - $executable failed -fi diff --git a/tools/regression/lib/libc/stdio/test-open_wmemstream.c b/tools/regression/lib/libc/stdio/test-open_wmemstream.c deleted file mode 100644 index 2a90fcd..0000000 --- a/tools/regression/lib/libc/stdio/test-open_wmemstream.c +++ /dev/null @@ -1,203 +0,0 @@ -/*- - * Copyright (c) 2013 Hudson River Trading LLC - * Written by: John H. Baldwin <jhb@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <err.h> -#include <errno.h> -#include <limits.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <wchar.h> - -static wchar_t *buf; -static size_t len; - -static void -assert_stream(const wchar_t *contents) -{ - if (wcslen(contents) != len) - printf("bad length %zd for \"%ls\"\n", len, contents); - else if (wcsncmp(buf, contents, wcslen(contents)) != 0) - printf("bad buffer \"%ls\" for \"%ls\"\n", buf, contents); -} - -static void -open_group_test(void) -{ - FILE *fp; - off_t eob; - - fp = open_wmemstream(&buf, &len); - if (fp == NULL) - err(1, "failed to open stream"); - - fwprintf(fp, L"hello my world"); - fflush(fp); - assert_stream(L"hello my world"); - eob = ftello(fp); - rewind(fp); - fwprintf(fp, L"good-bye"); - fseeko(fp, eob, SEEK_SET); - fclose(fp); - assert_stream(L"good-bye world"); - free(buf); -} - -static void -simple_tests(void) -{ - static const wchar_t zerobuf[] = - { L'f', L'o', L'o', 0, 0, 0, 0, L'b', L'a', L'r', 0 }; - wchar_t c; - FILE *fp; - - fp = open_wmemstream(&buf, NULL); - if (fp != NULL) - errx(1, "did not fail to open stream"); - else if (errno != EINVAL) - err(1, "incorrect error for bad length pointer"); - fp = open_wmemstream(NULL, &len); - if (fp != NULL) - errx(1, "did not fail to open stream"); - else if (errno != EINVAL) - err(1, "incorrect error for bad buffer pointer"); - fp = open_wmemstream(&buf, &len); - if (fp == NULL) - err(1, "failed to open stream"); - fflush(fp); - assert_stream(L""); - if (fwide(fp, 0) <= 0) - printf("stream is not wide-oriented\n"); - - fwprintf(fp, L"fo"); - fflush(fp); - assert_stream(L"fo"); - fputwc(L'o', fp); - fflush(fp); - assert_stream(L"foo"); - rewind(fp); - fflush(fp); - assert_stream(L""); - fseek(fp, 0, SEEK_END); - fflush(fp); - assert_stream(L"foo"); - - /* - * Test seeking out past the current end. Should zero-fill the - * intermediate area. - */ - fseek(fp, 4, SEEK_END); - fwprintf(fp, L"bar"); - fflush(fp); - - /* - * Can't use assert_stream() here since this should contain - * embedded null characters. - */ - if (len != 10) - printf("bad length %zd for zero-fill test\n", len); - else if (memcmp(buf, zerobuf, sizeof(zerobuf)) != 0) - printf("bad buffer for zero-fill test\n"); - - fseek(fp, 3, SEEK_SET); - fwprintf(fp, L" in "); - fflush(fp); - assert_stream(L"foo in "); - fseek(fp, 0, SEEK_END); - fflush(fp); - assert_stream(L"foo in bar"); - - rewind(fp); - if (fread(&c, sizeof(c), 1, fp) != 0) - printf("fread did not fail\n"); - else if (!ferror(fp)) - printf("error indicator not set after fread\n"); - else - clearerr(fp); - - fseek(fp, 4, SEEK_SET); - fwprintf(fp, L"bar baz"); - fclose(fp); - assert_stream(L"foo bar baz"); - free(buf); -} - -static void -seek_tests(void) -{ - FILE *fp; - - fp = open_wmemstream(&buf, &len); - if (fp == NULL) - err(1, "failed to open stream"); -#define SEEK_FAIL(offset, whence, error) do { \ - errno = 0; \ - if (fseeko(fp, (offset), (whence)) == 0) \ - printf("fseeko(%s, %s) did not fail, set pos to %jd\n", \ - __STRING(offset), __STRING(whence), \ - (intmax_t)ftello(fp)); \ - else if (errno != (error)) \ - printf("fseeko(%s, %s) failed with %d rather than %s\n",\ - __STRING(offset), __STRING(whence), errno, \ - __STRING(error)); \ -} while (0) - -#define SEEK_OK(offset, whence, result) do { \ - if (fseeko(fp, (offset), (whence)) != 0) \ - printf("fseeko(%s, %s) failed: %s\n", \ - __STRING(offset), __STRING(whence), strerror(errno)); \ - else if (ftello(fp) != (result)) \ - printf("fseeko(%s, %s) seeked to %jd rather than %s\n", \ - __STRING(offset), __STRING(whence), \ - (intmax_t)ftello(fp), __STRING(result)); \ -} while (0) - - SEEK_FAIL(-1, SEEK_SET, EINVAL); - SEEK_FAIL(-1, SEEK_CUR, EINVAL); - SEEK_FAIL(-1, SEEK_END, EINVAL); - fwprintf(fp, L"foo"); - SEEK_OK(-1, SEEK_CUR, 2); - SEEK_OK(0, SEEK_SET, 0); - SEEK_OK(-1, SEEK_END, 2); - SEEK_OK(OFF_MAX - 1, SEEK_SET, OFF_MAX - 1); - SEEK_FAIL(2, SEEK_CUR, EOVERFLOW); - fclose(fp); -} - -int -main(int ac, char **av) -{ - - open_group_test(); - simple_tests(); - seek_tests(); - return (0); -} diff --git a/tools/regression/lib/libc/stdio/test-open_wmemstream.t b/tools/regression/lib/libc/stdio/test-open_wmemstream.t deleted file mode 100644 index bd5157b..0000000 --- a/tools/regression/lib/libc/stdio/test-open_wmemstream.t +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -echo 1..1 -if ./$executable; then - echo ok 1 - $executable successful -else - echo not ok 1 - $executable failed -fi diff --git a/tools/regression/lib/libc/stdio/test-perror.c b/tools/regression/lib/libc/stdio/test-perror.c deleted file mode 100644 index 24aca89..0000000 --- a/tools/regression/lib/libc/stdio/test-perror.c +++ /dev/null @@ -1,108 +0,0 @@ -/*- - * Copyright (c) 2002 Tim J. Robbins - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Test program for perror() as specified by IEEE Std. 1003.1-2001 and - * ISO/IEC 9899:1999. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <assert.h> -#include <err.h> -#include <errno.h> -#include <limits.h> -#include <paths.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -static void cleanup(void); -static char tmpfil[PATH_MAX]; - -int -main(int argc, char *argv[]) -{ - char lbuf[512]; - int i; - char *s; - - printf("1..1\n"); - - strcpy(tmpfil, _PATH_TMP "perror.XXXXXXXX"); - if (mkstemp(tmpfil) < 0) - err(1, "mkstemp"); - atexit(cleanup); - /* Reopen stderr on a file descriptor other than 2. */ - fclose(stderr); - for (i = 0; i < 3; i++) - dup(0); - if (freopen(tmpfil, "r+", stderr) == NULL) - err(1, "%s", tmpfil); - - /* - * Test that perror() doesn't call strerror() (4.4BSD bug), - * the two ways of omitting a program name, and the formatting when - * a program name is specified. - */ - s = strerror(ENOENT); - assert(strcmp(s, "No such file or directory") == 0); - errno = EPERM; - perror(NULL); - perror(""); - perror("test-perror"); - assert(strcmp(s, "No such file or directory") == 0); - - /* - * Read it back to check... - */ - rewind(stderr); - s = fgets(lbuf, sizeof(lbuf), stderr); - assert(s != NULL); - assert(strcmp(s, "Operation not permitted\n") == 0); - s = fgets(lbuf, sizeof(lbuf), stderr); - assert(s != NULL); - assert(strcmp(s, "Operation not permitted\n") == 0); - s = fgets(lbuf, sizeof(lbuf), stderr); - assert(s != NULL); - assert(strcmp(s, "test-perror: Operation not permitted\n") == 0); - s = fgets(lbuf, sizeof(lbuf), stderr); - assert(s == NULL); - fclose(stderr); - - printf("ok 1 - perror()\n"); - - return (0); -} - -static void -cleanup(void) -{ - - unlink(tmpfil); -} diff --git a/tools/regression/lib/libc/stdio/test-perror.t b/tools/regression/lib/libc/stdio/test-perror.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-perror.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-print-positional.c b/tools/regression/lib/libc/stdio/test-print-positional.c deleted file mode 100644 index 6eeb8f1..0000000 --- a/tools/regression/lib/libc/stdio/test-print-positional.c +++ /dev/null @@ -1,132 +0,0 @@ -/* $OpenBSD: sprintf_test.c,v 1.3 2004/09/16 20:22:26 otto Exp $ */ - -/* - * Copyright (c) 2003 Theo de Raadt - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <wchar.h> - -const char correct[] = - "|xx 01 02 03 04\n" - "|xx 05 06 07 08\n" - "|xx 09 10 11 12\n" - "|xx 13 14 15 16\n" - "|xx 17 18 19 20\n" - "|xx 21 22 23 24\n" - "|xx 25 26 27 28\n" - "|xx 29 30 31 32\n" - "|xx 33 34 35 36\n" - "|xx 37 38 39 40\n" - "|xx 41 42 43 44\n" - "|xx 45 -1 1 -1 1\n"; - -const char correct2[] = - "b bs BSD"; - -int -main(int argc, char *argv[]) -{ - char buf[1024]; - wchar_t wbuf1[1024], wbuf2[1024]; - const char *temp; - - printf("1..4\n"); - - /* Test positional arguments */ - snprintf(buf, sizeof buf, - "|xx %1$s %2$s %3$s %4$s\n" - "|xx %5$s %6$s %7$s %8$s\n" - "|xx %9$s %10$s %11$s %12$s\n" - "|xx %13$s %14$s %15$s %16$s\n" - "|xx %17$s %18$s %19$s %20$s\n" - "|xx %21$s %22$s %23$s %24$s\n" - "|xx %25$s %26$s %27$s %28$s\n" - "|xx %29$s %30$s %31$s %32$s\n" - "|xx %33$s %34$s %35$s %36$s\n" - "|xx %37$s %38$s %39$s %40$s\n" - "|xx %41$s %42$s %43$s %44$s\n" - "|xx %45$d %46$ld %47$lld %48$d %49$lld\n", - "01", "02", "03", "04", "05", "06", - "07", "08", "09", "10", "11", "12", - "13", "14", "15", "16", "17", "18", - "19", "20", "21", "22", "23", "24", - "25", "26", "27", "28", "29", "30", - "31", "32", "33", "34", "35", "36", - "37", "38", "39", "40", "41", "42", - "43", "44", 45, -1L, 1LL, -1, 1LL - ); - printf("%sok 1 - print-positional normal\n", - strcmp(buf, correct) == 0 ? "" : "not "); - - swprintf(wbuf1, sizeof wbuf1, - L"|xx %1$s %2$s %3$s %4$s\n" - "|xx %5$s %6$s %7$s %8$s\n" - "|xx %9$s %10$s %11$s %12$s\n" - "|xx %13$s %14$s %15$s %16$s\n" - "|xx %17$s %18$s %19$s %20$s\n" - "|xx %21$s %22$s %23$s %24$s\n" - "|xx %25$s %26$s %27$s %28$s\n" - "|xx %29$s %30$s %31$s %32$s\n" - "|xx %33$s %34$s %35$s %36$s\n" - "|xx %37$s %38$s %39$s %40$s\n" - "|xx %41$s %42$s %43$s %44$s\n" - "|xx %45$d %46$ld %47$lld %48$d %49$lld\n", - "01", "02", "03", "04", "05", "06", - "07", "08", "09", "10", "11", "12", - "13", "14", "15", "16", "17", "18", - "19", "20", "21", "22", "23", "24", - "25", "26", "27", "28", "29", "30", - "31", "32", "33", "34", "35", "36", - "37", "38", "39", "40", "41", "42", - "43", "44", 45, -1L, 1LL, -1, 1LL - ); - temp = correct; - mbsrtowcs(wbuf2, &temp, sizeof wbuf2, NULL); - printf("%sok 2 - print-positional wide\n", - wcscmp(wbuf1, wbuf2) == 0 ? "" : "not "); - - snprintf(buf, sizeof buf, "%2$.*4$s %2$.*3$s %1$s", - "BSD", "bsd", 2, 1); - printf("%sok 3 - print-positional precision\n", - strcmp(buf, correct2) == 0 ? "" : "not "); - - swprintf(wbuf1, sizeof buf, L"%2$.*4$s %2$.*3$s %1$s", - "BSD", "bsd", 2, 1); - temp = correct2; - mbsrtowcs(wbuf2, &temp, sizeof wbuf2, NULL); - printf("%sok 4 - print-positional precision wide\n", - wcscmp(wbuf1, wbuf2) == 0 ? "" : "not "); - - exit(0); -} diff --git a/tools/regression/lib/libc/stdio/test-print-positional.t b/tools/regression/lib/libc/stdio/test-print-positional.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-print-positional.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-printbasic.c b/tools/regression/lib/libc/stdio/test-printbasic.c deleted file mode 100644 index 2e143d7..0000000 --- a/tools/regression/lib/libc/stdio/test-printbasic.c +++ /dev/null @@ -1,156 +0,0 @@ -/*- - * Copyright (c) 2009 David Schultz <das@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Tests for basic and miscellaneous printf() formats. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <assert.h> -#include <err.h> -#include <limits.h> -#include <locale.h> -#include <stdio.h> -#include <stdarg.h> -#include <stddef.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include <wchar.h> - -#define testfmt(result, fmt, ...) \ - _testfmt((result), __LINE__, #__VA_ARGS__, fmt, __VA_ARGS__) -void _testfmt(const char *, int, const char *, const char *, ...); -void smash_stack(void); - -#define S_UINT64MAX "18446744073709551615" -#define S_UINT32MAX "4294967295" -#define S_INT64MIN "-9223372036854775808" -#define S_INT32MIN "-2147483648" - -#define S_SIZEMAX (SIZE_MAX == UINT64_MAX ? S_UINT64MAX : S_UINT32MAX) -#define S_ULONGMAX (ULONG_MAX == UINT64_MAX ? S_UINT64MAX : S_UINT32MAX) -#define S_ULLONGMAX (ULLONG_MAX == UINT64_MAX ? S_UINT64MAX : S_UINT32MAX) - -int -main(int argc, char *argv[]) -{ - - printf("1..2\n"); - assert(setlocale(LC_NUMERIC, "C")); - - /* The test requires these to be true. */ - assert(UINTMAX_MAX == UINT64_MAX); - assert(UINT_MAX == UINT32_MAX); - assert(USHRT_MAX == 0xffff); - assert(UCHAR_MAX == 0xff); - - /* - * Make sure we handle signed vs. unsigned args correctly. - */ - testfmt("-1", "%jd", (intmax_t)-1); - testfmt(S_UINT64MAX, "%ju", UINT64_MAX); - - testfmt("-1", "%td", (ptrdiff_t)-1); - testfmt(S_SIZEMAX, "%tu", (size_t)-1); - - testfmt("-1", "%zd", (ssize_t)-1); - testfmt(S_SIZEMAX, "%zu", (ssize_t)-1); - - testfmt("-1", "%ld", (long)-1); - testfmt(S_ULONGMAX, "%lu", ULONG_MAX); - - testfmt("-1", "%lld", (long long)-1); - testfmt(S_ULONGMAX, "%lu", ULLONG_MAX); - - testfmt("-1", "%d", -1); - testfmt(S_UINT32MAX, "%lu", UINT32_MAX); - - testfmt("-1", "%hd", -1); - testfmt("65535", "%hu", USHRT_MAX); - - testfmt("-1", "%hhd", -1); - testfmt("255", "%hhu", UCHAR_MAX); - - printf("ok 1 - printbasic signed/unsigned\n"); - - /* - * Check that printing the largest negative number does not cause - * overflow when it is negated. - */ - testfmt(S_INT32MIN, "%d", INT_MIN); - testfmt(S_INT64MIN, "%jd", INTMAX_MIN); - - printf("ok 2 - printbasic INT_MIN\n"); - - - return (0); -} - -void -smash_stack(void) -{ - static uint32_t junk = 0xdeadbeef; - uint32_t buf[512]; - int i; - - for (i = 0; i < sizeof(buf) / sizeof(buf[0]); i++) - buf[i] = junk; -} - -void -_testfmt(const char *result, int line, const char *argstr, const char *fmt,...) -{ -#define BUF 100 - wchar_t ws[BUF], wfmt[BUF], wresult[BUF]; - char s[BUF]; - va_list ap, ap2; - - va_start(ap, fmt); - va_copy(ap2, ap); - smash_stack(); - vsnprintf(s, sizeof(s), fmt, ap); - if (strcmp(result, s) != 0) { - fprintf(stderr, - "%d: printf(\"%s\", %s) ==> [%s], expected [%s]\n", - line, fmt, argstr, s, result); - abort(); - } - - smash_stack(); - mbstowcs(ws, s, BUF - 1); - mbstowcs(wfmt, fmt, BUF - 1); - mbstowcs(wresult, result, BUF - 1); - vswprintf(ws, sizeof(ws) / sizeof(ws[0]), wfmt, ap2); - if (wcscmp(wresult, ws) != 0) { - fprintf(stderr, - "%d: wprintf(\"%ls\", %s) ==> [%ls], expected [%ls]\n", - line, wfmt, argstr, ws, wresult); - abort(); - } -} diff --git a/tools/regression/lib/libc/stdio/test-printbasic.t b/tools/regression/lib/libc/stdio/test-printbasic.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-printbasic.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-printfloat.c b/tools/regression/lib/libc/stdio/test-printfloat.c deleted file mode 100644 index 806a85e..0000000 --- a/tools/regression/lib/libc/stdio/test-printfloat.c +++ /dev/null @@ -1,357 +0,0 @@ -/*- - * Copyright (c) 2002-2009 David Schultz <das@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Test for printf() floating point formats. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <assert.h> -#include <err.h> -#include <fenv.h> -#include <float.h> -#include <locale.h> -#include <math.h> -#include <stdio.h> -#include <stdarg.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> -#include <wchar.h> - -#define testfmt(result, fmt, ...) \ - _testfmt((result), __LINE__, #__VA_ARGS__, fmt, __VA_ARGS__) -void _testfmt(const char *, int, const char *, const char *, ...); -void smash_stack(void); - -int -main(int argc, char *argv[]) -{ - - printf("1..11\n"); - assert(setlocale(LC_NUMERIC, "C")); - - /* - * Basic tests of decimal output functionality. - */ - testfmt(" 1.000000E+00", "%13E", 1.0); - testfmt(" 1.000000", "%13f", 1.0); - testfmt(" 1", "%13G", 1.0); - testfmt(" 1.000000E+00", "%13LE", 1.0L); - testfmt(" 1.000000", "%13Lf", 1.0L); - testfmt(" 1", "%13LG", 1.0L); - - testfmt("2.718282", "%.*f", -2, 2.7182818); - - testfmt("1.234568e+06", "%e", 1234567.8); - testfmt("1234567.800000", "%f", 1234567.8); - testfmt("1.23457E+06", "%G", 1234567.8); - testfmt("1.234568e+06", "%Le", 1234567.8L); - testfmt("1234567.800000", "%Lf", 1234567.8L); - testfmt("1.23457E+06", "%LG", 1234567.8L); - -#if (LDBL_MANT_DIG > DBL_MANT_DIG) && !defined(__i386__) - testfmt("123456789.864210", "%Lf", 123456789.8642097531L); - testfmt("-1.23457E+08", "%LG", -123456789.8642097531L); - testfmt("123456789.8642097531", "%.10Lf", 123456789.8642097531L); - testfmt(" 3.141592653589793238e-4000", "%L27.18Le", - 3.14159265358979323846e-4000L); -#endif - - printf("ok 1 - printfloat\n"); - - /* - * Infinities and NaNs - */ - testfmt("nan", "%e", NAN); - testfmt("NAN", "%F", NAN); - testfmt("nan", "%g", NAN); - testfmt("NAN", "%LE", (long double)NAN); - testfmt(" nan", "%05e", NAN); - - testfmt("INF", "%E", HUGE_VAL); - testfmt("-inf", "%f", -HUGE_VAL); - testfmt("+inf", "%+g", HUGE_VAL); - testfmt(" inf", "%4.2Le", HUGE_VALL); - testfmt("-inf", "%Lf", -HUGE_VALL); - testfmt(" inf", "%05e", HUGE_VAL); - testfmt(" -inf", "%05e", -HUGE_VAL); - - printf("ok 2 - printfloat\n"); - - /* - * Padding - */ - testfmt("0.000000e+00", "%e", 0.0); - testfmt("0.000000", "%F", (double)0.0); - testfmt("0", "%G", 0.0); - testfmt(" 0", "%3.0Lg", 0.0L); - testfmt(" 0", "%5.0f", 0.001); - printf("ok 3 - printfloat\n"); - - /* - * Precision specifiers - */ - testfmt("1.0123e+00", "%.4e", 1.0123456789); - testfmt("1.0123", "%.4f", 1.0123456789); - testfmt("1.012", "%.4g", 1.0123456789); - testfmt("1.2346e-02", "%.4e", 0.0123456789); - testfmt("0.0123", "%.4f", 0.0123456789); - testfmt("0.01235", "%.4g", 0.0123456789); - printf("ok 4 - printfloat\n"); - - /* - * Thousands' separators and other locale fun - */ - testfmt("12345678.0625", "%'.04f", 12345678.0625); - testfmt("0012345678.0625", "%'015.4F", 12345678.0625); - - assert(setlocale(LC_NUMERIC, "hi_IN.ISCII-DEV")); /* grouping == 2;3 */ - testfmt("123,456,78.0625", "%'.4f", 12345678.0625); - testfmt("00123,456,78.0625", "%'017.4F", 12345678.0625); - testfmt(" 90,00", "%'6.0f", 9000.0); - testfmt("90,00.0", "%'.1f", 9000.0); - - assert(setlocale(LC_NUMERIC, "ru_RU.ISO8859-5")); /* decimalpoint==, */ - testfmt("3,1415", "%g", 3.1415); - - /* thousands=. decimalpoint=, grouping=3;3 */ - assert(setlocale(LC_NUMERIC, "el_GR.ISO8859-7")); /* decimalpoint==, */ - testfmt("1.234,00", "%'.2f", 1234.00); - testfmt("123.456,789", "%'.3f", 123456.789); - - assert(setlocale(LC_NUMERIC, "C")); - testfmt("12345678.062500", "%'f", 12345678.0625); - testfmt("9000.000000", "%'f", 9000.0); - - printf("ok 5 - printfloat\n"); - - /* - * Signed conversions - */ - testfmt("+2.500000e-01", "%+e", 0.25); - testfmt("+0.000000", "%+F", 0.0); - testfmt("-1", "%+g", -1.0); - - testfmt("-1.000000e+00", "% e", -1.0); - testfmt("+1.000000", "% +f", 1.0); - testfmt(" 1", "% g", 1.0); - testfmt(" 0", "% g", 0.0); - - printf("ok 6 - printfloat\n"); - - /* - * ``Alternate form'' - */ - testfmt("1.250e+00", "%#.3e", 1.25); - testfmt("123.000000", "%#f", 123.0); - testfmt(" 12345.", "%#7.5g", 12345.0); - testfmt(" 1.00000", "%#8g", 1.0); - testfmt("0.0", "%#.2g", 0.0); - printf("ok 7 - printfloat\n"); - - /* - * Padding and decimal point placement - */ - testfmt("03.2E+00", "%08.1E", 3.25); - testfmt("003.25", "%06.2F", 3.25); - testfmt("0003.25", "%07.4G", 3.25); - - testfmt("3.14159e-05", "%g", 3.14159e-5); - testfmt("0.000314159", "%g", 3.14159e-4); - testfmt("3.14159e+06", "%g", 3.14159e6); - testfmt("314159", "%g", 3.14159e5); - testfmt("314159.", "%#g", 3.14159e5); - - testfmt(" 9.000000e+03", "%13e", 9000.0); - testfmt(" 9000.000000", "%12f", 9000.0); - testfmt(" 9000", "%5g", 9000.0); - testfmt(" 900000.", "%#8g", 900000.0); - testfmt(" 9e+06", "%6g", 9000000.0); - testfmt(" 9.000000e-04", "%13e", 0.0009); - testfmt(" 0.000900", "%9f", 0.0009); - testfmt(" 0.0009", "%7g", 0.0009); - testfmt(" 9e-05", "%6g", 0.00009); - testfmt(" 9.00000e-05", "%#12g", 0.00009); - testfmt(" 9.e-05", "%#7.1g", 0.00009); - - testfmt(" 0.0", "%4.1f", 0.0); - testfmt("90.0", "%4.1f", 90.0); - testfmt(" 100", "%4.0f", 100.0); - testfmt("9.0e+01", "%4.1e", 90.0); - testfmt("1e+02", "%4.0e", 100.0); - - printf("ok 8 - printfloat\n"); - - /* - * Decimal rounding - */ - fesetround(FE_DOWNWARD); - testfmt("4.437", "%.3f", 4.4375); - testfmt("-4.438", "%.3f", -4.4375); - testfmt("4.437", "%.3Lf", 4.4375L); - testfmt("-4.438", "%.3Lf", -4.4375L); - - fesetround(FE_UPWARD); - testfmt("4.438", "%.3f", 4.4375); - testfmt("-4.437", "%.3f", -4.4375); - testfmt("4.438", "%.3Lf", 4.4375L); - testfmt("-4.437", "%.3Lf", -4.4375L); - - fesetround(FE_TOWARDZERO); - testfmt("4.437", "%.3f", 4.4375); - testfmt("-4.437", "%.3f", -4.4375); - testfmt("4.437", "%.3Lf", 4.4375L); - testfmt("-4.437", "%.3Lf", -4.4375L); - - fesetround(FE_TONEAREST); - testfmt("4.438", "%.3f", 4.4375); - testfmt("-4.438", "%.3f", -4.4375); - testfmt("4.438", "%.3Lf", 4.4375L); - testfmt("-4.438", "%.3Lf", -4.4375L); - - printf("ok 9 - printfloat\n"); - - /* - * Hexadecimal floating point (%a, %A) tests. Some of these - * are only valid if the implementation converts to hex digits - * on nibble boundaries. - */ - testfmt("0x0p+0", "%a", 0x0.0p0); - testfmt("0X0.P+0", "%#LA", 0x0.0p0L); - testfmt("inf", "%La", (long double)INFINITY); - testfmt("+INF", "%+A", INFINITY); - testfmt("nan", "%La", (long double)NAN); - testfmt("NAN", "%A", NAN); - - testfmt(" 0x1.23p+0", "%10a", 0x1.23p0); - testfmt(" 0x1.23p-500", "%12a", 0x1.23p-500); - testfmt(" 0x1.2p+40", "%10.1a", 0x1.23p40); - testfmt(" 0X1.230000000000000000000000P-4", "%32.24A", 0x1.23p-4); - testfmt("0x1p-1074", "%a", 0x1p-1074); - testfmt("0x1.2345p-1024", "%a", 0x1.2345p-1024); - -#if (LDBL_MANT_DIG == 64) && !defined(__i386__) - testfmt("0x1.921fb54442d18468p+1", "%La", 0x3.243f6a8885a308dp0L); - testfmt("0x1p-16445", "%La", 0x1p-16445L); - testfmt("0x1.30ecap-16381", "%La", 0x9.8765p-16384L); -#elif (LDBL_MANT_DIG == 113) - testfmt("0x1.921fb54442d18469898cc51701b8p+1", "%La", - 0x3.243f6a8885a308d313198a2e037p0L); - testfmt("0x1p-16494", "%La", 0x1p-16494L); - testfmt("0x1.2345p-16384", "%La", 0x1.2345p-16384L); -#else - testfmt("0x1.921fb54442d18p+1", "%La", 0x3.243f6a8885a31p0L); - testfmt("0x1p-1074", "%La", 0x1p-1074L); - testfmt("0x1.30ecap-1021", "%La", 0x9.8765p-1024L); -#endif - - printf("ok 10 - printfloat\n"); - - /* - * Hexadecimal rounding - */ - fesetround(FE_TOWARDZERO); - testfmt("0X1.23456789ABCP+0", "%.11A", 0x1.23456789abcdep0); - testfmt("-0x1.23456p+0", "%.5a", -0x1.23456789abcdep0); - testfmt("0x1.23456p+0", "%.5a", 0x1.23456789abcdep0); - testfmt("0x1.234567p+0", "%.6a", 0x1.23456789abcdep0); - testfmt("-0x1.234566p+0", "%.6a", -0x1.23456689abcdep0); - - fesetround(FE_DOWNWARD); - testfmt("0X1.23456789ABCP+0", "%.11A", 0x1.23456789abcdep0); - testfmt("-0x1.23457p+0", "%.5a", -0x1.23456789abcdep0); - testfmt("0x1.23456p+0", "%.5a", 0x1.23456789abcdep0); - testfmt("0x1.234567p+0", "%.6a", 0x1.23456789abcdep0); - testfmt("-0x1.234567p+0", "%.6a", -0x1.23456689abcdep0); - - fesetround(FE_UPWARD); - testfmt("0X1.23456789ABDP+0", "%.11A", 0x1.23456789abcdep0); - testfmt("-0x1.23456p+0", "%.5a", -0x1.23456789abcdep0); - testfmt("0x1.23457p+0", "%.5a", 0x1.23456789abcdep0); - testfmt("0x1.234568p+0", "%.6a", 0x1.23456789abcdep0); - testfmt("-0x1.234566p+0", "%.6a", -0x1.23456689abcdep0); - - fesetround(FE_TONEAREST); - testfmt("0x1.23456789abcdep+4", "%a", 0x1.23456789abcdep4); - testfmt("0X1.23456789ABDP+0", "%.11A", 0x1.23456789abcdep0); - testfmt("-0x1.23456p+0", "%.5a", -0x1.23456789abcdep0); - testfmt("0x1.23456p+0", "%.5a", 0x1.23456789abcdep0); - testfmt("0x1.234568p+0", "%.6a", 0x1.23456789abcdep0); - testfmt("-0x1.234567p+0", "%.6a", -0x1.23456689abcdep0); - testfmt("0x1.00p-1029", "%.2a", 0x1.fffp-1030); - testfmt("0x1.00p-1026", "%.2a", 0xf.fffp-1030); - testfmt("0x1.83p+0", "%.2a", 1.51); - - printf("ok 11 - printfloat\n"); - - return (0); -} - -void -smash_stack(void) -{ - static uint32_t junk = 0xdeadbeef; - uint32_t buf[512]; - int i; - - for (i = 0; i < sizeof(buf) / sizeof(buf[0]); i++) - buf[i] = junk; -} - -void -_testfmt(const char *result, int line, const char *argstr, const char *fmt,...) -{ -#define BUF 100 - wchar_t ws[BUF], wfmt[BUF], wresult[BUF]; - char s[BUF]; - va_list ap, ap2; - - va_start(ap, fmt); - va_copy(ap2, ap); - smash_stack(); - vsnprintf(s, sizeof(s), fmt, ap); - if (strcmp(result, s) != 0) { - fprintf(stderr, - "%d: printf(\"%s\", %s) ==> [%s], expected [%s]\n", - line, fmt, argstr, s, result); - abort(); - } - - smash_stack(); - mbstowcs(ws, s, BUF - 1); - mbstowcs(wfmt, fmt, BUF - 1); - mbstowcs(wresult, result, BUF - 1); - vswprintf(ws, sizeof(ws) / sizeof(ws[0]), wfmt, ap2); - if (wcscmp(wresult, ws) != 0) { - fprintf(stderr, - "%d: wprintf(\"%ls\", %s) ==> [%ls], expected [%ls]\n", - line, wfmt, argstr, ws, wresult); - abort(); - } -} diff --git a/tools/regression/lib/libc/stdio/test-printfloat.t b/tools/regression/lib/libc/stdio/test-printfloat.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-printfloat.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable diff --git a/tools/regression/lib/libc/stdio/test-scanfloat.c b/tools/regression/lib/libc/stdio/test-scanfloat.c deleted file mode 100644 index 7e1a550..0000000 --- a/tools/regression/lib/libc/stdio/test-scanfloat.c +++ /dev/null @@ -1,305 +0,0 @@ -/*- - * Copyright (C) 2003, 2005 David Schultz <das@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Test for scanf() floating point formats. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <assert.h> -#include <fenv.h> -#include <float.h> -#include <locale.h> -#include <math.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define eq(type, a, b) _eq(type##_EPSILON, (a), (b)) -static int _eq(long double epsilon, long double a, long double b); - -int -main(int argc, char *argv[]) -{ - char buf[128]; - long double ld = 0.0; - double d = 0.0; - float f = 0.0; - char *endp; - - printf("1..4\n"); - - buf[0] = '\0'; - assert(setlocale(LC_NUMERIC, "")); - - /* - * Various tests for normalized numbers - */ - sscanf("3.141592", "%e", &f); - assert(eq(FLT, f, 3.141592)); - - sscanf("3.141592653589793", "%lf", &d); - assert(eq(DBL, d, 3.141592653589793)); - - sscanf("1.234568e+06", "%E", &f); - assert(eq(FLT, f, 1.234568e+06)); - - sscanf("-1.234568e6", "%lF", &d); - assert(eq(DBL, d, -1.234568e6)); - - sscanf("+1.234568e-52", "%LG", &ld); - assert(eq(LDBL, ld, 1.234568e-52L)); - - sscanf("0.1", "%la", &d); - assert(eq(DBL, d, 0.1)); - - sscanf("00.2", "%lA", &d); - assert(eq(DBL, d, 0.2)); - - sscanf("123456", "%5le%s", &d, buf); - assert(eq(DBL, d, 12345.)); - assert(strcmp(buf, "6") == 0); - - sscanf("1.0Q", "%*5le%s", buf); - assert(strcmp(buf, "Q") == 0); - - sscanf("-1.23e", "%e%s", &f, buf); - assert(eq(FLT, f, -1.23)); - assert(strcmp(buf, "e") == 0); - - sscanf("1.25e+", "%le%s", &d, buf); - assert(eq(DBL, d, 1.25)); - assert(strcmp(buf, "e+") == 0); - - sscanf("1.23E4E5", "%le%s", &d, buf); - assert(eq(DBL, d, 1.23e4)); - assert(strcmp(buf, "E5") == 0); - - sscanf("12e6", "%le", &d); - assert(eq(DBL, d, 12e6)); - - sscanf("1.a", "%le%s", &d, buf); - assert(eq(DBL, d, 1.0)); - assert(strcmp(buf, "a") == 0); - - sscanf(".0p4", "%le%s", &d, buf); - assert(eq(DBL, d, 0.0)); - assert(strcmp(buf, "p4") == 0); - - d = 0.25; - assert(sscanf(".", "%le", &d) == 0); - assert(d == 0.25); - - sscanf("0x08", "%le", &d); - assert(d == 0x8p0); - - sscanf("0x90a.bcdefP+09a", "%le%s", &d, buf); - assert(d == 0x90a.bcdefp+09); - assert(strcmp(buf, "a") == 0); - -#if (LDBL_MANT_DIG > DBL_MANT_DIG) && !defined(__i386__) - sscanf("3.14159265358979323846", "%Lg", &ld); - assert(eq(LDBL, ld, 3.14159265358979323846L)); - - sscanf(" 0X.0123456789abcdefffp-3g", "%Le%s", &ld, buf); - assert(ld == 0x0.0123456789abcdefffp-3L); - assert(strcmp(buf, "g") == 0); -#endif - - sscanf("0xg", "%le%s", &d, buf); - assert(d == 0.0); - assert(strcmp(buf, "xg") == 0); - - assert(setlocale(LC_NUMERIC, "ru_RU.ISO8859-5")); /* decimalpoint==, */ - - sscanf("1.23", "%le%s", &d, buf); - assert(d == 1.0); - assert(strcmp(buf, ".23") == 0); - - sscanf("1,23", "%le", &d); - assert(d == 1.23); - - assert(setlocale(LC_NUMERIC, "")); - - printf("ok 1 - scanfloat\n"); - - /* - * Infinity and NaN tests - */ - sscanf("-Inf", "%le", &d); - assert(d < 0.0 && isinf(d)); - - sscanf("iNfInItY and beyond", "%le%s", &d, buf); - assert(d > 0.0 && isinf(d)); - assert(strcmp(buf, " and beyond")); - - sscanf("NaN", "%le", &d); - assert(isnan(d)); - - sscanf("NAN(123Y", "%le%s", &d, buf); - assert(isnan(d)); - assert(strcmp(buf, "(123Y") == 0); - - sscanf("nan(f00f)plugh", "%le%s", &d, buf); - assert(isnan(d)); - assert(strcmp(buf, "plugh") == 0); - - sscanf("-nan", "%le", &d); - assert(isnan(d)); - - /* Only quiet NaNs should be returned. */ - sscanf("NaN", "%e", &f); - sscanf("nan", "%le", &d); - sscanf("nan", "%Le", &ld); - feclearexcept(FE_ALL_EXCEPT); - assert(f != f); - assert(d != d); - assert(ld != ld); - assert(fetestexcept(FE_INVALID) == 0); - sscanf("nan(1234)", "%e", &f); - sscanf("nan(1234)", "%le", &d); - sscanf("nan(1234)", "%Le", &ld); - feclearexcept(FE_ALL_EXCEPT); - assert(f != f); - assert(d != d); - assert(ld != ld); - /* POSIX says we should only generate quiet NaNs. */ - assert(fetestexcept(FE_INVALID) == 0); - - printf("ok 2 - scanfloat\n"); - - /* - * Rounding tests - */ - - fesetround(FE_DOWNWARD); - - sscanf("1.999999999999999999999999999999999", "%le", &d); - assert(d < 2.0); - sscanf("0x1.ffffffffffffffp0", "%le", &d); - assert(d < 2.0); - sscanf("1.999999999999999999999999999999999", "%Le", &ld); - assert(ld < 2.0); - - sscanf("1.0571892669084007", "%le", &d); - assert(d == 0x1.0ea3f4af0dc59p0); - sscanf("-1.0571892669084007", "%le", &d); - assert(d == -0x1.0ea3f4af0dc5ap0); - sscanf("1.0571892669084010", "%le", &d); - assert(d == 0x1.0ea3f4af0dc5ap0); - - sscanf("0x1.23p-5000", "%le", &d); - assert(d == 0.0); - - sscanf("0x1.2345678p-1050", "%le", &d); - assert(d == 0x1.234567p-1050); - - fesetround(FE_UPWARD); - - sscanf("1.0571892669084007", "%le", &d); - assert(d == 0x1.0ea3f4af0dc5ap0); - sscanf("-1.0571892669084007", "%le", &d); - assert(d == -0x1.0ea3f4af0dc59p0); - sscanf("1.0571892669084010", "%le", &d); - assert(d == 0x1.0ea3f4af0dc5bp0); - - sscanf("0x1.23p-5000", "%le", &d); - assert(d == 0x1p-1074); - - sscanf("0x1.2345678p-1050", "%le", &d); - assert(d == 0x1.234568p-1050); - - fesetround(FE_TOWARDZERO); - - sscanf("1.0571892669084007", "%le", &d); - assert(d == 0x1.0ea3f4af0dc59p0); - sscanf("-1.0571892669084007", "%le", &d); - assert(d == -0x1.0ea3f4af0dc59p0); - sscanf("1.0571892669084010", "%le", &d); - assert(d == 0x1.0ea3f4af0dc5ap0); - - sscanf("0x1.23p-5000", "%le", &d); - assert(d == 0.0); - - sscanf("0x1.2345678p-1050", "%le", &d); - assert(d == 0x1.234567p-1050); - - fesetround(FE_TONEAREST); - - /* 1.0571892669084007 is slightly closer to 0x1.0ea3f4af0dc59p0 */ - sscanf("1.0571892669084007", "%le", &d); - assert(d == 0x1.0ea3f4af0dc59p0); - sscanf("-1.0571892669084007", "%le", &d); - assert(d == -0x1.0ea3f4af0dc59p0); - sscanf("1.0571892669084010", "%le", &d); - assert(d == 0x1.0ea3f4af0dc5bp0); - - /* strtod() should round small numbers to 0. */ - sscanf("0x1.23p-5000", "%le", &d); - assert(d == 0.0); - - /* Extra digits in a denormal shouldn't break anything. */ - sscanf("0x1.2345678p-1050", "%le", &d); - assert(d == 0x1.234568p-1050); - - printf("ok 3 - scanfloat\n"); - - /* - * Tests specific to strtod(). - */ - - assert(strtod("0xy", &endp) == 0); - assert(strcmp("xy", endp) == 0); - - /* This used to cause an infinite loop and round the wrong way. */ - fesetround(FE_DOWNWARD); - assert(strtof("3.5e38", &endp) == FLT_MAX); - assert(strtod("2e308", &endp) == DBL_MAX); - fesetround(FE_UPWARD); - assert(strtof("3.5e38", &endp) == INFINITY); - assert(strtod("2e308", &endp) == INFINITY); - fesetround(FE_TOWARDZERO); - assert(strtof("3.5e38", &endp) == FLT_MAX); - assert(strtod("2e308", &endp) == DBL_MAX); - fesetround(FE_TONEAREST); - assert(strtof("3.5e38", &endp) == INFINITY); - assert(strtod("2e308", &endp) == INFINITY); - - printf("ok 4 - scanfloat\n"); - - return (0); -} - -static int -_eq(long double epsilon, long double a, long double b) -{ - long double delta; - - delta = fabsl(a - b); - return (delta <= epsilon); -} diff --git a/tools/regression/lib/libc/stdio/test-scanfloat.t b/tools/regression/lib/libc/stdio/test-scanfloat.t deleted file mode 100644 index 8bdfd03..0000000 --- a/tools/regression/lib/libc/stdio/test-scanfloat.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# $FreeBSD$ - -cd `dirname $0` - -executable=`basename $0 .t` - -make $executable 2>&1 > /dev/null - -exec ./$executable |