1 /* Convert version string to int.
3 Copyright (C) 2020-2021 Free Software Foundation, Inc.
5 This file is part of Bison, the GNU Compiler Compiler.
7 This program 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 3 of the License, or
10 (at your option) any later version.
12 This program 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 this program. If not, see <https://www.gnu.org/licenses/>. */
23 #include "strversion.h"
29 strversion_to_int (char const *version
)
31 IGNORE_TYPE_LIMITS_BEGIN
37 long major
= strtol (version
, &cp
, 10);
38 if (errno
|| cp
== version
|| *cp
!= '.' || major
< 0
39 || INT_MULTIPLY_WRAPV (major
, 10000, &res
))
46 long minor
= strtol (cp
, &cp
, 10);
47 if (errno
|| cp
== prev
|| (*cp
!= '\0' && *cp
!= '.')
48 || ! (0 <= minor
&& minor
< 100)
49 || INT_MULTIPLY_WRAPV (minor
, 100, &minor
)
50 || INT_ADD_WRAPV (minor
, res
, &res
))
58 long micro
= strtol (cp
, &cp
, 10);
59 if (errno
|| cp
== prev
|| (*cp
!= '\0' && *cp
!= '.')
60 || ! (0 <= micro
&& micro
< 100)
61 || INT_ADD_WRAPV (micro
, res
, &res
))
65 IGNORE_TYPE_LIMITS_END