summaryrefslogtreecommitdiff
path: root/src/h_getline.c
diff options
context:
space:
mode:
authorfergus.henderson <fergushenderson@users.noreply.github.com>2009-07-24 16:31:07 +0000
committerfergus.henderson <fergushenderson@users.noreply.github.com>2009-07-24 16:31:07 +0000
commit8f268d30d81e54814d8036fbee59d25020682f60 (patch)
treeadc0450607f0fbf3d312fd86358952e861bcf11e /src/h_getline.c
parent8ce4277885cc4a080945942672a4e00b379ab147 (diff)
downloaddistcc-git-8f268d30d81e54814d8036fbee59d25020682f60.tar.gz
Define a GNU-compatible getline() implementation,
in case we don't have getline() available. Reviewed by Craig Silverstein.
Diffstat (limited to 'src/h_getline.c')
-rw-r--r--src/h_getline.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/h_getline.c b/src/h_getline.c
new file mode 100644
index 0000000..83eb9bf
--- /dev/null
+++ b/src/h_getline.c
@@ -0,0 +1,64 @@
+/* -*- c-file-style: "java"; indent-tabs-mode: nil; tab-width: 4; fill-column: 78 -*-
+ * Copyright 2009 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
+*/
+
+/* Author: Fergus Henderson */
+
+/*
+ * h_getline.cc:
+ * Helper for tests of getline().
+ */
+
+#include <config.h>
+#include "distcc.h"
+#include "util.h"
+#include <stdlib.h>
+
+const char *rs_program_name = "h_getline";
+
+int main(int argc, char** argv) {
+ char *line;
+ size_t n;
+ int c, i;
+
+ if (argc > 1) {
+ n = atoi(argv[1]);
+ line = malloc(n);
+ } else {
+ n = 0;
+ line = NULL;
+ }
+
+ printf("original n = %lu, ", (unsigned long) n);
+ long result = getline(&line, &n, stdin);
+ if (result > (long) n) {
+ fprintf(stderr, "ERROR: return value > buffer size\n");
+ exit(1);
+ }
+ printf("returned %ld, ", (long) result);
+ printf("n = %lu, ", (unsigned long) n);
+ printf("line = '");
+ for (i = 0; i < result; i++) {
+ putchar(line[i]);
+ }
+ printf("', rest = '");
+ while ((c = getchar()) != EOF)
+ putchar(c);
+ printf("'\n");
+ return 0;
+}