Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / gcc / f / proj.c
1 /* proj.c file for GNU Fortran
2    Copyright (C) 1995 Free Software Foundation, Inc.
3    Contributed by James Craig Burley.
4
5 This file is part of GNU Fortran.
6
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.
11
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.
16
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.         */
21
22 #include "proj.h"
23 #include "glimits.j"
24
25 #ifndef HAVE_STRTOUL
26 unsigned long int
27 strtoul (const char *nptr, char **endptr, int base)
28 {
29   unsigned long int number = 0;
30   unsigned long int old_number = 0;
31
32   assert (base == 10);
33   assert (endptr == NULL);
34
35   while (ISDIGIT (*nptr))
36     {
37       number = old_number * 10 + (*(nptr++) - '0');
38       if ((number <= old_number) && (old_number != 0))
39         return ULONG_MAX;
40       old_number = number;
41     }
42
43   return number;
44 }
45 #endif
46
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 *))
51 {
52   size_t i;
53   int cmp;
54
55   /* We do a dumb incremental search, not a binary search, for now. */
56
57   for (i = 0; i < nmemb; ++i)
58     {
59       if ((cmp = (*compar) (key, base)) == 0)
60         return base;
61       if (cmp < 0)
62         break;
63       base += size;
64     }
65
66   return NULL;
67 }
68 #endif