190792Sgshapiro/*
2261370Sgshapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers.
390792Sgshapiro *	All rights reserved.
490792Sgshapiro *
590792Sgshapiro * By using this file, you agree to the terms and conditions set
690792Sgshapiro * forth in the LICENSE file which can be found at the top level of
790792Sgshapiro * the sendmail distribution.
890792Sgshapiro */
990792Sgshapiro
1090792Sgshapiro#include <sm/gen.h>
11266711SgshapiroSM_IDSTR(id, "@(#)$Id: t-smstdio.c,v 1.12 2013-11-22 20:51:43 ca Exp $")
1290792Sgshapiro
1390792Sgshapiro#include <sm/io.h>
1490792Sgshapiro#include <sm/string.h>
1590792Sgshapiro#include <sm/test.h>
1690792Sgshapiro
1790792Sgshapiroint
1890792Sgshapiromain(argc, argv)
1990792Sgshapiro	int argc;
2090792Sgshapiro	char **argv;
2190792Sgshapiro{
2290792Sgshapiro	FILE *stream;
2390792Sgshapiro	SM_FILE_T *fp;
2490792Sgshapiro	char buf[128];
2590792Sgshapiro	size_t n;
2690792Sgshapiro	static char testmsg[] = "hello, world\n";
2790792Sgshapiro
2890792Sgshapiro	sm_test_begin(argc, argv,
2990792Sgshapiro		"test sm_io_stdioopen, smiostdin, smiostdout");
3090792Sgshapiro
3190792Sgshapiro	stream = fopen("t-smstdio.1", "w");
3290792Sgshapiro	SM_TEST(stream != NULL);
3390792Sgshapiro
3490792Sgshapiro	fp = sm_io_stdioopen(stream, "w");
3590792Sgshapiro	SM_TEST(fp != NULL);
3690792Sgshapiro
3790792Sgshapiro	(void) sm_io_fprintf(fp, SM_TIME_DEFAULT, "%s", testmsg);
3890792Sgshapiro	sm_io_close(fp, SM_TIME_DEFAULT);
3990792Sgshapiro
4090792Sgshapiro#if 0
4190792Sgshapiro	/*
4290792Sgshapiro	**  stream should now be closed.  This is a tricky way to test
4390792Sgshapiro	**  if it is still open.  Alas, it core dumps on Linux.
4490792Sgshapiro	*/
4590792Sgshapiro
4690792Sgshapiro	fprintf(stream, "oops! stream is still open!\n");
4790792Sgshapiro	fclose(stream);
4890792Sgshapiro#endif
4990792Sgshapiro
5090792Sgshapiro	stream = fopen("t-smstdio.1", "r");
5190792Sgshapiro	SM_TEST(stream != NULL);
5290792Sgshapiro
5390792Sgshapiro	fp = sm_io_stdioopen(stream, "r");
5490792Sgshapiro	SM_TEST(fp != NULL);
5590792Sgshapiro
5690792Sgshapiro	n = sm_io_read(fp, SM_TIME_DEFAULT, buf, sizeof(buf));
5790792Sgshapiro	if (SM_TEST(n == strlen(testmsg)))
5890792Sgshapiro	{
5990792Sgshapiro		buf[n] = '\0';
6090792Sgshapiro		SM_TEST(strcmp(buf, testmsg) == 0);
6190792Sgshapiro	}
6290792Sgshapiro
6390792Sgshapiro#if 0
6490792Sgshapiro
6590792Sgshapiro	/*
6690792Sgshapiro	**  Copy smiostdin to smiostdout
6790792Sgshapiro	**  gotta think some more about how to test smiostdin and smiostdout
6890792Sgshapiro	*/
6990792Sgshapiro
7090792Sgshapiro	while ((c = sm_io_getc(smiostdin)) != SM_IO_EOF)
7190792Sgshapiro		sm_io_putc(smiostdout, c);
7290792Sgshapiro#endif
7390792Sgshapiro
7490792Sgshapiro	return sm_test_end();
7590792Sgshapiro}
76