Varie correzioni, completata revisione capitolo sull'I/O su file
[gapil.git] / sources / FortuneParse.c
index 962ffc53e78da873abd07a96889086c09a114db0..2312167b82bb28bd9db943b71d13a64432a57175 100644 (file)
  * Read n fortunes from fortune file file, and put it into the
  * string array fortune
  *
- * $Id: FortuneParse.c,v 1.1 2002/08/18 10:34:10 piccardi Exp $
- *
  ****************************************************************/
 /* 
  * Include needed headers
  */
-#include <sys/types.h>   /* predefined types */
-#include <sys/stat.h>    /*  */
-#include <unistd.h>      /* include unix standard library */
-#include <stdio.h>       /* include standard I/O library */
-#include <stdlib.h>     /* standard library */
-#include <string.h>     /* ANSI C standard string */
-#include <errno.h>      /* error definitions */
-#include <fcntl.h>      /*  */
+#include <sys/types.h>   /* primitive system data types */
+#include <sys/stat.h>    /* file characteristics constants and functions */
+#include <unistd.h>      /* unix standard library */
+#include <stdio.h>       /* standard I/O library */
+#include <stdlib.h>     /* C standard library */
+#include <string.h>     /* C strings library */
+#include <errno.h>      /* error definitions and routines */
+#include <fcntl.h>      /* file control functions */
+
+#include "macros.h"
 
 /* Subroutines declaration */
 extern void usage(void);
@@ -51,13 +51,14 @@ int FortuneParse(char *file, char **fortune, int n)
 /* Variables definition */
     FILE *fortunefile;
     char line[80];
-    int i;
+    int i, len;
     /* 
      *  fortune file scanning, read string in memory 
      */
     fortunefile = fopen(file,"r");
     if (fortunefile == NULL) {                       /* on open error exit */
-       perror("Opening fortune file");
+       printf("On file %s\n", file);
+       perror("Cannot open file");
        exit(-1);
     }
     i = 0;
@@ -67,16 +68,18 @@ int FortuneParse(char *file, char **fortune, int n)
            perror("Read error");
            exit(-1);
        }
-       if (line[0]=='\n') {
+       debug("i=%d, line=%s", i, line);
+       if (line[0]=='%') {
            if (fortune[i]!=NULL) i++;
            continue;
        }
+       len = strlen(line) + 1;
        if (fortune[i]==NULL) {
-           fortune[i] = (char *) malloc(strlen(line)+1);
-           strncpy(fortune[i], line, strlen(line)+1);
+           fortune[i] = malloc(len);
+           strncpy(fortune[i], line, len);
        } else {
-           fortune[i] = (char *) realloc(fortune[i], strlen(line)+1);
-           strncat(fortune[i], line, strlen(line)+1);
+           fortune[i] = realloc(fortune[i], strlen(fortune[i])+len+1);
+           strncat(fortune[i], line, len);
        }
     } while (i<n);
     return i;