mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-03-21 19:47:02 +08:00
Fix some cases of indirectly casting away const.
Newest versions of gcc+glibc are able to detect cases where code implicitly casts away const by assigning the result of strchr() or a similar function applied to a "const char *" value to a target variable that's just "char *". This of course creates a hazard of not getting a compiler warning about scribbling on a string one was not supposed to, so fixing up such cases is good. This patch fixes a dozen or so places where we were doing that. Most are trivial additions of "const" to the target variable, since no actually-hazardous change was occurring. Thanks to Bertrand Drouvot for finding a couple more spots than I had. This commit back-patches relevant portions of 8f1791c61 and 9f7565c6c into supported branches. However, there are two places in ecpg (in v18 only) where a proper fix is more complicated than seems appropriate for a back-patch. I opted to silence those two warnings by adding casts. Author: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Discussion: https://postgr.es/m/1324889.1764886170@sss.pgh.pa.us Discussion: https://postgr.es/m/3988414.1771950285@sss.pgh.pa.us Backpatch-through: 14-18
This commit is contained in:
@ -950,7 +950,7 @@ char *
|
||||
makeMultirangeTypeName(const char *rangeTypeName, Oid typeNamespace)
|
||||
{
|
||||
char *buf;
|
||||
char *rangestr;
|
||||
const char *rangestr;
|
||||
|
||||
/*
|
||||
* If the range type name contains "range" then change that to
|
||||
|
||||
@ -2313,7 +2313,7 @@ CheckCompoundAffixes(CMPDAffix **ptr, const char *word, int len, bool CheckInPla
|
||||
}
|
||||
else
|
||||
{
|
||||
char *affbegin;
|
||||
const char *affbegin;
|
||||
|
||||
while ((*ptr)->affix)
|
||||
{
|
||||
|
||||
@ -1038,8 +1038,9 @@ typedef struct NUMProc
|
||||
char *number, /* string with number */
|
||||
*number_p, /* pointer to current number position */
|
||||
*inout, /* in / out buffer */
|
||||
*inout_p, /* pointer to current inout position */
|
||||
*last_relevant, /* last relevant number after decimal point */
|
||||
*inout_p; /* pointer to current inout position */
|
||||
|
||||
const char *last_relevant, /* last relevant number after decimal point */
|
||||
|
||||
*L_negative_sign, /* Locale */
|
||||
*L_positive_sign,
|
||||
|
||||
@ -982,7 +982,7 @@ get_iso_localename(const char *winlocname)
|
||||
wchar_t wc_locale_name[LOCALE_NAME_MAX_LENGTH];
|
||||
wchar_t buffer[LOCALE_NAME_MAX_LENGTH];
|
||||
static char iso_lc_messages[LOCALE_NAME_MAX_LENGTH];
|
||||
char *period;
|
||||
const char *period;
|
||||
int len;
|
||||
int ret_val;
|
||||
|
||||
|
||||
@ -193,7 +193,7 @@ is_visible_fxid(FullTransactionId value, const pg_snapshot *snap)
|
||||
#ifdef USE_BSEARCH_IF_NXIP_GREATER
|
||||
else if (snap->nxip > USE_BSEARCH_IF_NXIP_GREATER)
|
||||
{
|
||||
void *res;
|
||||
const void *res;
|
||||
|
||||
res = bsearch(&value, snap->xip, snap->nxip, sizeof(FullTransactionId),
|
||||
cmp_fxid);
|
||||
|
||||
@ -160,7 +160,7 @@ create_fullpage_directory(char *path)
|
||||
static void
|
||||
split_path(const char *path, char **dir, char **fname)
|
||||
{
|
||||
char *sep;
|
||||
const char *sep;
|
||||
|
||||
/* split filepath into directory & filename */
|
||||
sep = strrchr(path, '/');
|
||||
|
||||
@ -6241,7 +6241,7 @@ findBuiltin(const char *name)
|
||||
static int
|
||||
parseScriptWeight(const char *option, char **script)
|
||||
{
|
||||
char *sep;
|
||||
const char *sep;
|
||||
int weight;
|
||||
|
||||
if ((sep = strrchr(option, WSEP)))
|
||||
|
||||
@ -425,7 +425,7 @@ validate_compress_specification(pg_compress_specification *spec)
|
||||
void
|
||||
parse_compress_options(const char *option, char **algorithm, char **detail)
|
||||
{
|
||||
char *sep;
|
||||
const char *sep;
|
||||
char *endp;
|
||||
long result;
|
||||
|
||||
|
||||
@ -335,8 +335,8 @@ PGTYPESdate_defmt_asc(date * d, const char *fmt, const char *str)
|
||||
*/
|
||||
int token[3][2];
|
||||
int token_values[3] = {-1, -1, -1};
|
||||
char *fmt_token_order;
|
||||
char *fmt_ystart,
|
||||
const char *fmt_token_order;
|
||||
const char *fmt_ystart,
|
||||
*fmt_mstart,
|
||||
*fmt_dstart;
|
||||
unsigned int i;
|
||||
|
||||
@ -1975,7 +1975,7 @@ civarind: cvariable indicator
|
||||
|
||||
char_civar: char_variable
|
||||
{
|
||||
char *ptr = strstr(@1, ".arr");
|
||||
char *ptr = (char *) strstr(@1, ".arr");
|
||||
|
||||
if (ptr) /* varchar, we need the struct name here, not
|
||||
* the struct element */
|
||||
|
||||
@ -197,7 +197,7 @@ find_variable(const char *name)
|
||||
struct variable *p;
|
||||
int count;
|
||||
|
||||
next = strpbrk(name, ".[-");
|
||||
next = (char *) strpbrk(name, ".[-");
|
||||
if (next)
|
||||
{
|
||||
if (*next == '[')
|
||||
|
||||
@ -202,7 +202,7 @@ static char *
|
||||
win32_get_codeset(const char *ctype)
|
||||
{
|
||||
char *r = NULL;
|
||||
char *codepage;
|
||||
const char *codepage;
|
||||
uint32 cp;
|
||||
WCHAR wctype[LOCALE_NAME_MAX_LENGTH];
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ int
|
||||
getopt(int nargc, char *const *nargv, const char *ostr)
|
||||
{
|
||||
static char *place = EMSG; /* option letter processing */
|
||||
char *oli; /* option letter list index */
|
||||
const char *oli; /* option letter list index */
|
||||
|
||||
if (!*place)
|
||||
{ /* update scanning pointer */
|
||||
|
||||
@ -62,7 +62,7 @@ getopt_long(int argc, char *const argv[],
|
||||
const struct option *longopts, int *longindex)
|
||||
{
|
||||
static char *place = EMSG; /* option letter processing */
|
||||
char *oli; /* option letter list index */
|
||||
const char *oli; /* option letter list index */
|
||||
static int nonopt_start = -1;
|
||||
static bool force_nonopt = false;
|
||||
|
||||
|
||||
@ -119,9 +119,9 @@ map_locale(const struct locale_map *map, const char *locale)
|
||||
const char *needle_start = map[i].locale_name_start;
|
||||
const char *needle_end = map[i].locale_name_end;
|
||||
const char *replacement = map[i].replacement;
|
||||
char *match;
|
||||
char *match_start = NULL;
|
||||
char *match_end = NULL;
|
||||
const char *match;
|
||||
const char *match_start = NULL;
|
||||
const char *match_end = NULL;
|
||||
|
||||
match = strstr(locale, needle_start);
|
||||
if (match)
|
||||
@ -148,7 +148,7 @@ map_locale(const struct locale_map *map, const char *locale)
|
||||
/* Found a match. Replace the matched string. */
|
||||
int matchpos = match_start - locale;
|
||||
int replacementlen = strlen(replacement);
|
||||
char *rest = match_end;
|
||||
const char *rest = match_end;
|
||||
int restlen = strlen(rest);
|
||||
|
||||
/* check that the result fits in the static buffer */
|
||||
|
||||
@ -693,7 +693,7 @@ static
|
||||
const char *
|
||||
get_expectfile(const char *testname, const char *file)
|
||||
{
|
||||
char *file_type;
|
||||
const char *file_type;
|
||||
_resultmap *rm;
|
||||
|
||||
/*
|
||||
|
||||
@ -2631,7 +2631,7 @@ doabbr(char *abbr, struct zone const *zp, char const *letters,
|
||||
bool isdst, zic_t save, bool doquotes)
|
||||
{
|
||||
char *cp;
|
||||
char *slashp;
|
||||
char const *slashp;
|
||||
size_t len;
|
||||
char const *format = zp->z_format;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user