xref: /freebsd/contrib/sendmail/libsm/t-smstdio.c (revision 5ca8e32633c4ffbbcd6762e5888b6a4ba0708c6c)
1 /*
2  * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers.
3  *	All rights reserved.
4  *
5  * By using this file, you agree to the terms and conditions set
6  * forth in the LICENSE file which can be found at the top level of
7  * the sendmail distribution.
8  */
9 
10 #include <sm/gen.h>
11 SM_IDSTR(id, "@(#)$Id: t-smstdio.c,v 1.12 2013-11-22 20:51:43 ca Exp $")
12 
13 #include <sm/io.h>
14 #include <sm/string.h>
15 #include <sm/test.h>
16 
17 int
18 main(argc, argv)
19 	int argc;
20 	char **argv;
21 {
22 	FILE *stream;
23 	SM_FILE_T *fp;
24 	char buf[128];
25 	size_t n;
26 	static char testmsg[] = "hello, world\n";
27 
28 	sm_test_begin(argc, argv,
29 		"test sm_io_stdioopen, smiostdin, smiostdout");
30 
31 	stream = fopen("t-smstdio.1", "w");
32 	SM_TEST(stream != NULL);
33 
34 	fp = sm_io_stdioopen(stream, "w");
35 	SM_TEST(fp != NULL);
36 
37 	(void) sm_io_fprintf(fp, SM_TIME_DEFAULT, "%s", testmsg);
38 	sm_io_close(fp, SM_TIME_DEFAULT);
39 
40 #if 0
41 	/*
42 	**  stream should now be closed.  This is a tricky way to test
43 	**  if it is still open.  Alas, it core dumps on Linux.
44 	*/
45 
46 	fprintf(stream, "oops! stream is still open!\n");
47 	fclose(stream);
48 #endif
49 
50 	stream = fopen("t-smstdio.1", "r");
51 	SM_TEST(stream != NULL);
52 
53 	fp = sm_io_stdioopen(stream, "r");
54 	SM_TEST(fp != NULL);
55 
56 	n = sm_io_read(fp, SM_TIME_DEFAULT, buf, sizeof(buf));
57 	if (SM_TEST(n == strlen(testmsg)))
58 	{
59 		buf[n] = '\0';
60 		SM_TEST(strcmp(buf, testmsg) == 0);
61 	}
62 
63 #if 0
64 
65 	/*
66 	**  Copy smiostdin to smiostdout
67 	**  gotta think some more about how to test smiostdin and smiostdout
68 	*/
69 
70 	while ((c = sm_io_getc(smiostdin)) != SM_IO_EOF)
71 		sm_io_putc(smiostdout, c);
72 #endif
73 
74 	return sm_test_end();
75 }
76