Merge from mainline
[official-gcc.git] / gcc / f / proj.c
blob3ed83451331f61722b444dc2d9dc4360afa1bf3e
1 /* proj.c file for GNU Fortran
2 Copyright (C) 1995 Free Software Foundation, Inc.
3 Contributed by James Craig Burley.
5 This file is part of GNU Fortran.
7 GNU Fortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU Fortran is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Fortran; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
22 #include "proj.h"
23 #include "glimits.h"
25 #ifndef HAVE_STRTOUL
26 unsigned long int
27 strtoul (const char *nptr, char **endptr, int base)
29 unsigned long int number = 0;
30 unsigned long int old_number = 0;
32 assert (base == 10);
33 assert (endptr == NULL);
35 while (ISDIGIT (*nptr))
37 number = old_number * 10 + (*(nptr++) - '0');
38 if ((number <= old_number) && (old_number != 0))
39 return ULONG_MAX;
40 old_number = number;
43 return number;
45 #endif
47 #ifndef HAVE_BSEARCH
48 void *
49 bsearch (const void *key, const void *base, size_t nmemb, size_t size,
50 int (*compar) (const void *, const void *))
52 size_t i;
53 int cmp;
55 /* We do a dumb incremental search, not a binary search, for now. */
57 for (i = 0; i < nmemb; ++i)
59 if ((cmp = (*compar) (key, base)) == 0)
60 return base;
61 if (cmp < 0)
62 break;
63 base += size;
66 return NULL;
68 #endif