
1: #include <stdio.h> 2: #include <sys/types.h> 3: 4: 5: static int 6: check (FILE *fp, off_t o) 7: { 8: int result = 0; 9: if (feof (fp)) 10: { 11: puts ("feof !"); 12: result = 1; 13: } 14: if (ferror (fp)) 15: { 16: puts ("ferror !"); 17: result = 1; 18: } 19: if (ftello (fp) != o) 20: { 21: printf ("position = %lu, not %lu\n", (unsigned long int) ftello (fp), 22: (unsigned long int) o); 23: result = 1; 24: } 25: return result; 26: } 27: 28: 29: static int 30: do_test (void) 31: { 32: FILE *fp = tmpfile (); 33: if (fp == NULL) 34: { 35: puts ("tmpfile failed"); 36: return 1; 37: } 38: if (check (fp, 0) != 0) 39: return 1; 40: 41: puts ("going to write"); 42: if (fputs ("hello", fp) == EOF) 43: { 44: puts ("fputs failed"); 45: return 1; 46: } 47: if (check (fp, 5) != 0) 48: return 1; 49: 50: puts ("going to rewind"); 51: rewind (fp); 52: if (check (fp, 0) != 0) 53: return 1; 54: 55: puts ("going to read char"); 56: int c = fgetc (fp); 57: if (c != 'h') 58: { 59: printf ("read %c, not %c\n", c, 'h'); 60: return 1; 61: } 62: if (check (fp, 1) != 0) 63: return 1; 64: 65: puts ("going to put back"); 66: if (ungetc (' ', fp) == EOF) 67: { 68: puts ("ungetc failed"); 69: return 1; 70: } 71: if (check (fp, 0) != 0) 72: return 1; 73: 74: puts ("going to write again"); 75: if (fputs ("world", fp) == EOF) 76: { 77: puts ("2nd fputs failed"); 78: return 1; 79: } 80: if (check (fp, 5) != 0) 81: return 1; 82: 83: puts ("going to rewind again"); 84: rewind (fp); 85: if (check (fp, 0) != 0) 86: return 1; 87: 88: if (fclose (fp) != 0) 89: { 90: puts ("fclose failed"); 91: return 1; 92: } 93: 94: return 0; 95: } 96: 97: #define TEST_FUNCTION do_test () 98: #include "../test-skeleton.c"