summaryrefslogtreecommitdiff
path: root/version.c
diff options
context:
space:
mode:
Diffstat (limited to 'version.c')
-rw-r--r--version.c80
1 files changed, 76 insertions, 4 deletions
diff --git a/version.c b/version.c
index dd0593d2c..480069358 100644
--- a/version.c
+++ b/version.c
@@ -1,7 +1,7 @@
/* gmp_version -- version number compiled into the library */
/*
-Copyright (C) 1996,1999,2000 Free Software Foundation, Inc.
+Copyright (C) 1996, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@@ -17,10 +17,82 @@ License for more details.
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#endif
#include "gmp.h"
#include "gmp-impl.h"
-static const char *gmp_version = VERSION;
+static struct
+{
+ int major, minor, patchlevel;
+} __gmp_version_struct = {0, 0, 0};
+
+int
+#if __STDC__
+gmp_version (gmp_version_enum v)
+#else
+gmp_version (v)
+ gmp_version_enum v;
+#endif
+{
+ if (__gmp_version_struct.major == 0
+ && __gmp_version_struct.minor == 0
+ && __gmp_version_struct.patchlevel == 0)
+ {
+ /* Initialize struct. */
+ char *ver_str;
+ char c;
+ char *cp, *start;
+ TMP_DECL (mark);
+
+ TMP_MARK (mark);
+ ver_str = TMP_ALLOC (strlen (VERSION) + 1);
+ strcpy (ver_str, VERSION);
+
+ start = cp = ver_str;
+ while (*cp != '.' && *cp != '\0')
+ cp++;
+ c = *cp; *cp = '\0';
+ __gmp_version_struct.major = atoi (start);
+
+ if (c == '.')
+ {
+ start = ++cp;
+ while (*cp != '.' && *cp != '\0')
+ cp++;
+ c = *cp; *cp = '\0';
+ __gmp_version_struct.minor = atoi (start);
+
+ if (c == '.')
+ {
+ start = ++cp;
+ while (*cp != '.' && *cp != '\0')
+ cp++;
+ *cp = '\0';
+ __gmp_version_struct.patchlevel = atoi (start);
+ }
+ }
+ TMP_FREE (mark);
+ }
+
+ switch (v)
+ {
+ case GMP_GET_VERSION_MAJOR:
+ return __gmp_version_struct.major;
+ case GMP_GET_VERSION_MINOR:
+ return __gmp_version_struct.minor;
+ case GMP_GET_VERSION_PATCHLEVEL:
+ return __gmp_version_struct.patchlevel;
+ default:
+ gmp_errno |= GMP_ERROR_INVALID_ARGUMENT;
+ return 0;
+ }
+}
+
+