diff --git CMakeLists.txt CMakeLists.txt index 04d8f36..3ab997e 100644 --- CMakeLists.txt +++ CMakeLists.txt @@ -21,9 +21,10 @@ set(PLATFORM_SPECIFIC_LIBS) if (APPLE) find_library(LIB_ARGP argp) + find_library(LIB_POSIX_MACOS_TIME posix-macos-time) find_library(LIB_POSIX_MACOS_TIMER posix-macos-timer) - set(PLATFORM_SPECIFIC_LIBS ${LIB_ARGP} ${LIB_POSIX_MACOS_TIMER}) + set(PLATFORM_SPECIFIC_LIBS ${LIB_ARGP} ${LIB_POSIX_MACOS_TIME} ${LIB_POSIX_MACOS_TIMER}) else () set(PLATFORM_SPECIFIC_LIBS rt) endif() diff --git src/io/getdelim.c src/io/getdelim.c new file mode 100644 index 0000000..c954757 --- /dev/null +++ src/io/getdelim.c @@ -0,0 +1,104 @@ +#if __MAC_OS_X_VERSION_MAX_ALLOWED < 101200 +/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include +#include +#include +#include + +/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR + (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. Returns the number of characters read (not including the + null terminator), or -1 on error or EOF. */ + +ssize_t +getdelim (lineptr, n, terminator, stream) + char **lineptr; + size_t *n; + int terminator; + FILE *stream; +{ + char *line, *p; + size_t size, copy; + + if (stream == NULL || lineptr == NULL || n == NULL) + { + errno = EINVAL; + return -1; + } + + if (ferror (stream)) + return -1; + + /* Make sure we have a line buffer to start with. */ + if (*lineptr == NULL || *n < 2) /* !seen and no buf yet need 2 chars. */ + { +#ifndef MAX_CANON +#define MAX_CANON 256 +#endif + line = realloc (*lineptr, MAX_CANON); + if (line == NULL) + return -1; + *lineptr = line; + *n = MAX_CANON; + } + + line = *lineptr; + size = *n; + + copy = size; + p = line; + + while (1) + { + size_t len; + + while (--copy > 0) + { + register int c = getc (stream); + if (c == EOF) + goto lose; + else if ((*p++ = c) == terminator) + goto win; + } + + /* Need to enlarge the line buffer. */ + len = p - line; + size *= 2; + line = realloc (line, size); + if (line == NULL) + goto lose; + *lineptr = line; + *n = size; + p = line + len; + copy = size - len; + } + + lose: + if (p == *lineptr) + return -1; + /* Return a partial line since we got an error in the middle. */ + win: + *p = '\0'; + return p - *lineptr; +} +#endif diff --git src/io/getdelim.h src/io/getdelim.h new file mode 100644 index 0000000..781a662 --- /dev/null +++ src/io/getdelim.h @@ -0,0 +1,32 @@ +#if __MAC_OS_X_VERSION_MAX_ALLOWED < 100700 +#ifndef _GET_DELIM_H_ +#define _GET_DELIM_H_ +/* getdelim.h --- Prototype for replacement getdelim function. + Copyright (C) 2005 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, 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. */ + +/* Written by Simon Josefsson. */ + +/* Get size_t, FILE, ssize_t. And getdelim, if available. */ +# include +# include +# include + +ssize_t getdelim(char **lineptr, size_t *n, int delimiter, FILE *stream); + +#endif +#endif diff --git src/io/input.c src/io/input.c index 971ffdf..d71f121 100644 --- src/io/input.c +++ src/io/input.c @@ -6,6 +6,7 @@ #include "input.h" #include "output.h" +#include "getdelim.h" FILE *in; int delim; diff --git src/util/random.c src/util/random.c index b88bb50..b3e2ebb 100644 --- src/util/random.c +++ src/util/random.c @@ -8,6 +8,10 @@ #include #include +#ifdef __APPLE__ +#include +#endif + void random_reseed(void) { pari_ulong seed = 0; // Try urandom first