Paul Eggert <[EMAIL PROTECTED]> writes: > Simon Josefsson <[EMAIL PROTECTED]> writes: > >> /* Check version of libgcrypt. */ >> if (!gcry_check_version (GCRYPT_VERSION)) >> die ("version mismatch\n"); > > Can't you use strverscmp for this? E.g.: > > if (strverscmp (GCRYPT_VERSION, VERSION) < 0) > die ("version mismatch\n"); > > Even if strverscmp itself can't be used directly, it seems to me that > its use would greatly simplify this package, and avoid the > integer-overflow glitches Jim mentioned.
Good idea! How about this? 2005-06-25 Simon Josefsson <[EMAIL PROTECTED]> * modules/check_version: New file. 2005-06-25 Simon Josefsson <[EMAIL PROTECTED]> * check_version.h, check_version.c: New file. Index: lib/check_version.c =================================================================== RCS file: lib/check_version.c diff -N lib/check_version.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lib/check_version.c 27 Jun 2005 22:23:39 -0000 @@ -0,0 +1,47 @@ +/* check_version.h --- Check version string compatibility. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 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. This interface is influenced by + gcry_check_version from Werner Koch's Libgcrypt. Paul Eggert + suggested the use of strverscmp to simplify implementation. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stddef.h> +#include <strverscmp.h> + +/* Get specification. */ +#include "check_version.h" + +/* Check that the the version of the library (i.e., the CPP symbol + * VERSION) is at minimum the requested one in REQ_VERSION (typically + * found in a header file) and return the version string. Return NULL + * if the condition is not satisfied. If a NULL is passed to this + * function, no check is done, but the version string is simply + * returned. + */ +const char * +check_version (const char *req_version) +{ + if (!req_version || strverscmp (req_version, VERSION) < 0) + return VERSION; + + return NULL; +} Index: lib/check_version.h =================================================================== RCS file: lib/check_version.h diff -N lib/check_version.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lib/check_version.h 27 Jun 2005 22:23:39 -0000 @@ -0,0 +1,26 @@ +/* check_version.h --- Check version string compatibility. + 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. */ + +#ifndef CHECK_VERSION_H +# define CHECK_VERSION_H + +extern const char * +check_version (const char *req_version); + +#endif /* CHECK_VERSION_H */ Index: modules/check_version =================================================================== RCS file: modules/check_version diff -N modules/check_version --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ modules/check_version 27 Jun 2005 22:23:39 -0000 @@ -0,0 +1,23 @@ +Description: +Check version string compatibility. + +Files: +lib/check_version.h +lib/check_version.c + +Depends-on: +strverscmp + +configure.ac: + +Makefile.am: +lib_SOURCES += check_version.h check_version.c + +Include: +"check_version.h" + +License: +LGPL + +Maintainer: +Simon Josefsson _______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib