1cd62a92dSRobert Mustacchi /*
2cd62a92dSRobert Mustacchi * This file and its contents are supplied under the terms of the
3cd62a92dSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
4cd62a92dSRobert Mustacchi * You may only use this file in accordance with the terms of version
5cd62a92dSRobert Mustacchi * 1.0 of the CDDL.
6cd62a92dSRobert Mustacchi *
7cd62a92dSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this
8cd62a92dSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at
9cd62a92dSRobert Mustacchi * http://www.illumos.org/license/CDDL.
10cd62a92dSRobert Mustacchi */
11cd62a92dSRobert Mustacchi
12cd62a92dSRobert Mustacchi /*
13cd62a92dSRobert Mustacchi * Copyright 2020 Robert Mustacchi
14cd62a92dSRobert Mustacchi */
15cd62a92dSRobert Mustacchi
16cd62a92dSRobert Mustacchi /*
17cd62a92dSRobert Mustacchi * In a c99/xpg6 environment freopen(3C) allows you to specify a NULL path to
18cd62a92dSRobert Mustacchi * try and change the fopen() flags. Verify that the memstream functions do not
19cd62a92dSRobert Mustacchi * allow this. Note, freopen(3C) is defined to try and close the stream, hence
20cd62a92dSRobert Mustacchi * you won't see anything here.
21cd62a92dSRobert Mustacchi */
22cd62a92dSRobert Mustacchi
23cd62a92dSRobert Mustacchi #include <stdio.h>
24cd62a92dSRobert Mustacchi #include <stdio.h>
25cd62a92dSRobert Mustacchi #include <wchar.h>
26cd62a92dSRobert Mustacchi #include <err.h>
27cd62a92dSRobert Mustacchi #include <stdlib.h>
28cd62a92dSRobert Mustacchi #include <errno.h>
29cd62a92dSRobert Mustacchi
30cd62a92dSRobert Mustacchi const char *
_umem_debug_init(void)31cd62a92dSRobert Mustacchi _umem_debug_init(void)
32cd62a92dSRobert Mustacchi {
33cd62a92dSRobert Mustacchi return ("default,verbose");
34cd62a92dSRobert Mustacchi }
35cd62a92dSRobert Mustacchi
36cd62a92dSRobert Mustacchi const char *
_umem_logging_init(void)37cd62a92dSRobert Mustacchi _umem_logging_init(void)
38cd62a92dSRobert Mustacchi {
39cd62a92dSRobert Mustacchi return ("fail,contents");
40cd62a92dSRobert Mustacchi }
41cd62a92dSRobert Mustacchi
42cd62a92dSRobert Mustacchi static void
check_reopen(FILE * f,const char * variant)43cd62a92dSRobert Mustacchi check_reopen(FILE *f, const char *variant)
44cd62a92dSRobert Mustacchi {
45cd62a92dSRobert Mustacchi FILE *new = freopen(NULL, "r", f);
46cd62a92dSRobert Mustacchi if (new != NULL) {
47cd62a92dSRobert Mustacchi errx(EXIT_FAILURE, "TEST FAILED: was able to freopen %s",
48cd62a92dSRobert Mustacchi variant);
49cd62a92dSRobert Mustacchi }
50cd62a92dSRobert Mustacchi
51cd62a92dSRobert Mustacchi if (errno != EBADF) {
52cd62a92dSRobert Mustacchi errx(EXIT_FAILURE, "TEST FAILED: found wrong errno for %s: "
53*6353250fSRobert Mustacchi "expected %d, found %d", variant, EBADF, errno);
54cd62a92dSRobert Mustacchi }
55cd62a92dSRobert Mustacchi
56cd62a92dSRobert Mustacchi (void) printf("TEST PASSED: %s\n", variant);
57cd62a92dSRobert Mustacchi }
58cd62a92dSRobert Mustacchi
59cd62a92dSRobert Mustacchi int
main(void)60cd62a92dSRobert Mustacchi main(void)
61cd62a92dSRobert Mustacchi {
62cd62a92dSRobert Mustacchi FILE *f;
63cd62a92dSRobert Mustacchi char *c;
64cd62a92dSRobert Mustacchi wchar_t *wc;
65cd62a92dSRobert Mustacchi size_t sz;
66cd62a92dSRobert Mustacchi
67cd62a92dSRobert Mustacchi f = fmemopen(NULL, 16, "a+");
68cd62a92dSRobert Mustacchi if (f == NULL) {
69cd62a92dSRobert Mustacchi err(EXIT_FAILURE, "failed to create fmemopen() stream");
70cd62a92dSRobert Mustacchi }
71cd62a92dSRobert Mustacchi check_reopen(f, "fmemopen()");
72cd62a92dSRobert Mustacchi
73cd62a92dSRobert Mustacchi f = open_memstream(&c, &sz);
74cd62a92dSRobert Mustacchi if (f == NULL) {
75cd62a92dSRobert Mustacchi err(EXIT_FAILURE, "failed to create open_memstream() stream");
76cd62a92dSRobert Mustacchi }
77cd62a92dSRobert Mustacchi check_reopen(f, "open_memstream()");
78cd62a92dSRobert Mustacchi free(c);
79cd62a92dSRobert Mustacchi
80cd62a92dSRobert Mustacchi f = open_wmemstream(&wc, &sz);
81cd62a92dSRobert Mustacchi if (f == NULL) {
82cd62a92dSRobert Mustacchi err(EXIT_FAILURE, "failed to create open_wmemstream() stream");
83cd62a92dSRobert Mustacchi }
84cd62a92dSRobert Mustacchi check_reopen(f, "open_wmemstream()");
85cd62a92dSRobert Mustacchi free(wc);
86cd62a92dSRobert Mustacchi
87cd62a92dSRobert Mustacchi return (0);
88cd62a92dSRobert Mustacchi }
89