../3rdparty/pcre/pcre_version.c

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/************************************************* -
2* Perl-Compatible Regular Expressions * -
3*************************************************/ -
4 -
5/* PCRE is a library of functions to support regular expressions whose syntax -
6and semantics are as close as possible to those of the Perl 5 language. -
7 -
8 Written by Philip Hazel -
9 Copyright (c) 1997-2012 University of Cambridge -
10 -
11----------------------------------------------------------------------------- -
12Redistribution and use in source and binary forms, with or without -
13modification, are permitted provided that the following conditions are met: -
14 -
15 * Redistributions of source code must retain the above copyright notice, -
16 this list of conditions and the following disclaimer. -
17 -
18 * Redistributions in binary form must reproduce the above copyright -
19 notice, this list of conditions and the following disclaimer in the -
20 documentation and/or other materials provided with the distribution. -
21 -
22 * Neither the name of the University of Cambridge nor the names of its -
23 contributors may be used to endorse or promote products derived from -
24 this software without specific prior written permission. -
25 -
26THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -
27AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -
28IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -
29ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -
30LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -
31CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -
32SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -
33INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -
34CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -
35ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -
36POSSIBILITY OF SUCH DAMAGE. -
37----------------------------------------------------------------------------- -
38*/ -
39 -
40 -
41/* This module contains the external function pcre_version(), which returns a -
42string that identifies the PCRE version that is in use. */ -
43 -
44 -
45#ifdef PCRE_HAVE_CONFIG_H -
46#include "config.h" -
47#endif -
48 -
49#include "pcre_internal.h" -
50 -
51 -
52/************************************************* -
53* Return version string * -
54*************************************************/ -
55 -
56/* These macros are the standard way of turning unquoted text into C strings. -
57They allow macros like PCRE_MAJOR to be defined without quotes, which is -
58convenient for user programs that want to test its value. */ -
59 -
60#define STRING(a) # a -
61#define XSTRING(s) STRING(s) -
62 -
63/* A problem turned up with PCRE_PRERELEASE, which is defined empty for -
64production releases. Originally, it was used naively in this code: -
65 -
66 return XSTRING(PCRE_MAJOR) -
67 "." XSTRING(PCRE_MINOR) -
68 XSTRING(PCRE_PRERELEASE) -
69 " " XSTRING(PCRE_DATE); -
70 -
71However, when PCRE_PRERELEASE is empty, this leads to an attempted expansion of -
72STRING(). The C standard states: "If (before argument substitution) any -
73argument consists of no preprocessing tokens, the behavior is undefined." It -
74turns out the gcc treats this case as a single empty string - which is what we -
75really want - but Visual C grumbles about the lack of an argument for the -
76macro. Unfortunately, both are within their rights. To cope with both ways of -
77handling this, I had resort to some messy hackery that does a test at run time. -
78I could find no way of detecting that a macro is defined as an empty string at -
79pre-processor time. This hack uses a standard trick for avoiding calling -
80the STRING macro with an empty argument when doing the test. */ -
81 -
82#ifdef COMPILE_PCRE8 -
83PCRE_EXP_DEFN const char * PCRE_CALL_CONVENTION -
84pcre_version(void) -
85#else -
86PCRE_EXP_DEFN const char * PCRE_CALL_CONVENTION -
87pcre16_version(void) -
88#endif -
89{ -
90return (XSTRING(Z PCRE_PRERELEASE)[1] == 0)?
never executed: return ("Z"[1] == 0)? "8.30 2012-02-04" : "8.30" "2012-02-04";
0
91 XSTRING(PCRE_MAJOR.PCRE_MINOR PCRE_DATE) :
never executed: return ("Z"[1] == 0)? "8.30 2012-02-04" : "8.30" "2012-02-04";
0
92 XSTRING(PCRE_MAJOR.PCRE_MINOR) XSTRING(PCRE_PRERELEASE PCRE_DATE);
never executed: return ("Z"[1] == 0)? "8.30 2012-02-04" : "8.30" "2012-02-04";
0
93} -
94 -
95/* End of pcre_version.c */ -
96 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial