Date: Tue, 28 Mar 2017 17:37:49 +0000 (UTC) From: Ngie Cooper <ngie@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r316099 - in head: etc/mtree lib/libkvm lib/libkvm/tests Message-ID: <201703281737.v2SHbn1i099064@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ngie Date: Tue Mar 28 17:37:49 2017 New Revision: 316099 URL: https://svnweb.freebsd.org/changeset/base/316099 Log: lib/libkvm: start adding basic tests for kvm(3) - kvm_close: add a testcase to verify support for errno = EINVAL / -1 (see D10065) when kd == NULL is provided to the libcall. - kvm_geterr: -- Add a negative testcase for kd == NULL returning "" (see D10022). -- Add two positive testcases: --- test the error case using kvm_write on a O_RDONLY descriptor. --- test the "no error" case using kvm_read(3) and kvm_nlist(3) as helper routines and by injecting a bogus error message via _kvm_err (an internal API) _kvm_err was used as there isn't a formalized way to clear the error output, and because kvm_nlist always returns ENOENT with the NULL terminator today. - kvm_open, kvm_open2: -- Add some basic negative tests for kvm_open(3) and kvm_open2(3). Testing positive cases with a specific `corefile`/`execfile`/`resolver` requires more work and would require user intervention today in order to reliably test this out. Reviewed by: markj MFC after: 2 months Sponsored by: Dell EMC Isilon Differential Revision: D10024 Added: head/lib/libkvm/tests/ head/lib/libkvm/tests/Makefile (contents, props changed) head/lib/libkvm/tests/kvm_close_test.c (contents, props changed) head/lib/libkvm/tests/kvm_geterr_test.c (contents, props changed) head/lib/libkvm/tests/kvm_open2_test.c (contents, props changed) head/lib/libkvm/tests/kvm_open_test.c (contents, props changed) head/lib/libkvm/tests/kvm_test_common.c (contents, props changed) head/lib/libkvm/tests/kvm_test_common.h (contents, props changed) Modified: head/etc/mtree/BSD.tests.dist head/lib/libkvm/Makefile Modified: head/etc/mtree/BSD.tests.dist ============================================================================== --- head/etc/mtree/BSD.tests.dist Tue Mar 28 13:39:04 2017 (r316098) +++ head/etc/mtree/BSD.tests.dist Tue Mar 28 17:37:49 2017 (r316099) @@ -328,6 +328,8 @@ .. libdevdctl .. + libkvm + .. libmp .. libnv Modified: head/lib/libkvm/Makefile ============================================================================== --- head/lib/libkvm/Makefile Tue Mar 28 13:39:04 2017 (r316098) +++ head/lib/libkvm/Makefile Tue Mar 28 17:37:49 2017 (r316099) @@ -36,4 +36,8 @@ MLINKS+=kvm_nlist.3 kvm_nlist2.3 MLINKS+=kvm_open.3 kvm_close.3 kvm_open.3 kvm_open2.3 kvm_open.3 kvm_openfiles.3 MLINKS+=kvm_read.3 kvm_read2.3 kvm_read.3 kvm_write.3 +.include <src.opts.mk> + +SUBDIR.${MK_TESTS}= tests + .include <bsd.lib.mk> Added: head/lib/libkvm/tests/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/Makefile Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,22 @@ +# $FreeBSD$ + +.include <bsd.own.mk> + +ATF_TESTS_C+= kvm_close_test +ATF_TESTS_C+= kvm_geterr_test +ATF_TESTS_C+= kvm_open_test +ATF_TESTS_C+= kvm_open2_test + +CFLAGS.kvm_geterr_test+= -I${.CURDIR:H} + +LIBADD+= kvm + +WARNS?= 6 + +BINDIR= ${TESTSDIR} + +.for t in kvm_geterr_test kvm_open_test kvm_open2_test +SRCS.$t= $t.c kvm_test_common.c +.endfor + +.include <bsd.test.mk> Added: head/lib/libkvm/tests/kvm_close_test.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_close_test.c Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,57 @@ +/*- + * Copyright (c) 2017 Ngie Cooper <ngie@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 <errno.h> +#include <fcntl.h> +#include <kvm.h> +#include <signal.h> + +#include <atf-c.h> + +ATF_TC(kvm_close_negative_test_NULL); +ATF_TC_HEAD(kvm_close_negative_test_NULL, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "test that kvm_close(NULL) succeeds without error"); +} + +ATF_TC_BODY(kvm_close_negative_test_NULL, tc) +{ + + ATF_REQUIRE_ERRNO(EINVAL, kvm_close(NULL) == -1); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, kvm_close_negative_test_NULL); + + return (atf_no_error()); +} Added: head/lib/libkvm/tests/kvm_geterr_test.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_geterr_test.c Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,137 @@ +/*- + * Copyright (c) 2017 Ngie Cooper <ngie@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 <sys/param.h> +#include <errno.h> +#include <fcntl.h> +#include <kvm.h> +#include <limits.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> + +#include <atf-c.h> + +#include "kvm_private.h" + +#include "kvm_test_common.h" + +ATF_TC(kvm_geterr_negative_test_NULL); +ATF_TC_HEAD(kvm_geterr_negative_test_NULL, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "test that kvm_geterr(NULL) returns NULL"); +} + +ATF_TC_BODY(kvm_geterr_negative_test_NULL, tc) +{ + + ATF_REQUIRE(!errbuf_has_error(kvm_geterr(NULL))); +} + +ATF_TC(kvm_geterr_positive_test_error); +ATF_TC_HEAD(kvm_geterr_positive_test_error, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "test that kvm_geterr(kd) when kd doesn't contain an error returns \"\""); + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_geterr_positive_test_error, tc) +{ + kvm_t *kd; + char *error_msg; + + errbuf_clear(); + kd = kvm_open2(NULL, NULL, O_RDONLY, errbuf, NULL); + ATF_CHECK(!errbuf_has_error(errbuf)); + ATF_REQUIRE_MSG(kd != NULL, "kvm_open2 failed: %s", errbuf); + ATF_REQUIRE_MSG(kvm_write(kd, 0, NULL, 0) == -1, + "kvm_write succeeded unexpectedly on an O_RDONLY file descriptor"); + error_msg = kvm_geterr(kd); + ATF_CHECK(errbuf_has_error(error_msg)); + ATF_REQUIRE_MSG(kvm_close(kd) == 0, "kvm_close failed: %s", + strerror(errno)); +} + +ATF_TC(kvm_geterr_positive_test_no_error); +ATF_TC_HEAD(kvm_geterr_positive_test_no_error, tc) +{ + + atf_tc_set_md_var(tc, "descr", + "test that kvm_geterr(kd) when kd contains an error returns an error message"); + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_geterr_positive_test_no_error, tc) +{ +#define ALL_IS_WELL "that ends well" + kvm_t *kd; + char *error_msg; + struct nlist nl[] = { +#define SYMNAME "_mp_maxcpus" +#define X_MAXCPUS 0 + { SYMNAME, 0, 0, 0, 0 }, + { NULL, 0, 0, 0, 0 }, + }; + ssize_t rc; + int mp_maxcpus, retcode; + + errbuf_clear(); + kd = kvm_open2(NULL, NULL, O_RDONLY, errbuf, NULL); + ATF_CHECK(!errbuf_has_error(errbuf)); + ATF_REQUIRE_MSG(kd != NULL, "kvm_open2 failed: %s", errbuf); + retcode = kvm_nlist(kd, nl); + ATF_REQUIRE_MSG(retcode != -1, + "kvm_nlist failed (returned %d): %s", retcode, kvm_geterr(kd)); + if (nl[X_MAXCPUS].n_type == 0) + atf_tc_skip("symbol (\"%s\") couldn't be found", SYMNAME); + _kvm_err(kd, NULL, "%s", ALL_IS_WELL); /* XXX: internal API */ + rc = kvm_read(kd, nl[X_MAXCPUS].n_value, &mp_maxcpus, + sizeof(mp_maxcpus)); + + ATF_REQUIRE_MSG(rc != -1, "kvm_read failed: %s", kvm_geterr(kd)); + error_msg = kvm_geterr(kd); + ATF_REQUIRE_MSG(strcmp(error_msg, ALL_IS_WELL) == 0, + "error message changed: %s", error_msg); + ATF_REQUIRE_MSG(kvm_close(kd) == 0, "kvm_close failed: %s", + strerror(errno)); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, kvm_geterr_negative_test_NULL); + ATF_TP_ADD_TC(tp, kvm_geterr_positive_test_error); + ATF_TP_ADD_TC(tp, kvm_geterr_positive_test_no_error); + + return (atf_no_error()); +} Added: head/lib/libkvm/tests/kvm_open2_test.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_open2_test.c Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,117 @@ +/*- + * Copyright (c) 2017 Ngie Cooper <ngie@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 <sys/param.h> +#include <errno.h> +#include <fcntl.h> +#include <kvm.h> +#include <limits.h> +#include <paths.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <atf-c.h> + +#include "kvm_test_common.h" + +ATF_TC_WITHOUT_HEAD(kvm_open2_negative_test_nonexistent_corefile); +ATF_TC_BODY(kvm_open2_negative_test_nonexistent_corefile, tc) +{ + + errbuf_clear(); + ATF_CHECK(kvm_open2(NULL, "/nonexistent", O_RDONLY, NULL, NULL) == NULL); + ATF_CHECK(!errbuf_has_error(errbuf)); + errbuf_clear(); + ATF_CHECK(kvm_open2(NULL, "/nonexistent", O_RDONLY, + errbuf, NULL) == NULL); + ATF_CHECK(errbuf_has_error(errbuf)); +} + +ATF_TC_WITHOUT_HEAD(kvm_open2_negative_test_nonexistent_execfile); +ATF_TC_BODY(kvm_open2_negative_test_nonexistent_execfile, tc) +{ + + errbuf_clear(); + ATF_CHECK(kvm_open2("/nonexistent", _PATH_DEVZERO, O_RDONLY, + NULL, NULL) == NULL); + ATF_CHECK(strlen(errbuf) == 0); + errbuf_clear(); + ATF_CHECK(kvm_open2("/nonexistent", _PATH_DEVZERO, O_RDONLY, + errbuf, NULL) == NULL); + ATF_CHECK(errbuf_has_error(errbuf)); +} + +ATF_TC(kvm_open2_negative_test_invalid_corefile); +ATF_TC_HEAD(kvm_open2_negative_test_invalid_corefile, tc) +{ + + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_open2_negative_test_invalid_corefile, tc) +{ + kvm_t *kd; + + errbuf_clear(); + atf_utils_create_file("some-file", "this is a text file"); + kd = kvm_open2(NULL, "some-file", O_RDONLY, errbuf, NULL); + ATF_CHECK(errbuf_has_error(errbuf)); + ATF_REQUIRE_MSG(kd == NULL, "kvm_open2 succeeded"); +} + +ATF_TC(kvm_open2_negative_test_invalid_execfile); +ATF_TC_HEAD(kvm_open2_negative_test_invalid_execfile, tc) +{ + + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_open2_negative_test_invalid_execfile, tc) +{ + kvm_t *kd; + + errbuf_clear(); + atf_utils_create_file("some-file", "this is a text file"); + kd = kvm_open2("some-file", "/bin/sh", O_RDONLY, errbuf, NULL); + ATF_CHECK(errbuf_has_error(errbuf)); + ATF_REQUIRE_MSG(kd == NULL, "kvm_open2 succeeded unexpectedly"); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, kvm_open2_negative_test_invalid_corefile); + ATF_TP_ADD_TC(tp, kvm_open2_negative_test_invalid_execfile); + ATF_TP_ADD_TC(tp, kvm_open2_negative_test_nonexistent_corefile); + ATF_TP_ADD_TC(tp, kvm_open2_negative_test_nonexistent_execfile); + + return (atf_no_error()); +} Added: head/lib/libkvm/tests/kvm_open_test.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_open_test.c Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,105 @@ +/*- + * Copyright (c) 2017 Ngie Cooper <ngie@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 <sys/param.h> +#include <errno.h> +#include <fcntl.h> +#include <kvm.h> +#include <limits.h> +#include <paths.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <atf-c.h> + +#include "kvm_test_common.h" + +ATF_TC_WITHOUT_HEAD(kvm_open_negative_test_nonexistent_corefile); +ATF_TC_BODY(kvm_open_negative_test_nonexistent_corefile, tc) +{ + + ATF_CHECK(kvm_open(NULL, "/nonexistent", NULL, O_RDONLY, NULL) == NULL); + ATF_CHECK(kvm_open(NULL, "/nonexistent", NULL, O_RDONLY, + getprogname()) == NULL); +} + +ATF_TC_WITHOUT_HEAD(kvm_open_negative_test_nonexistent_execfile); +ATF_TC_BODY(kvm_open_negative_test_nonexistent_execfile, tc) +{ + + ATF_CHECK(kvm_open("/nonexistent", _PATH_DEVZERO, NULL, O_RDONLY, + NULL) == NULL); + ATF_CHECK(kvm_open("/nonexistent", _PATH_DEVZERO, NULL, O_RDONLY, + getprogname()) == NULL); +} + +ATF_TC(kvm_open_negative_test_invalid_corefile); +ATF_TC_HEAD(kvm_open_negative_test_invalid_corefile, tc) +{ + + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_open_negative_test_invalid_corefile, tc) +{ + kvm_t *kd; + + atf_utils_create_file("some-file", "this is a text file"); + kd = kvm_open(NULL, "some-file", NULL, O_RDONLY, getprogname()); + ATF_REQUIRE_MSG(kd == NULL, "kvm_open didn't return NULL on failure"); +} + +ATF_TC(kvm_open_negative_test_invalid_execfile); +ATF_TC_HEAD(kvm_open_negative_test_invalid_execfile, tc) +{ + + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(kvm_open_negative_test_invalid_execfile, tc) +{ + kvm_t *kd; + + atf_utils_create_file("some-file", "this is a text file"); + kd = kvm_open("some-file", "/bin/sh", NULL, O_RDONLY, getprogname()); + ATF_REQUIRE_MSG(kd == NULL, "kvm_open succeeded unexpectedly"); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, kvm_open_negative_test_invalid_corefile); + ATF_TP_ADD_TC(tp, kvm_open_negative_test_invalid_execfile); + ATF_TP_ADD_TC(tp, kvm_open_negative_test_nonexistent_corefile); + ATF_TP_ADD_TC(tp, kvm_open_negative_test_nonexistent_execfile); + + return (atf_no_error()); +} Added: head/lib/libkvm/tests/kvm_test_common.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_test_common.c Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2017 Ngie Cooper <ngie@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 <sys/types.h> +#include <string.h> + +#include "kvm_test_common.h" + +char errbuf[_POSIX2_LINE_MAX]; + +void +errbuf_clear(void) +{ + + strcpy(errbuf, ""); +} + +bool +errbuf_has_error(const char *_errbuf) +{ + + return (strcmp(_errbuf, "")); +} Added: head/lib/libkvm/tests/kvm_test_common.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libkvm/tests/kvm_test_common.h Tue Mar 28 17:37:49 2017 (r316099) @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2017 Ngie Cooper <ngie@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. + * + * $FreeBSD$ + */ + +#ifndef __KVM_TEST_COMMON_H__ + +#include <sys/types.h> +#include <limits.h> +#include <stdbool.h> + +extern char errbuf[_POSIX2_LINE_MAX]; + +void errbuf_clear(void); +bool errbuf_has_error(const char *); + +#endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703281737.v2SHbn1i099064>