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