Altre correzioni, con esempi sul server fortunes e relativa "demonizzazzione"
[gapil.git] / sources / FortuneParse.c
index 962ffc53e78da873abd07a96889086c09a114db0..c81c7e828a2e192f4a9fe12efb3db0076e784f3f 100644 (file)
@@ -28,7 +28,7 @@
  * 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 $
+ * $Id: FortuneParse.c,v 1.3 2003/01/12 16:10:07 piccardi Exp $
  *
  ****************************************************************/
 /* 
@@ -43,6 +43,8 @@
 #include <errno.h>      /* error definitions */
 #include <fcntl.h>      /*  */
 
+#include "macros.h"
+
 /* Subroutines declaration */
 extern void usage(void);
 
@@ -51,13 +53,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 +70,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;