1 /*
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright © 2024 Hana Ashour
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 *
18 * 3. Neither the name of the copyright holder nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
33 * OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35
36 #include <stdio.h>
37 #include <string.h>
38
39 #ifndef TEST_FILE_NAME
40 #define TEST_FILE_NAME "UNGETCFTELL.DAT"
41 #endif
42
43 const char *str = "This is a string";
44
main(void)45 int main(void) {
46
47 FILE *file;
48 char first;
49 long position, start;
50
51 file = fopen( TEST_FILE_NAME, "wb" );
52 if( file == NULL ) return 1;
53 fputs(str, file);
54 fclose(file);
55
56 file = fopen( TEST_FILE_NAME, "rb" );
57 if(file == NULL) return 1;
58
59 first = fgetc(file);
60 printf("First character read: %c\n", first);
61
62 start = ftell(file);
63 printf("Position before ungetc: %ld\n", start);
64
65 ungetc(first, file); // Use ungetc to put the character back
66
67 position = ftell(file); // Check ftell position (should be 0 after ungetc if first character was read)
68 printf("Position after ungetc: %ld\n", position);
69
70 fclose(file);
71
72 if (position == 0) {
73 printf("Test passed: ungetc and ftell working as expected.\n");
74 return 0;
75 } else {
76 printf("Test failed: Incorrect position after ungetc.\n");
77 return 1;
78 }
79 }
80