summaryrefslogtreecommitdiff
path: root/regress/lib/libc
diff options
context:
space:
mode:
authorMartin Pieuchot <mpi@cvs.openbsd.org>2013-01-01 17:43:08 +0000
committerMartin Pieuchot <mpi@cvs.openbsd.org>2013-01-01 17:43:08 +0000
commit01e445c6493d9e5dec71f221a69c8a6a8708c745 (patch)
tree199ae7e4768ff100d38c9166666144da82d92291 /regress/lib/libc
parent6e376cffb5c86f5d05da2f7e0ecb7fd7f496d017 (diff)
Simple tests for fmemopen(3) and open_memstream(3)
Diffstat (limited to 'regress/lib/libc')
-rw-r--r--regress/lib/libc/fmemopen/Makefile5
-rw-r--r--regress/lib/libc/fmemopen/fmemopentest.c68
-rw-r--r--regress/lib/libc/open_memstream/Makefile5
-rw-r--r--regress/lib/libc/open_memstream/open_memstreamtest.c97
4 files changed, 175 insertions, 0 deletions
diff --git a/regress/lib/libc/fmemopen/Makefile b/regress/lib/libc/fmemopen/Makefile
new file mode 100644
index 00000000000..9cfbfaa99c2
--- /dev/null
+++ b/regress/lib/libc/fmemopen/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.1 2013/01/01 17:43:07 mpi Exp $
+
+PROG= fmemopentest
+
+.include <bsd.regress.mk>
diff --git a/regress/lib/libc/fmemopen/fmemopentest.c b/regress/lib/libc/fmemopen/fmemopentest.c
new file mode 100644
index 00000000000..ef7e9ff64f1
--- /dev/null
+++ b/regress/lib/libc/fmemopen/fmemopentest.c
@@ -0,0 +1,68 @@
+/* $OpenBSD: fmemopentest.c,v 1.1 2013/01/01 17:43:07 mpi Exp $ */
+/*
+ * Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int
+main(void)
+{
+ FILE *s1, *s2;
+ char c, string[] = "fmemopen test string!";
+ char buffer[1024], *buf = NULL;
+ size_t len;
+ int failures = 0;
+
+ s1 = fmemopen(string, strlen(string), "r");
+ if (s1 == NULL) {
+ warn("unable to open a stream s1");
+ return (1);
+ }
+
+ s2 = fmemopen(buf, 22, "w+");
+ if (s2 == NULL) {
+ warn("unable to create a stream s2");
+ fclose(s1);
+ return (1);
+ }
+
+ while ((c = fgetc(s1)) != EOF)
+ fputc(c, s2);
+
+ if (ftell(s2) != strlen(string)) {
+ warnx("failed copy test (1)");
+ failures++;
+ }
+ fclose(s1);
+
+ fseek(s2, 0, SEEK_SET);
+ if (ftell(s2) != 0) {
+ warnx("failed seek test (2)");
+ failures++;
+ }
+
+ len = fread(buffer, 1, sizeof(buffer) - 1, s2);
+ if (len != strlen(string)) {
+ warnx("failed read test (3)");
+ failures++;
+ }
+
+ return (failures);
+}
diff --git a/regress/lib/libc/open_memstream/Makefile b/regress/lib/libc/open_memstream/Makefile
new file mode 100644
index 00000000000..1b773a403df
--- /dev/null
+++ b/regress/lib/libc/open_memstream/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.1 2013/01/01 17:43:07 mpi Exp $
+
+PROG= open_memstreamtest
+
+.include <bsd.regress.mk>
diff --git a/regress/lib/libc/open_memstream/open_memstreamtest.c b/regress/lib/libc/open_memstream/open_memstreamtest.c
new file mode 100644
index 00000000000..09194908e9b
--- /dev/null
+++ b/regress/lib/libc/open_memstream/open_memstreamtest.c
@@ -0,0 +1,97 @@
+/* $OpenBSD: open_memstreamtest.c,v 1.1 2013/01/01 17:43:07 mpi Exp $ */
+/*
+ * Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define OFFSET 16384
+
+int
+main(void)
+{
+ FILE *fp;
+ char *buf = (char *)0xff;
+ size_t size = 0;
+ off_t off;
+ int i = 0, failures = 0;
+
+ if ((fp = open_memstream(&buf, &size)) == NULL) {
+ warn("open_memstream failed");
+ return (1);
+ }
+
+ off = ftello(fp);
+ if (off != 0) {
+ warnx("ftello failed. (1)");
+ failures++;
+ }
+
+ if (fflush(fp) != 0) {
+ warnx("fflush failed. (2)");
+ failures++;
+ }
+
+ if (size != 0) {
+ warnx("string should be empty. (3)");
+ failures++;
+ }
+
+ if (buf == (char *)0xff) {
+ warnx("buf not updated. (4)");
+ failures++;
+ }
+
+ if (fseek(fp, OFFSET, SEEK_SET) != 0) {
+ warnx("failed to fseek. (5)");
+ failures++;
+ }
+
+ if (fprintf(fp, "hello") == EOF) {
+ warnx("fprintf failed. (6)");
+ failures++;
+ }
+
+ if (fclose(fp) == EOF) {
+ warnx("fclose failed. (7)");
+ failures++;
+ }
+
+ if (size != OFFSET + 5) {
+ warnx("failed, size %zu should be %u\n", size, OFFSET + 5);
+ failures++;
+ }
+
+ /* Needed for sparse files */
+ while (i != OFFSET)
+ if (buf[i++] != '\0') {
+ warnx("failed, buffer non zero'ed (offset %d). (8)", i);
+ failures++;
+ break;
+ }
+
+ if (memcmp(buf + OFFSET, "hello", 5) != 0) {
+ warnx("written string incorrect. (9)");
+ failures++;
+ }
+
+ free(buf);
+
+ return (failures);
+}