Loading...
tests/FreeBSD/string/t_strchrnul.c Libc-1725.40.4 /dev/null
--- Libc/Libc-1725.40.4/tests/FreeBSD/string/t_strchrnul.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/* $NetBSD: t_strchrnul.c,v 1.1 2023/01/30 19:49:49 christos Exp $ */
-
-/*
- * Written by J.T. Conklin <jtc@acorntoolworks.com>
- * Public domain.
- */
-
-#include <atf-c.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <dlfcn.h>
-
-static char	*slow_strchrnul(char *, int);
-static void	 verify_strchrnul(char *, int, unsigned int, unsigned int);
-
-char * (*volatile strchrnul_fn)(const char *, int);
-
-static char *
-slow_strchrnul(char *buf, int ch)
-{
-	unsigned char c = 1;
-
-	ch &= 0xff;
-
-	for (; ; buf++) {
-		c = *buf;
-		if (c == ch || c == 0)
-			return buf;
-	}
-}
-
-static void
-verify_strchrnul(char *buf, int ch, unsigned int t, unsigned int a)
-{
-	const char *off, *ok_off;
-
-	off = strchrnul_fn(buf, ch);
-	ok_off = slow_strchrnul(buf, ch);
-	if (off == ok_off)
-		return;
-
-	fprintf(stderr, "test_strchrnul(\"%s\", %#x) gave %zd not %zd (test %d, "
-	    "alignment %d)\n",
-	    buf, ch, off ? off - buf : -1, ok_off ? ok_off - buf : -1, t, a);
-
-	atf_tc_fail("Check stderr for details");
-}
-
-ATF_TC(strchrnul_basic);
-ATF_TC_HEAD(strchrnul_basic, tc)
-{
-
-        atf_tc_set_md_var(tc, "descr", "Test strchrnul(3) results");
-}
-
-ATF_TC_BODY(strchrnul_basic, tc)
-{
-	void *dl_handle;
-	char *off;
-	char buf[32];
-	unsigned int t, a;
-
-	const char *tab[] = {
-		"",
-		"a",
-		"aa",
-		"abc",
-		"abcd",
-		"abcde",
-		"abcdef",
-		"abcdefg",
-		"abcdefgh",
-
-		"/",
-		"//",
-		"/a",
-		"/a/",
-		"/ab",
-		"/ab/",
-		"/abc",
-		"/abc/",
-		"/abcd",
-		"/abcd/",
-		"/abcde",
-		"/abcde/",
-		"/abcdef",
-		"/abcdef/",
-		"/abcdefg",
-		"/abcdefg/",
-		"/abcdefgh",
-		"/abcdefgh/",
-
-		"a/",
-		"a//",
-		"a/a",
-		"a/a/",
-		"a/ab",
-		"a/ab/",
-		"a/abc",
-		"a/abc/",
-		"a/abcd",
-		"a/abcd/",
-		"a/abcde",
-		"a/abcde/",
-		"a/abcdef",
-		"a/abcdef/",
-		"a/abcdefg",
-		"a/abcdefg/",
-		"a/abcdefgh",
-		"a/abcdefgh/",
-
-		"ab/",
-		"ab//",
-		"ab/a",
-		"ab/a/",
-		"ab/ab",
-		"ab/ab/",
-		"ab/abc",
-		"ab/abc/",
-		"ab/abcd",
-		"ab/abcd/",
-		"ab/abcde",
-		"ab/abcde/",
-		"ab/abcdef",
-		"ab/abcdef/",
-		"ab/abcdefg",
-		"ab/abcdefg/",
-		"ab/abcdefgh",
-		"ab/abcdefgh/",
-
-		"abc/",
-		"abc//",
-		"abc/a",
-		"abc/a/",
-		"abc/ab",
-		"abc/ab/",
-		"abc/abc",
-		"abc/abc/",
-		"abc/abcd",
-		"abc/abcd/",
-		"abc/abcde",
-		"abc/abcde/",
-		"abc/abcdef",
-		"abc/abcdef/",
-		"abc/abcdefg",
-		"abc/abcdefg/",
-		"abc/abcdefgh",
-		"abc/abcdefgh/",
-
-		"abcd/",
-		"abcd//",
-		"abcd/a",
-		"abcd/a/",
-		"abcd/ab",
-		"abcd/ab/",
-		"abcd/abc",
-		"abcd/abc/",
-		"abcd/abcd",
-		"abcd/abcd/",
-		"abcd/abcde",
-		"abcd/abcde/",
-		"abcd/abcdef",
-		"abcd/abcdef/",
-		"abcd/abcdefg",
-		"abcd/abcdefg/",
-		"abcd/abcdefgh",
-		"abcd/abcdefgh/",
-
-		"abcde/",
-		"abcde//",
-		"abcde/a",
-		"abcde/a/",
-		"abcde/ab",
-		"abcde/ab/",
-		"abcde/abc",
-		"abcde/abc/",
-		"abcde/abcd",
-		"abcde/abcd/",
-		"abcde/abcde",
-		"abcde/abcde/",
-		"abcde/abcdef",
-		"abcde/abcdef/",
-		"abcde/abcdefg",
-		"abcde/abcdefg/",
-		"abcde/abcdefgh",
-		"abcde/abcdefgh/",
-
-		"abcdef/",
-		"abcdef//",
-		"abcdef/a",
-		"abcdef/a/",
-		"abcdef/ab",
-		"abcdef/ab/",
-		"abcdef/abc",
-		"abcdef/abc/",
-		"abcdef/abcd",
-		"abcdef/abcd/",
-		"abcdef/abcde",
-		"abcdef/abcde/",
-		"abcdef/abcdef",
-		"abcdef/abcdef/",
-		"abcdef/abcdefg",
-		"abcdef/abcdefg/",
-		"abcdef/abcdefgh",
-		"abcdef/abcdefgh/",
-
-		"abcdefg/",
-		"abcdefg//",
-		"abcdefg/a",
-		"abcdefg/a/",
-		"abcdefg/ab",
-		"abcdefg/ab/",
-		"abcdefg/abc",
-		"abcdefg/abc/",
-		"abcdefg/abcd",
-		"abcdefg/abcd/",
-		"abcdefg/abcde",
-		"abcdefg/abcde/",
-		"abcdefg/abcdef",
-		"abcdefg/abcdef/",
-		"abcdefg/abcdefg",
-		"abcdefg/abcdefg/",
-		"abcdefg/abcdefgh",
-		"abcdefg/abcdefgh/",
-
-		"abcdefgh/",
-		"abcdefgh//",
-		"abcdefgh/a",
-		"abcdefgh/a/",
-		"abcdefgh/ab",
-		"abcdefgh/ab/",
-		"abcdefgh/abc",
-		"abcdefgh/abc/",
-		"abcdefgh/abcd",
-		"abcdefgh/abcd/",
-		"abcdefgh/abcde",
-		"abcdefgh/abcde/",
-		"abcdefgh/abcdef",
-		"abcdefgh/abcdef/",
-		"abcdefgh/abcdefg",
-		"abcdefgh/abcdefg/",
-		"abcdefgh/abcdefgh",
-		"abcdefgh/abcdefgh/",
-	};
-
-	dl_handle = dlopen(NULL, RTLD_LAZY);
-	strchrnul_fn = dlsym(dl_handle, "test_strchrnul");
-	if (!strchrnul_fn)
-		strchrnul_fn = strchrnul;
-
-	for (a = 3; a < 3 + sizeof(long); ++a) {
-		/* Put char and a \0 before the buffer */
-		buf[a-1] = '/';
-		buf[a-2] = '0';
-		buf[a-3] = 0xff;
-		for (t = 0; t < (sizeof(tab) / sizeof(tab[0])); ++t) {
-			int len = strlen(tab[t]) + 1;
-			memcpy(&buf[a], tab[t], len);
-
-			/* Put the char we are looking for after the \0 */
-			buf[a + len] = '/';
-
-			/* Check search for NUL at end of string */
-			verify_strchrnul(buf + a, 0, t, a);
-
-			/* Then for the '/' in the strings */
-			verify_strchrnul(buf + a, '/', t, a);
-
-			/* check zero extension of char arg */
-			verify_strchrnul(buf + a, 0xffffff00 | '/', t, a);
-
-			/* Replace all the '/' with 0xff */
-			while (*(off = slow_strchrnul(buf + a, '/')) != '\0')
-				*off = 0xff;
-
-			buf[a + len] = 0xff;
-
-			/* Check we can search for 0xff as well as '/' */
-			verify_strchrnul(buf + a, 0xff, t, a);
-		}
-	}
-	(void)dlclose(dl_handle);
-}
-
-ATF_TP_ADD_TCS(tp)
-{
-
-	ATF_TP_ADD_TC(tp, strchrnul_basic);
-
-	return atf_no_error();
-}