48cecd8a58
MFC after: 3 days
87 lines
1.7 KiB
C
87 lines
1.7 KiB
C
/*
|
|
* Copyright (c) 2013 Proofpoint, Inc. and its suppliers.
|
|
* All rights reserved.
|
|
*
|
|
* By using this file, you agree to the terms and conditions set
|
|
* forth in the LICENSE file which can be found at the top level of
|
|
* the sendmail distribution.
|
|
*/
|
|
|
|
#include <sm/gen.h>
|
|
SM_IDSTR(id, "@(#)$Id: t-fget.c,v 1.2 2013-11-22 20:51:43 ca Exp $")
|
|
|
|
#include <sm/io.h>
|
|
#include <sm/string.h>
|
|
#include <sm/test.h>
|
|
#include <errno.h>
|
|
|
|
void
|
|
check(char *msg, int l)
|
|
{
|
|
SM_FILE_T *wfp, *rfp;
|
|
char buf[256];
|
|
size_t n;
|
|
int r, i;
|
|
static char fn[] = "tfget";
|
|
|
|
wfp = sm_io_open(SmFtStdio, SM_TIME_DEFAULT, fn,
|
|
SM_IO_WRONLY_B, NULL);
|
|
SM_TEST(wfp != NULL);
|
|
for (i = 0; i < l; i++)
|
|
{
|
|
r = sm_io_putc(wfp, SM_TIME_DEFAULT, msg[i]);
|
|
SM_TEST(r >= 0);
|
|
}
|
|
r = sm_io_close(wfp, SM_TIME_DEFAULT);
|
|
SM_TEST(r == 0);
|
|
|
|
rfp = sm_io_open(SmFtStdio, SM_TIME_DEFAULT, fn,
|
|
SM_IO_RDONLY_B, NULL);
|
|
SM_TEST(rfp != NULL);
|
|
n = sizeof(buf);
|
|
r = sm_io_fgets(rfp, SM_TIME_DEFAULT, buf, n);
|
|
if (l == 0)
|
|
{
|
|
SM_TEST(r == -1);
|
|
SM_TEST(errno == 0);
|
|
}
|
|
else
|
|
{
|
|
SM_TEST(r == l);
|
|
if (r != l)
|
|
fprintf(stderr, "buf='%s', in='%s', r=%d, l=%d\n",
|
|
buf, msg, r, l);
|
|
}
|
|
SM_TEST(memcmp(buf, msg, l) == 0);
|
|
r = sm_io_close(rfp, SM_TIME_DEFAULT);
|
|
SM_TEST(r == 0);
|
|
}
|
|
|
|
|
|
int
|
|
main(argc, argv)
|
|
int argc;
|
|
char **argv;
|
|
{
|
|
char res[256];
|
|
int l;
|
|
|
|
sm_test_begin(argc, argv, "test fget");
|
|
|
|
check("", strlen(""));
|
|
check("\n", strlen("\n"));
|
|
check("test\n", strlen("test\n"));
|
|
|
|
l = snprintf(res, sizeof(res), "%c%s\n", '\0', "test ing");
|
|
check(res, l);
|
|
|
|
l = snprintf(res, sizeof(res), "%c%s%c\n", '\0', "test ing", '\0');
|
|
check(res, l);
|
|
|
|
l = snprintf(res, sizeof(res), "%c%s%c%s\n",
|
|
'\0', "test ing", '\0', "eol");
|
|
check(res, l);
|
|
|
|
return sm_test_end();
|
|
}
|