mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Make various variables const (read-only).
These changes should generally improve correctness/maintainability. A nice side benefit is that several kilobytes move from initialized data to text segment, allowing them to be shared across processes and probably reducing copy-on-write overhead while forking a new backend. Unfortunately this doesn't seem to help libpq in the same way (at least not when it's compiled with -fpic on x86_64), but we can hope the linker at least collects all nominally-const data together even if it's not actually part of the text segment. Also, make pg_encname_tbl[] static in encnames.c, since there seems no very good reason for any other code to use it; per a suggestion from Wim Lewis, who independently submitted a patch that was mostly a subset of this one. Oskari Saarenmaa, with some editorialization by me
This commit is contained in:
@ -121,13 +121,6 @@
|
||||
#define MAXDOUBLEWIDTH 500
|
||||
|
||||
|
||||
/* ----------
|
||||
* External (defined in PgSQL datetime.c (timestamp utils))
|
||||
* ----------
|
||||
*/
|
||||
extern char *months[], /* month abbreviation */
|
||||
*days[]; /* full days */
|
||||
|
||||
/* ----------
|
||||
* Format parser structs
|
||||
* ----------
|
||||
@ -188,12 +181,12 @@ struct FormatNode
|
||||
* Full months
|
||||
* ----------
|
||||
*/
|
||||
static char *months_full[] = {
|
||||
static const char *const months_full[] = {
|
||||
"January", "February", "March", "April", "May", "June", "July",
|
||||
"August", "September", "October", "November", "December", NULL
|
||||
};
|
||||
|
||||
static char *days_short[] = {
|
||||
static const char *const days_short[] = {
|
||||
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL
|
||||
};
|
||||
|
||||
@ -226,8 +219,8 @@ static char *days_short[] = {
|
||||
* matches for BC have an odd index. So the boolean value for BC is given by
|
||||
* taking the array index of the match, modulo 2.
|
||||
*/
|
||||
static char *adbc_strings[] = {ad_STR, bc_STR, AD_STR, BC_STR, NULL};
|
||||
static char *adbc_strings_long[] = {a_d_STR, b_c_STR, A_D_STR, B_C_STR, NULL};
|
||||
static const char *const adbc_strings[] = {ad_STR, bc_STR, AD_STR, BC_STR, NULL};
|
||||
static const char *const adbc_strings_long[] = {a_d_STR, b_c_STR, A_D_STR, B_C_STR, NULL};
|
||||
|
||||
/* ----------
|
||||
* AM / PM
|
||||
@ -253,8 +246,8 @@ static char *adbc_strings_long[] = {a_d_STR, b_c_STR, A_D_STR, B_C_STR, NULL};
|
||||
* matches for PM have an odd index. So the boolean value for PM is given by
|
||||
* taking the array index of the match, modulo 2.
|
||||
*/
|
||||
static char *ampm_strings[] = {am_STR, pm_STR, AM_STR, PM_STR, NULL};
|
||||
static char *ampm_strings_long[] = {a_m_STR, p_m_STR, A_M_STR, P_M_STR, NULL};
|
||||
static const char *const ampm_strings[] = {am_STR, pm_STR, AM_STR, PM_STR, NULL};
|
||||
static const char *const ampm_strings_long[] = {a_m_STR, p_m_STR, A_M_STR, P_M_STR, NULL};
|
||||
|
||||
/* ----------
|
||||
* Months in roman-numeral
|
||||
@ -262,26 +255,26 @@ static char *ampm_strings_long[] = {a_m_STR, p_m_STR, A_M_STR, P_M_STR, NULL};
|
||||
* 'VIII' must have higher precedence than 'V')
|
||||
* ----------
|
||||
*/
|
||||
static char *rm_months_upper[] =
|
||||
static const char *const rm_months_upper[] =
|
||||
{"XII", "XI", "X", "IX", "VIII", "VII", "VI", "V", "IV", "III", "II", "I", NULL};
|
||||
|
||||
static char *rm_months_lower[] =
|
||||
static const char *const rm_months_lower[] =
|
||||
{"xii", "xi", "x", "ix", "viii", "vii", "vi", "v", "iv", "iii", "ii", "i", NULL};
|
||||
|
||||
/* ----------
|
||||
* Roman numbers
|
||||
* ----------
|
||||
*/
|
||||
static char *rm1[] = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", NULL};
|
||||
static char *rm10[] = {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", NULL};
|
||||
static char *rm100[] = {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", NULL};
|
||||
static const char *const rm1[] = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", NULL};
|
||||
static const char *const rm10[] = {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", NULL};
|
||||
static const char *const rm100[] = {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", NULL};
|
||||
|
||||
/* ----------
|
||||
* Ordinal postfixes
|
||||
* ----------
|
||||
*/
|
||||
static char *numTH[] = {"ST", "ND", "RD", "TH", NULL};
|
||||
static char *numth[] = {"st", "nd", "rd", "th", NULL};
|
||||
static const char *const numTH[] = {"ST", "ND", "RD", "TH", NULL};
|
||||
static const char *const numth[] = {"st", "nd", "rd", "th", NULL};
|
||||
|
||||
/* ----------
|
||||
* Flags & Options:
|
||||
@ -525,7 +518,7 @@ do { \
|
||||
* Suffixes definition for DATE-TIME TO/FROM CHAR
|
||||
* ----------
|
||||
*/
|
||||
static KeySuffix DCH_suff[] = {
|
||||
static const KeySuffix DCH_suff[] = {
|
||||
{"FM", 2, DCH_S_FM, SUFFTYPE_PREFIX},
|
||||
{"fm", 2, DCH_S_FM, SUFFTYPE_PREFIX},
|
||||
{"TM", 2, DCH_S_TM, SUFFTYPE_PREFIX},
|
||||
@ -950,10 +943,10 @@ typedef struct NUMProc
|
||||
*/
|
||||
static const KeyWord *index_seq_search(char *str, const KeyWord *kw,
|
||||
const int *index);
|
||||
static KeySuffix *suff_search(char *str, KeySuffix *suf, int type);
|
||||
static const KeySuffix *suff_search(char *str, const KeySuffix *suf, int type);
|
||||
static void NUMDesc_prepare(NUMDesc *num, FormatNode *n);
|
||||
static void parse_format(FormatNode *node, char *str, const KeyWord *kw,
|
||||
KeySuffix *suf, const int *index, int ver, NUMDesc *Num);
|
||||
const KeySuffix *suf, const int *index, int ver, NUMDesc *Num);
|
||||
|
||||
static void DCH_to_char(FormatNode *node, bool is_interval,
|
||||
TmToChar *in, char *out, Oid collid);
|
||||
@ -964,7 +957,7 @@ static void dump_index(const KeyWord *k, const int *index);
|
||||
static void dump_node(FormatNode *node, int max);
|
||||
#endif
|
||||
|
||||
static char *get_th(char *num, int type);
|
||||
static const char *get_th(char *num, int type);
|
||||
static char *str_numth(char *dest, char *num, int type);
|
||||
static int adjust_partial_year_to_2020(int year);
|
||||
static int strspace_len(char *str);
|
||||
@ -973,8 +966,8 @@ static void from_char_set_mode(TmFromChar *tmfc, const FromCharDateMode mode);
|
||||
static void from_char_set_int(int *dest, const int value, const FormatNode *node);
|
||||
static int from_char_parse_int_len(int *dest, char **src, const int len, FormatNode *node);
|
||||
static int from_char_parse_int(int *dest, char **src, FormatNode *node);
|
||||
static int seq_search(char *name, char **array, int type, int max, int *len);
|
||||
static int from_char_seq_search(int *dest, char **src, char **array, int type, int max, FormatNode *node);
|
||||
static int seq_search(char *name, const char *const * array, int type, int max, int *len);
|
||||
static int from_char_seq_search(int *dest, char **src, const char *const * array, int type, int max, FormatNode *node);
|
||||
static void do_to_timestamp(text *date_txt, text *fmt,
|
||||
struct pg_tm * tm, fsec_t *fsec);
|
||||
static char *fill_str(char *str, int c, int max);
|
||||
@ -1024,10 +1017,10 @@ index_seq_search(char *str, const KeyWord *kw, const int *index)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static KeySuffix *
|
||||
suff_search(char *str, KeySuffix *suf, int type)
|
||||
static const KeySuffix *
|
||||
suff_search(char *str, const KeySuffix *suf, int type)
|
||||
{
|
||||
KeySuffix *s;
|
||||
const KeySuffix *s;
|
||||
|
||||
for (s = suf; s->name != NULL; s++)
|
||||
{
|
||||
@ -1237,9 +1230,9 @@ NUMDesc_prepare(NUMDesc *num, FormatNode *n)
|
||||
*/
|
||||
static void
|
||||
parse_format(FormatNode *node, char *str, const KeyWord *kw,
|
||||
KeySuffix *suf, const int *index, int ver, NUMDesc *Num)
|
||||
const KeySuffix *suf, const int *index, int ver, NUMDesc *Num)
|
||||
{
|
||||
KeySuffix *s;
|
||||
const KeySuffix *s;
|
||||
FormatNode *n;
|
||||
int node_set = 0,
|
||||
suffix,
|
||||
@ -1401,7 +1394,7 @@ dump_node(FormatNode *node, int max)
|
||||
* type --> 0 upper, 1 lower
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
static const char *
|
||||
get_th(char *num, int type)
|
||||
{
|
||||
int len = strlen(num),
|
||||
@ -2268,11 +2261,11 @@ from_char_parse_int(int *dest, char **src, FormatNode *node)
|
||||
* ----------
|
||||
*/
|
||||
static int
|
||||
seq_search(char *name, char **array, int type, int max, int *len)
|
||||
seq_search(char *name, const char *const * array, int type, int max, int *len)
|
||||
{
|
||||
char *p,
|
||||
*n,
|
||||
**a;
|
||||
const char *p;
|
||||
const char *const * a;
|
||||
char *n;
|
||||
int last,
|
||||
i;
|
||||
|
||||
@ -2346,7 +2339,7 @@ seq_search(char *name, char **array, int type, int max, int *len)
|
||||
* If the string doesn't match, throw an error.
|
||||
*/
|
||||
static int
|
||||
from_char_seq_search(int *dest, char **src, char **array, int type, int max,
|
||||
from_char_seq_search(int *dest, char **src, const char *const * array, int type, int max,
|
||||
FormatNode *node)
|
||||
{
|
||||
int len;
|
||||
|
Reference in New Issue
Block a user