Fix readline() when fgets returns NULL even on success
Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
This commit is contained in:
		| @@ -4,6 +4,7 @@ | ||||
|  * Use of this source code is governed by a LGPL-3.0 | ||||
|  * license that can be found in the LICENSE file. | ||||
|  */ | ||||
| #include <errno.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| @@ -28,39 +29,39 @@ double myrandom(int* seed) { | ||||
| } | ||||
|  | ||||
| void random_reset(int *seed, int ibase, double *coord) { | ||||
|   int i; | ||||
|   char *str = (char *) &ibase; | ||||
|   int n = sizeof(int); | ||||
|   unsigned int hash = 0; | ||||
|     int i; | ||||
|     char *str = (char *) &ibase; | ||||
|     int n = sizeof(int); | ||||
|     unsigned int hash = 0; | ||||
|  | ||||
|   for (i = 0; i < n; i++) { | ||||
|     hash += str[i]; | ||||
|     hash += (hash << 10); | ||||
|     hash ^= (hash >> 6); | ||||
|   } | ||||
|     for (i = 0; i < n; i++) { | ||||
|         hash += str[i]; | ||||
|         hash += (hash << 10); | ||||
|         hash ^= (hash >> 6); | ||||
|     } | ||||
|  | ||||
|   str = (char *) coord; | ||||
|   n = 3 * sizeof(double); | ||||
|   for (i = 0; i < n; i++) { | ||||
|     hash += str[i]; | ||||
|     hash += (hash << 10); | ||||
|     hash ^= (hash >> 6); | ||||
|   } | ||||
|     str = (char *) coord; | ||||
|     n = 3 * sizeof(double); | ||||
|     for (i = 0; i < n; i++) { | ||||
|         hash += str[i]; | ||||
|         hash += (hash << 10); | ||||
|         hash ^= (hash >> 6); | ||||
|     } | ||||
|  | ||||
|   hash += (hash << 3); | ||||
|   hash ^= (hash >> 11); | ||||
|   hash += (hash << 15); | ||||
|     hash += (hash << 3); | ||||
|     hash ^= (hash >> 11); | ||||
|     hash += (hash << 15); | ||||
|  | ||||
|   // keep 31 bits of unsigned int as new seed | ||||
|   // do not allow seed = 0, since will cause hang in gaussian() | ||||
|     // keep 31 bits of unsigned int as new seed | ||||
|     // do not allow seed = 0, since will cause hang in gaussian() | ||||
|  | ||||
|   *seed = hash & 0x7ffffff; | ||||
|   if (!(*seed)) *seed = 1; | ||||
|     *seed = hash & 0x7ffffff; | ||||
|     if (!(*seed)) *seed = 1; | ||||
|  | ||||
|   // warm up the RNG | ||||
|     // warm up the RNG | ||||
|  | ||||
|   for (i = 0; i < 5; i++) myrandom(seed); | ||||
|   //save = 0; | ||||
|     for (i = 0; i < 5; i++) myrandom(seed); | ||||
|     //save = 0; | ||||
| } | ||||
|  | ||||
| int str2ff(const char *string) { | ||||
| @@ -84,7 +85,9 @@ int get_num_threads() { | ||||
|  | ||||
| void readline(char *line, FILE *fp) { | ||||
|     if(fgets(line, MAXLINE, fp) == NULL) { | ||||
|         fprintf(stderr, "readline(): Error: could not read line!\n"); | ||||
|         exit(-1); | ||||
|         if(errno != 0) { | ||||
|             perror("readline()"); | ||||
|             exit(-1); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user