SLFUTURE_VOID *SLdebug_realloc (SLFUTURE_VOID *p, unsigned long n) { if (-1 == check_memory ((unsigned char *) p, "REALLOC")) return NULL; if ((p = (char *) SLREALLOC ((char*)p - Chunk, n + 2 * Chunk)) == NULL) return NULL; fixup ((unsigned char *) p, n, "REALLOC"); return (SLFUTURE_VOID *) ((char*)p + Chunk); }
void *_JDMrealloc (void *s, unsigned int len) { if (s == NULL) return _JDMmalloc (len, "realloc"); s = (char *)SLREALLOC (s, len); if (s == NULL) JDMath_Error = JDMATH_MALLOC_ERROR; return s; }
int JDMread_column_fdata (char *file, float **data, int *cindex, unsigned int n, unsigned int *num_read) { char buf[512]; unsigned int space = 1024; unsigned int nread = 0; int do_close; unsigned int i; #define MAX_COLUMNS 20 float dum[MAX_COLUMNS]; FILE *fp; *num_read = 0; if (n > MAX_COLUMNS) { JDMath_Error = JDMATH_INVALID_PARAMETER; JDMmsg_error ("JDMread_column_fdata"); return -1; } if (file == NULL) { fp = stdin; do_close = 0; file = "<stdin>"; } else { if (NULL == (fp = fopen (file, "r"))) { JDMath_Error = JDMATH_FILE_OPEN_ERROR; JDMmsg_error2 ("JDMread_column_fdata", file); return -1; } do_close = 1; } /* initialize everything to NULL */ for (i = 0; i < n; i++) data[i] = NULL; for (i = 0; i < n; i++) { float *ptr; if (cindex[i] == 0) continue; ptr = (float *) SLMALLOC (space * sizeof (float)); if (ptr == NULL) goto return_error; data[i] = ptr; } while (NULL != fgets (buf, sizeof (buf) - 1, fp)) { if ((int)n > sscanf (buf, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f", dum+0, dum+1, dum+2, dum+3, dum+4, dum+5, dum+6, dum+7, dum+8, dum+9, dum+10, dum+11, dum+12, dum+13, dum+14, dum+15, dum+16, dum+17, dum+18, dum+19 )) continue; if (nread == space) { space += 1024; for (i = 0; i < n; i++) { float *ptr; if (cindex[i] == 0) continue; ptr = (float *) SLREALLOC (data[i], space * sizeof (float)); if (ptr == NULL) goto return_error; data[i] = ptr; } } for (i = 0; i < n; i++) { if (cindex[i] == 0) continue; data[i][nread] = dum[i]; } nread++; } if (nread == 0) { JDMath_Error = JDMATH_CORRUPT_FILE_ERROR; JDMmsg_error2 ("JDMread_column_fdata", file); goto read_error; } if (file != NULL) fclose (fp); *num_read = nread; return 0; return_error: JDMath_Error = JDMATH_MALLOC_ERROR; read_error: if (do_close) fclose (fp); JDMmsg_error2 ("JDMread_column_fdata", file); for (i = 0; i < n; i++) { if (data[i] != NULL) SLFREE (data[i]); } return -1; }