+#ifndef HAVE_GETLINE
+long getline(char **buf, size_t *n, FILE *stream) {
+
+ int i, ch;
+
+ if (!*buf) {
+ *buf = xbt_malloc(512);
+ *n = 512;
+ }
+
+ if (feof(stream))
+ return (ssize_t)-1;
+
+ for (i=0; (ch = fgetc(stream)) != EOF; i++) {
+
+ if (i >= (*n) + 1)
+ *buf = xbt_realloc(*buf, *n += 512);
+
+ (*buf)[i] = ch;
+
+ if ((*buf)[i] == '\n') {
+ i++;
+ (*buf)[i] = '\0';
+ break;
+ }
+ }
+
+ if (i == *n)
+ *buf = xbt_realloc(*buf, *n += 1);
+
+ (*buf)[i] = '\0';
+
+ return (ssize_t)i;
+}
+
+#endif /* HAVE_GETLINE */