Re: more unconstify use
Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
From: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
To: Mark Dilger <hornschnorter@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>, Tom Lane <tgl@sss.pgh.pa.us>
Date: 2019-02-14T20:07:45Z
Lists: pgsql-hackers
On 13/02/2019 19:51, Mark Dilger wrote: > Peter, so sorry I did not review this patch before you committed. There > are a few places where you unconstify the argument to a function where > changing the function to take const seems better to me. I argued for > something similar in 2016, One can consider unconstify a "todo" marker. Some of these could be removed by some API changes. It needs case-by-case consideration. > Your change: > > - md5_calc((uint8 *) (input + i), ctxt); > + md5_calc(unconstify(uint8 *, (input + i)), ctxt); > > Perhaps md5_calc's signature should change to > > md5_calc(const uint8 *, md5_ctxt *) > > since it doesn't modify the first argument. Fixed, thanks. > Your change: > > - if (!PageIndexTupleOverwrite(oldpage, oldoff, (Item) newtup, newsz)) > + if (!PageIndexTupleOverwrite(oldpage, oldoff, (Item) unconstify(BrinTuple *, newtup), newsz)) > > Perhaps PageIndexTupleOverwrite's third argument should be const, since it > only uses it as the const source of a memcpy. (This is a bit harder than > for md5_calc, above, since the third argument here is of type Item, which > is itself a typedef to Pointer, and there exists no analogous ConstPointer > or ConstItem definition in the sources.) Yeah, typedefs to a pointer are a poor fit for this. We have been getting rid of them from time to time, but I don't know a general solution. > Your change: > > - XLogRegisterBufData(0, (char *) newtup, newsz); > + XLogRegisterBufData(0, (char *) unconstify(BrinTuple *, newtup), newsz); > > Perhaps the third argument to XLogRegisterBufData can be changed to const, > with the extra work of changing XLogRecData's data field to const. I'm not > sure about the amount of code churn this would entail. IIRC, the XLogRegister stuff is a web of lies with respect to constness. Resolving this properly is tricky. > Your change: > > - result = pg_be_scram_exchange(scram_opaq, input, inputlen, > + result = pg_be_scram_exchange(scram_opaq, unconstify(char *, input), inputlen, > &output, &outputlen, > logdetail); > > pg_be_scram_exchange passes the second argument into two functions, > read_client_first_message and read_client_final_message, both of which take > it as a non-const argument but immediately pstrdup it such that it might > as well have been const. Perhaps we should just clean up this mess rather > than unconstifying. Also fixed! -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Get rid of another unconstify through API changes
- 86eea78694ce 12.0 landed
-
Resolve one unconstify use
- 4b3b07fd5d60 12.0 landed
-
More unconstify use
- 37d991602028 12.0 landed
-
Remove useless casts
- cf40dc65b676 12.0 landed