1*951bbb9dSchristos /* $NetBSD: h_macros.h,v 1.13 2016/08/20 15:49:08 christos Exp $ */
21861ed5eSjmmv
31861ed5eSjmmv /*-
41861ed5eSjmmv * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
51861ed5eSjmmv * All rights reserved.
61861ed5eSjmmv *
71861ed5eSjmmv * Redistribution and use in source and binary forms, with or without
81861ed5eSjmmv * modification, are permitted provided that the following conditions
91861ed5eSjmmv * are met:
101861ed5eSjmmv * 1. Redistributions of source code must retain the above copyright
111861ed5eSjmmv * notice, this list of conditions and the following disclaimer.
121861ed5eSjmmv * 2. Redistributions in binary form must reproduce the above copyright
131861ed5eSjmmv * notice, this list of conditions and the following disclaimer in the
141861ed5eSjmmv * documentation and/or other materials provided with the distribution.
151861ed5eSjmmv *
161861ed5eSjmmv * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
171861ed5eSjmmv * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
181861ed5eSjmmv * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
191861ed5eSjmmv * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
201861ed5eSjmmv * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
211861ed5eSjmmv * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
221861ed5eSjmmv * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
231861ed5eSjmmv * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
241861ed5eSjmmv * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
251861ed5eSjmmv * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
261861ed5eSjmmv * POSSIBILITY OF SUCH DAMAGE.
271861ed5eSjmmv */
281861ed5eSjmmv
290f32fbbaSpooka #ifndef SRC_TESTS_H_MACROS_H_
300f32fbbaSpooka #define SRC_TESTS_H_MACROS_H_
311861ed5eSjmmv
32b5f97337Schristos #include <sys/types.h>
331861ed5eSjmmv #include <errno.h>
343df59b06Spooka #include <stdarg.h>
353df59b06Spooka #include <stdio.h>
3626529eabSpooka #include <stdlib.h>
371861ed5eSjmmv #include <string.h>
381861ed5eSjmmv
391861ed5eSjmmv #include <atf-c.h>
401861ed5eSjmmv
411861ed5eSjmmv #define REQUIRE_LIBC(x, v) \
421861ed5eSjmmv ATF_REQUIRE_MSG((x) != (v), "%s: %s", #x, strerror(errno))
431861ed5eSjmmv
441861ed5eSjmmv #define CHECK_LIBC(x, v) \
451861ed5eSjmmv ATF_CHECK_MSG((x) != (v), "%s: %s", #x, strerror(errno))
461861ed5eSjmmv
471861ed5eSjmmv #define RL(x) REQUIRE_LIBC(x, -1)
48*951bbb9dSchristos #define RLF(x, fmt, arg) \
49*951bbb9dSchristos ATF_CHECK_MSG((x) != -1, "%s [" fmt "]: %s", #x, arg, strerror(errno))
5046d9a871Spooka #define RZ(x) \
5146d9a871Spooka do { \
5246d9a871Spooka int RZ_rv = x; \
5346d9a871Spooka ATF_REQUIRE_MSG(RZ_rv == 0, "%s: %s", #x, strerror(RZ_rv)); \
5446d9a871Spooka } while (/*CONSTCOND*/0)
553df59b06Spooka
56cfdb571bSjakllsch __dead static __inline __printflike(1, 2) void
atf_tc_fail_errno(const char * fmt,...)573df59b06Spooka atf_tc_fail_errno(const char *fmt, ...)
583df59b06Spooka {
593df59b06Spooka va_list ap;
603df59b06Spooka char buf[1024];
613df59b06Spooka int sverrno = errno;
623df59b06Spooka
633df59b06Spooka va_start(ap, fmt);
643df59b06Spooka vsnprintf(buf, sizeof(buf), fmt, ap);
653df59b06Spooka va_end(ap);
663df59b06Spooka
673df59b06Spooka strlcat(buf, ": ", sizeof(buf));
683df59b06Spooka strlcat(buf, strerror(sverrno), sizeof(buf));
693df59b06Spooka
70afc85277Sjoerg atf_tc_fail("%s", buf);
713df59b06Spooka }
720f32fbbaSpooka
7319a6309aSpooka static __inline void
tests_makegarbage(void * space,size_t len)7419a6309aSpooka tests_makegarbage(void *space, size_t len)
7519a6309aSpooka {
7619a6309aSpooka uint16_t *sb = space;
7719a6309aSpooka uint16_t randval;
7819a6309aSpooka
7919a6309aSpooka while (len >= sizeof(randval)) {
807e4263ceSchristos *sb++ = (uint16_t)random();
8119a6309aSpooka len -= sizeof(*sb);
8219a6309aSpooka }
8319a6309aSpooka randval = (uint16_t)random();
8419a6309aSpooka memcpy(sb, &randval, len);
8519a6309aSpooka }
8619a6309aSpooka
870f32fbbaSpooka #endif
88