1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
/*============================================================================
**
** Source: test2.c
**
** Purpose: Calls fgets to read a full line from a file. A maximum length
** parameter greater than the length of the line is passed.
**
**
**==========================================================================*/
#include <palsuite.h>
int __cdecl main(int argc, char **argv)
{
const char outBuf1[] = "This is a test.\n";
const char outBuf2[] = "This is too.";
char inBuf[sizeof(outBuf1) + sizeof(outBuf2)];
const char filename[] = "testfile.tmp";
const int offset = 5; /*value chosen arbitrarily*/
int expectedLen;
int actualLen;
FILE * fp;
if (PAL_Initialize(argc, argv))
{
return FAIL;
}
/*write the file that we will use to test */
fp = fopen(filename, "w");
if (fp == NULL)
{
Fail("Unable to open file for write.\n");
}
fwrite(outBuf1, sizeof(outBuf1[0]), sizeof(outBuf1), fp);
fwrite(outBuf2, sizeof(outBuf2[0]), sizeof(outBuf2), fp);
if (fclose(fp) != 0)
{
Fail("error closing stream opened for write.\n");
}
/*Read until the first linebreak*/
fp = fopen(filename, "r");
if (fp == NULL)
{
Fail("Unable to open file for read.\n");
}
if (fgets(inBuf, sizeof(outBuf1) + offset , fp) != inBuf)
{
Fail("Error reading from file using fgets.\n");
}
/*note: -1 because strlen returns the length of a string _not_
including the NULL, while fgets returns a string of specified
maximum length _including_ the NULL.*/
expectedLen = strlen(outBuf1);
actualLen = strlen(inBuf);
if (actualLen > expectedLen)
{
Fail("fgets() was asked to read the first line of a file, but did "
"not stop at the end of the line.\n");
}
else if (actualLen < expectedLen)
{
Fail("fgets() was asked to read the first line of a file, but did "
"not read the entire line.\n");
}
else if (memcmp(inBuf, outBuf1, actualLen) != 0)
{
/*We didn't read back exactly outBuf1*/
Fail("fgets() was asked to read the first line of a file. It "
"has read back a string of the correct length, but the"
" contents are not correct.\n");
}
if (fclose(fp) != 0)
{
Fail("Error closing file after using fgets().\n");
}
PAL_Terminate();
return PASS;
}
|