diff --git a/tools/getline.c b/tools/getline.c
new file mode 100644
index 0000000..3ba52a3
--- /dev/null
+++ b/tools/getline.c
@@ -0,0 +1,101 @@
+/* getline.c -- Replacement for GNU C library function getline
+
+Copyright (C) 1993, 1996, 2001, 2002 Free Software Foundation, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* Written by Jan Brittenson, bson@gnu.ai.mit.edu.  */
+
+#include <assert.h>
+#include <stdio.h>
+
+/* Always add at least this many bytes when extending the buffer.  */
+#define MIN_CHUNK 64
+
+/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR
+   + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from
+   malloc (or NULL), pointing to *N characters of space.  It is realloc'd
+   as necessary.  Return the number of characters read (not including the
+   null terminator), or -1 on error or EOF.
+   NOTE: There is another getstr() function declared in <curses.h>.  */
+static int getstr(char **lineptr, size_t *n, FILE *stream,
+		  char terminator, size_t offset)
+{
+	int nchars_avail;	/* Allocated but unused chars in *LINEPTR.  */
+	char *read_pos;		/* Where we're reading into *LINEPTR. */
+	int ret;
+
+	if (!lineptr || !n || !stream)
+		return -1;
+
+	if (!*lineptr) {
+		*n = MIN_CHUNK;
+		*lineptr = malloc(*n);
+		if (!*lineptr)
+			return -1;
+	}
+
+	nchars_avail = *n - offset;
+	read_pos = *lineptr + offset;
+
+	for (;;) {
+		register int c = getc(stream);
+
+		/* We always want at least one char left in the buffer, since we
+		   always (unless we get an error while reading the first char)
+		   NUL-terminate the line buffer.  */
+
+		assert(*n - nchars_avail == read_pos - *lineptr);
+		if (nchars_avail < 2) {
+			if (*n > MIN_CHUNK)
+				*n *= 2;
+			else
+				*n += MIN_CHUNK;
+
+			nchars_avail = *n + *lineptr - read_pos;
+			*lineptr = realloc(*lineptr, *n);
+			if (!*lineptr)
+				return -1;
+			read_pos = *n - nchars_avail + *lineptr;
+			assert(*n - nchars_avail == read_pos - *lineptr);
+		}
+
+		if (c == EOF || ferror (stream)) {
+			/* Return partial line, if any.  */
+			if (read_pos == *lineptr)
+				return -1;
+			else
+				break;
+		}
+
+		*read_pos++ = c;
+		nchars_avail--;
+
+		if (c == terminator)
+			/* Return the line.  */
+			break;
+	}
+
+	/* Done - NUL terminate and return the number of chars read.  */
+	*read_pos = '\0';
+
+	ret = read_pos - (*lineptr + offset);
+	return ret;
+}
+
+int getline (char **lineptr, size_t *n, FILE *stream)
+{
+	return getstr(lineptr, n, stream, '\n', 0);
+}
diff --git a/tools/getline.h b/tools/getline.h
new file mode 100644
index 0000000..a2f35b9
--- /dev/null
+++ b/tools/getline.h
@@ -0,0 +1 @@
+int getline(char **lineptr, size_t *n, FILE *stream);
diff --git a/tools/mingw_support.c b/tools/mingw_support.c
index 6379710..18b69bb 100644
--- a/tools/mingw_support.c
+++ b/tools/mingw_support.c
@@ -136,101 +136,4 @@
 	return token;
 }
 
-/* getline.c -- Replacement for GNU C library function getline
-
-Copyright (C) 1993, 1996, 2001, 2002 Free Software Foundation, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Written by Jan Brittenson, bson@gnu.ai.mit.edu.  */
-
-/* Always add at least this many bytes when extending the buffer.  */
-#define MIN_CHUNK 64
-
-/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR
-   + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from
-   malloc (or NULL), pointing to *N characters of space.  It is realloc'd
-   as necessary.  Return the number of characters read (not including the
-   null terminator), or -1 on error or EOF.
-   NOTE: There is another getstr() function declared in <curses.h>.  */
-static int getstr(char **lineptr, size_t *n, FILE *stream,
-		  char terminator, size_t offset)
-{
-	int nchars_avail;	/* Allocated but unused chars in *LINEPTR.  */
-	char *read_pos;		/* Where we're reading into *LINEPTR. */
-	int ret;
-
-	if (!lineptr || !n || !stream)
-		return -1;
-
-	if (!*lineptr) {
-		*n = MIN_CHUNK;
-		*lineptr = malloc(*n);
-		if (!*lineptr)
-			return -1;
-	}
-
-	nchars_avail = *n - offset;
-	read_pos = *lineptr + offset;
-
-	for (;;) {
-		register int c = getc(stream);
-
-		/* We always want at least one char left in the buffer, since we
-		   always (unless we get an error while reading the first char)
-		   NUL-terminate the line buffer.  */
-
-		assert(*n - nchars_avail == read_pos - *lineptr);
-		if (nchars_avail < 2) {
-			if (*n > MIN_CHUNK)
-				*n *= 2;
-			else
-				*n += MIN_CHUNK;
-
-			nchars_avail = *n + *lineptr - read_pos;
-			*lineptr = realloc(*lineptr, *n);
-			if (!*lineptr)
-				return -1;
-			read_pos = *n - nchars_avail + *lineptr;
-			assert(*n - nchars_avail == read_pos - *lineptr);
-		}
-
-		if (c == EOF || ferror (stream)) {
-			/* Return partial line, if any.  */
-			if (read_pos == *lineptr)
-				return -1;
-			else
-				break;
-		}
-
-		*read_pos++ = c;
-		nchars_avail--;
-
-		if (c == terminator)
-			/* Return the line.  */
-			break;
-	}
-
-	/* Done - NUL terminate and return the number of chars read.  */
-	*read_pos = '\0';
-
-	ret = read_pos - (*lineptr + offset);
-	return ret;
-}
-
-int getline (char **lineptr, size_t *n, FILE *stream)
-{
-	return getstr(lineptr, n, stream, '\n', 0);
-}
+#include "getline.c"
diff --git a/tools/mingw_support.h b/tools/mingw_support.h
index 2793674..ee07290 100644
--- a/tools/mingw_support.h
+++ b/tools/mingw_support.h
@@ -45,6 +45,6 @@
 void *mmap(void *, size_t, int, int, int, int);
 int munmap(void *, size_t);
 char *strtok_r(char *s, const char *delim, char **save_ptr);
-int getline(char **lineptr, size_t *n, FILE *stream);
+#include "getline.h"
 
 #endif /* __MINGW_SUPPORT_H_ */
diff --git a/tools/os_support.c b/tools/os_support.c
index 5b919aa..1ed89e6 100644
--- a/tools/os_support.c
+++ b/tools/os_support.c
@@ -23,3 +23,6 @@
 #ifdef __MINGW32__
 #include "mingw_support.c"
 #endif
+#ifdef __APPLE__
+#include "getline.c"
+#endif
diff --git a/tools/os_support.h b/tools/os_support.h
index 7bf930e..7dcbee4 100644
--- a/tools/os_support.h
+++ b/tools/os_support.h
@@ -28,4 +28,8 @@
 #include "mingw_support.h"
 #endif
 
+#ifdef __APPLE__
+#include "getline.h"
+#endif
+
 #endif /* __OS_SUPPORT_H_ */
