stdio1.c

00001 /*
00002  * Copyright (c) 2008 Jiri Svoboda
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  *
00009  * - Redistributions of source code must retain the above copyright
00010  *   notice, this list of conditions and the following disclaimer.
00011  * - Redistributions in binary form must reproduce the above copyright
00012  *   notice, this list of conditions and the following disclaimer in the
00013  *   documentation and/or other materials provided with the distribution.
00014  * - The name of the author may not be used to endorse or promote products
00015  *   derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  */
00028 
00029 #include <stdio.h>
00030 #include <stdlib.h>
00031 #include <errno.h>
00032 #include "../tester.h"
00033 
00034 #define BUF_SIZE  32
00035 
00036 static char buf[BUF_SIZE + 1];
00037 
00038 const char *test_stdio1(void)
00039 {
00040         FILE *file;
00041         const char *file_name = "/readme";
00042         
00043         TPRINTF("Open file \"%s\"...", file_name);
00044         errno = 0;
00045         file = fopen(file_name, "rt");
00046         if (file == NULL) {
00047                 TPRINTF("errno = %d\n", errno);
00048                 return "Failed opening file";
00049         } else
00050                 TPRINTF("OK\n");
00051         
00052         TPRINTF("Read file...");
00053         size_t cnt = fread(buf, 1, BUF_SIZE, file);
00054         if (ferror(file)) {
00055                 TPRINTF("errno = %d\n", errno);
00056                 fclose(file);
00057                 return "Failed reading file";
00058         } else
00059                 TPRINTF("OK\n");
00060         
00061         buf[cnt] = '\0';
00062         TPRINTF("Read %zu bytes, string \"%s\"\n", cnt, buf);
00063         
00064         TPRINTF("Seek to beginning...");
00065         if (fseek(file, 0, SEEK_SET) != 0) {
00066                 TPRINTF("errno = %d\n", errno);
00067                 fclose(file);
00068                 return "Failed seeking in file";
00069         } else
00070                 TPRINTF("OK\n");
00071         
00072         TPRINTF("Read using fgetc()...");
00073         while (true) {
00074                 int c = fgetc(file);
00075                 if (c == EOF)
00076                         break;
00077                 
00078                 TPRINTF(".");
00079         }
00080         TPRINTF("[EOF]\n");
00081         
00082         TPRINTF("Close...");
00083         if (fclose(file) != 0) {
00084                 TPRINTF("errno = %d\n", errno);
00085                 return "Failed closing file";
00086         } else
00087                 TPRINTF("OK\n");
00088         
00089         return NULL;
00090 }

Generated on Thu Jun 2 07:45:43 2011 for HelenOS/USB by  doxygen 1.4.7