Fix inconsistencies and typos in the tree, take 9

This addresses more issues with code comments, variable names and
unreferenced variables.

Author: Alexander Lakhin
Discussion: https://postgr.es/m/7ab243e0-116d-3e44-d120-76b3df7abefd@gmail.com
This commit is contained in:
Michael Paquier 2019-08-05 12:14:58 +09:00
parent 75506195da
commit 8548ddc61b
80 changed files with 94 additions and 121 deletions

View File

@ -58,7 +58,6 @@ char *triggerPath; /* where to find the trigger file? */
char *xlogFilePath; /* where we are going to restore to */ char *xlogFilePath; /* where we are going to restore to */
char *nextWALFileName; /* the file we need to get from archive */ char *nextWALFileName; /* the file we need to get from archive */
char *restartWALFileName; /* the file from which we can restart restore */ char *restartWALFileName; /* the file from which we can restart restore */
char *priorWALFileName; /* the file we need to get from archive */
char WALFilePath[MAXPGPATH * 2]; /* the file path including archive */ char WALFilePath[MAXPGPATH * 2]; /* the file path including archive */
char restoreCommand[MAXPGPATH]; /* run this to restore */ char restoreCommand[MAXPGPATH]; /* run this to restore */
char exclusiveCleanupFileName[MAXFNAMELEN]; /* the file we need to get char exclusiveCleanupFileName[MAXFNAMELEN]; /* the file we need to get

View File

@ -761,7 +761,7 @@ pgp_pub_decrypt_text(PG_FUNCTION_ARGS)
*/ */
/* /*
* Helper function for pgp_armor. Converts arrays of keys and values into * Helper function for pg_armor. Converts arrays of keys and values into
* plain C arrays, and checks that they don't contain invalid characters. * plain C arrays, and checks that they don't contain invalid characters.
*/ */
static int static int

View File

@ -50,9 +50,6 @@ void *px_realloc(void *p, size_t s);
void px_free(void *p); void px_free(void *p);
#endif #endif
/* max len of 'type' parms */
#define PX_MAX_NAMELEN 128
/* max salt returned */ /* max salt returned */
#define PX_MAX_SALT_LEN 128 #define PX_MAX_SALT_LEN 128

View File

@ -59,16 +59,6 @@ static uint32 _K[] = {0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6};
#define BCOUNT (ctxt->c.b64[0] / 8) #define BCOUNT (ctxt->c.b64[0] / 8)
#define W(n) (ctxt->m.b32[(n)]) #define W(n) (ctxt->m.b32[(n)])
#define PUTBYTE(x) \
do { \
ctxt->m.b8[(COUNT % 64)] = (x); \
COUNT++; \
COUNT %= 64; \
ctxt->c.b64[0] += 8; \
if (COUNT % 64 == 0) \
sha1_step(ctxt); \
} while (0)
#define PUTPAD(x) \ #define PUTPAD(x) \
do { \ do { \
ctxt->m.b8[(COUNT % 64)] = (x); \ ctxt->m.b8[(COUNT % 64)] = (x); \

View File

@ -2794,7 +2794,7 @@ estimate_path_cost_size(PlannerInfo *root,
/* /*
* Back into an estimate of the number of retrieved rows. Just in * Back into an estimate of the number of retrieved rows. Just in
* case this is nuts, clamp to at most nrow. * case this is nuts, clamp to at most nrows.
*/ */
retrieved_rows = clamp_row_est(rows / fpinfo->local_conds_sel); retrieved_rows = clamp_row_est(rows / fpinfo->local_conds_sel);
retrieved_rows = Min(retrieved_rows, nrows); retrieved_rows = Min(retrieved_rows, nrows);

View File

@ -271,7 +271,7 @@ extern void sepgsql_avc_init(void);
*/ */
extern char *sepgsql_get_client_label(void); extern char *sepgsql_get_client_label(void);
extern void sepgsql_init_client_label(void); extern void sepgsql_init_client_label(void);
extern char *sepgsql_get_label(Oid relOid, Oid objOid, int32 subId); extern char *sepgsql_get_label(Oid classId, Oid objectId, int32 subId);
extern void sepgsql_object_relabel(const ObjectAddress *object, extern void sepgsql_object_relabel(const ObjectAddress *object,
const char *seclabel); const char *seclabel);

View File

@ -24,7 +24,7 @@
PG_MODULE_MAGIC; PG_MODULE_MAGIC;
/* These must be available to pg_dlsym() */ /* These must be available to dlsym() */
extern void _PG_init(void); extern void _PG_init(void);
extern void _PG_output_plugin_init(OutputPluginCallbacks *cb); extern void _PG_output_plugin_init(OutputPluginCallbacks *cb);

View File

@ -5509,7 +5509,7 @@ int PQendcopy(PGconn *conn);
It should either be issued when the last string has been sent It should either be issued when the last string has been sent
to the server using <xref linkend="libpq-PQputline"/> or when the to the server using <xref linkend="libpq-PQputline"/> or when the
last string has been received from the server using last string has been received from the server using
<function>PGgetline</function>. It must be issued or the server <function>PQgetline</function>. It must be issued or the server
will get <quote>out of sync</quote> with the client. Upon return will get <quote>out of sync</quote> with the client. Upon return
from this function, the server is ready to receive the next SQL from this function, the server is ready to receive the next SQL
command. The return value is 0 on successful completion, command. The return value is 0 on successful completion,

View File

@ -70,7 +70,7 @@ RESET ROLE
effectively drops all the privileges assigned directly to the session user effectively drops all the privileges assigned directly to the session user
and to the other roles it is a member of, leaving only the privileges and to the other roles it is a member of, leaving only the privileges
available to the named role. On the other hand, if the session user role available to the named role. On the other hand, if the session user role
has the <literal>NOINHERITS</literal> attribute, <command>SET ROLE</command> drops the has the <literal>NOINHERIT</literal> attribute, <command>SET ROLE</command> drops the
privileges assigned directly to the session user and instead acquires the privileges assigned directly to the session user and instead acquires the
privileges available to the named role. privileges available to the named role.
</para> </para>

View File

@ -185,7 +185,7 @@ countryName (alias C)
localityName (alias L) localityName (alias L)
stateOrProvinceName (alias ST) stateOrProvinceName (alias ST)
organizationName (alias O) organizationName (alias O)
organizationUnitName (alias OU) organizationalUnitName (alias OU)
title title
description description
initials initials

View File

@ -270,7 +270,7 @@ is stored in the higher bits. That requires 43 bits in total, which
conveniently fits in at most 6 bytes. conveniently fits in at most 6 bytes.
A compressed posting list is passed around and stored on disk in a A compressed posting list is passed around and stored on disk in a
PackedPostingList struct. The first item in the list is stored uncompressed GinPostingList struct. The first item in the list is stored uncompressed
as a regular ItemPointerData, followed by the length of the list in bytes, as a regular ItemPointerData, followed by the length of the list in bytes,
followed by the packed items. followed by the packed items.

View File

@ -650,7 +650,7 @@ ginPlaceToPage(GinBtree btree, GinBtreeStack *stack,
} }
else else
{ {
elog(ERROR, "invalid return code from GIN placeToPage method: %d", rc); elog(ERROR, "invalid return code from GIN beginPlaceToPage method: %d", rc);
result = false; /* keep compiler quiet */ result = false; /* keep compiler quiet */
} }

View File

@ -74,7 +74,7 @@ gistkillitems(IndexScanDesc scan)
/* /*
* Mark all killedItems as dead. We need no additional recheck, because, * Mark all killedItems as dead. We need no additional recheck, because,
* if page was modified, pageLSN must have changed. * if page was modified, curPageLSN must have changed.
*/ */
for (i = 0; i < so->numKilled; i++) for (i = 0; i < so->numKilled; i++)
{ {
@ -379,11 +379,11 @@ gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, double *myDistances,
/* /*
* Check if the page was deleted after we saw the downlink. There's * Check if the page was deleted after we saw the downlink. There's
* nothing of interest on a deleted page. Note that we must do this * nothing of interest on a deleted page. Note that we must do this after
* after checking the NSN for concurrent splits! It's possible that * checking the NSN for concurrent splits! It's possible that the page
* the page originally contained some tuples that are visible to us, * originally contained some tuples that are visible to us, but was split
* but was split so that all the visible tuples were moved to another * so that all the visible tuples were moved to another page, and then
* page, and then this page was deleted. * this page was deleted.
*/ */
if (GistPageIsDeleted(page)) if (GistPageIsDeleted(page))
{ {

View File

@ -706,7 +706,7 @@ hash_xlog_squeeze_page(XLogReaderState *record)
/* /*
* if the page on which are adding tuples is a page previous to freed * if the page on which are adding tuples is a page previous to freed
* overflow page, then update its nextblno. * overflow page, then update its nextblkno.
*/ */
if (xldata->is_prev_bucket_same_wrt) if (xldata->is_prev_bucket_same_wrt)
{ {

View File

@ -257,8 +257,8 @@ restart_insert:
* _hash_pgaddtup() -- add a tuple to a particular page in the index. * _hash_pgaddtup() -- add a tuple to a particular page in the index.
* *
* This routine adds the tuple to the page as requested; it does not write out * This routine adds the tuple to the page as requested; it does not write out
* the page. It is an error to call pgaddtup() without pin and write lock on * the page. It is an error to call this function without pin and write lock
* the target buffer. * on the target buffer.
* *
* Returns the offset number at which the tuple was inserted. This function * Returns the offset number at which the tuple was inserted. This function
* is responsible for preserving the condition that tuples in a hash index * is responsible for preserving the condition that tuples in a hash index

View File

@ -74,7 +74,7 @@ static HeapTuple heap_prepare_insert(Relation relation, HeapTuple tup,
TransactionId xid, CommandId cid, int options); TransactionId xid, CommandId cid, int options);
static XLogRecPtr log_heap_update(Relation reln, Buffer oldbuf, static XLogRecPtr log_heap_update(Relation reln, Buffer oldbuf,
Buffer newbuf, HeapTuple oldtup, Buffer newbuf, HeapTuple oldtup,
HeapTuple newtup, HeapTuple old_key_tup, HeapTuple newtup, HeapTuple old_key_tuple,
bool all_visible_cleared, bool new_all_visible_cleared); bool all_visible_cleared, bool new_all_visible_cleared);
static Bitmapset *HeapDetermineModifiedColumns(Relation relation, static Bitmapset *HeapDetermineModifiedColumns(Relation relation,
Bitmapset *interesting_cols, Bitmapset *interesting_cols,

View File

@ -124,7 +124,7 @@
/* prototypes for internal routines */ /* prototypes for internal routines */
static Buffer vm_readbuf(Relation rel, BlockNumber blkno, bool extend); static Buffer vm_readbuf(Relation rel, BlockNumber blkno, bool extend);
static void vm_extend(Relation rel, BlockNumber nvmblocks); static void vm_extend(Relation rel, BlockNumber vm_nblocks);
/* /*

View File

@ -657,7 +657,7 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
/* XLOG stuff */ /* XLOG stuff */
if (wstate->btws_use_wal) if (wstate->btws_use_wal)
{ {
/* We use the heap NEWPAGE record type for this */ /* We use the XLOG_FPI record type for this */
log_newpage(&wstate->index->rd_node, MAIN_FORKNUM, blkno, page, true); log_newpage(&wstate->index->rd_node, MAIN_FORKNUM, blkno, page, true);
} }

View File

@ -530,7 +530,7 @@ void XLogResetInsertion(void)
construction workspace. This is only needed if you have already called construction workspace. This is only needed if you have already called
XLogBeginInsert(), but decide to not insert the record after all. XLogBeginInsert(), but decide to not insert the record after all.
void XLogEnsureRecordSpace(int max_block_id, int nrdatas) void XLogEnsureRecordSpace(int max_block_id, int ndatas)
Normally, the WAL record construction buffers have the following limits: Normally, the WAL record construction buffers have the following limits:

View File

@ -92,7 +92,7 @@ static int ZeroCLOGPage(int pageno, bool writeXlog);
static bool CLOGPagePrecedes(int page1, int page2); static bool CLOGPagePrecedes(int page1, int page2);
static void WriteZeroPageXlogRec(int pageno); static void WriteZeroPageXlogRec(int pageno);
static void WriteTruncateXlogRec(int pageno, TransactionId oldestXact, static void WriteTruncateXlogRec(int pageno, TransactionId oldestXact,
Oid oldestXidDb); Oid oldestXactDb);
static void TransactionIdSetPageStatus(TransactionId xid, int nsubxids, static void TransactionIdSetPageStatus(TransactionId xid, int nsubxids,
TransactionId *subxids, XidStatus status, TransactionId *subxids, XidStatus status,
XLogRecPtr lsn, int pageno, XLogRecPtr lsn, int pageno,

View File

@ -282,7 +282,7 @@ typedef struct MultiXactStateData
} MultiXactStateData; } MultiXactStateData;
/* /*
* Last element of OldestMemberMXactID and OldestVisibleMXactId arrays. * Last element of OldestMemberMXactId and OldestVisibleMXactId arrays.
* Valid elements are (1..MaxOldestSlot); element 0 is never used. * Valid elements are (1..MaxOldestSlot); element 0 is never used.
*/ */
#define MaxOldestSlot (MaxBackends + max_prepared_xacts) #define MaxOldestSlot (MaxBackends + max_prepared_xacts)

View File

@ -4114,7 +4114,7 @@ pg_largeobject_aclmask_snapshot(Oid lobj_oid, Oid roleid,
return mask; return mask;
/* /*
* Get the largeobject's ACL from pg_language_metadata * Get the largeobject's ACL from pg_largeobject_metadata
*/ */
pg_lo_meta = table_open(LargeObjectMetadataRelationId, pg_lo_meta = table_open(LargeObjectMetadataRelationId,
AccessShareLock); AccessShareLock);

View File

@ -48,10 +48,6 @@ CREATE FUNCTION _pg_expandarray(IN anyarray, OUT x anyelement, OUT n int)
pg_catalog.array_upper($1,1), pg_catalog.array_upper($1,1),
1) as g(s)'; 1) as g(s)';
CREATE FUNCTION _pg_keysequal(smallint[], smallint[]) RETURNS boolean
LANGUAGE sql IMMUTABLE PARALLEL SAFE -- intentionally not STRICT, to allow inlining
AS 'select $1 operator(pg_catalog.<@) $2 and $2 operator(pg_catalog.<@) $1';
/* Given an index's OID and an underlying-table column number, return the /* Given an index's OID and an underlying-table column number, return the
* column's position in the index (NULL if not there) */ * column's position in the index (NULL if not there) */
CREATE FUNCTION _pg_index_position(oid, smallint) RETURNS int CREATE FUNCTION _pg_index_position(oid, smallint) RETURNS int

View File

@ -530,7 +530,7 @@ static const ObjectPropertyType ObjectProperty[] =
/* /*
* This struct maps the string object types as returned by * This struct maps the string object types as returned by
* getObjectTypeDescription into ObjType enum values. Note that some enum * getObjectTypeDescription into ObjectType enum values. Note that some enum
* values can be obtained by different names, and that some string object types * values can be obtained by different names, and that some string object types
* do not have corresponding values in the output enum. The user of this map * do not have corresponding values in the output enum. The user of this map
* must be careful to test for invalid values being returned. * must be careful to test for invalid values being returned.

View File

@ -176,7 +176,6 @@ typedef struct CopyStateData
* Working state for COPY FROM * Working state for COPY FROM
*/ */
AttrNumber num_defaults; AttrNumber num_defaults;
FmgrInfo oid_in_function;
FmgrInfo *in_functions; /* array of input functions for each attrs */ FmgrInfo *in_functions; /* array of input functions for each attrs */
Oid *typioparams; /* array of element types for in_functions */ Oid *typioparams; /* array of element types for in_functions */
int *defmap; /* array of default att numbers */ int *defmap; /* array of default att numbers */

View File

@ -139,7 +139,7 @@ defGetBoolean(DefElem *def)
/* /*
* The set of strings accepted here should match up with the * The set of strings accepted here should match up with the
* grammar's opt_boolean production. * grammar's opt_boolean_or_string production.
*/ */
if (pg_strcasecmp(sval, "true") == 0) if (pg_strcasecmp(sval, "true") == 0)
return true; return true;

View File

@ -143,7 +143,7 @@ PrepareQuery(PrepareStmt *stmt, const char *queryString,
} }
/* /*
* grammar only allows OptimizableStmt, so this check should be redundant * grammar only allows PreparableStmt, so this check should be redundant
*/ */
switch (query->commandType) switch (query->commandType)
{ {

View File

@ -847,7 +847,7 @@ get_all_vacuum_rels(int options)
} }
/* /*
* vacuum_set_xid_limits() -- compute oldest-Xmin and freeze cutoff points * vacuum_set_xid_limits() -- compute oldestXmin and freeze cutoff points
* *
* The output parameters are: * The output parameters are:
* - oldestXmin is the cutoff value used to distinguish whether tuples are * - oldestXmin is the cutoff value used to distinguish whether tuples are

View File

@ -93,7 +93,7 @@ typedef struct WindowStatePerFuncData
bool resulttypeByVal; bool resulttypeByVal;
bool plain_agg; /* is it just a plain aggregate function? */ bool plain_agg; /* is it just a plain aggregate function? */
int aggno; /* if so, index of its PerAggData */ int aggno; /* if so, index of its WindowStatePerAggData */
WindowObject winobj; /* object used in window function API */ WindowObject winobj; /* object used in window function API */
} WindowStatePerFuncData; } WindowStatePerFuncData;
@ -142,7 +142,7 @@ typedef struct WindowStatePerAggData
resulttypeByVal, resulttypeByVal,
transtypeByVal; transtypeByVal;
int wfuncno; /* index of associated PerFuncData */ int wfuncno; /* index of associated WindowStatePerFuncData */
/* Context holding transition value and possibly other subsidiary data */ /* Context holding transition value and possibly other subsidiary data */
MemoryContext aggcontext; /* may be private, or winstate->aggcontext */ MemoryContext aggcontext; /* may be private, or winstate->aggcontext */

View File

@ -44,8 +44,8 @@
* StreamClose - Close a client/backend connection * StreamClose - Close a client/backend connection
* TouchSocketFiles - Protect socket files against /tmp cleaners * TouchSocketFiles - Protect socket files against /tmp cleaners
* pq_init - initialize libpq at backend startup * pq_init - initialize libpq at backend startup
* pq_comm_reset - reset libpq during error recovery * socket_comm_reset - reset libpq during error recovery
* pq_close - shutdown libpq at backend exit * socket_close - shutdown libpq at backend exit
* *
* low-level I/O: * low-level I/O:
* pq_getbytes - get a known number of bytes from connection * pq_getbytes - get a known number of bytes from connection

View File

@ -144,7 +144,7 @@ EstimateParamListSpace(ParamListInfo paramLI)
} }
/* /*
* Serialize a paramListInfo structure into caller-provided storage. * Serialize a ParamListInfo structure into caller-provided storage.
* *
* We write the number of parameters first, as a 4-byte integer, and then * We write the number of parameters first, as a 4-byte integer, and then
* write details for each parameter in turn. The details for each parameter * write details for each parameter in turn. The details for each parameter

View File

@ -1021,7 +1021,7 @@ tbm_iterate(TBMIterator *iterator)
PagetableEntry *page; PagetableEntry *page;
int ntuples; int ntuples;
/* In ONE_PAGE state, we don't allocate an spages[] array */ /* In TBM_ONE_PAGE state, we don't allocate an spages[] array */
if (tbm->status == TBM_ONE_PAGE) if (tbm->status == TBM_ONE_PAGE)
page = &tbm->entry1; page = &tbm->entry1;
else else

View File

@ -91,7 +91,7 @@ geqo_selection(PlannerInfo *root, Chromosome *momma, Chromosome *daddy,
static int static int
linear_rand(PlannerInfo *root, int pool_size, double bias) linear_rand(PlannerInfo *root, int pool_size, double bias)
{ {
double index; /* index between 0 and pop_size */ double index; /* index between 0 and pool_size */
double max = (double) pool_size; double max = (double) pool_size;
/* /*

View File

@ -4242,7 +4242,7 @@ consider_groupingsets_paths(PlannerInfo *root,
* 2) If there are no empty sets and only unsortable sets, then the * 2) If there are no empty sets and only unsortable sets, then the
* rollups list will be empty (and thus l_start == NULL), and * rollups list will be empty (and thus l_start == NULL), and
* group_pathkeys will be NIL; we must ensure that the vacuously-true * group_pathkeys will be NIL; we must ensure that the vacuously-true
* pathkeys_contain_in test doesn't cause us to crash. * pathkeys_contained_in test doesn't cause us to crash.
*/ */
if (l_start != NULL && if (l_start != NULL &&
pathkeys_contained_in(root->group_pathkeys, path->pathkeys)) pathkeys_contained_in(root->group_pathkeys, path->pathkeys))
@ -5177,7 +5177,7 @@ make_group_input_target(PlannerInfo *root, PathTarget *final_target)
* a regular aggregation node would, plus any aggregates used in HAVING; * a regular aggregation node would, plus any aggregates used in HAVING;
* except that the Aggref nodes should be marked as partial aggregates. * except that the Aggref nodes should be marked as partial aggregates.
* *
* In addition, we'd better emit any Vars and PlaceholderVars that are * In addition, we'd better emit any Vars and PlaceHolderVars that are
* used outside of Aggrefs in the aggregation tlist and HAVING. (Presumably, * used outside of Aggrefs in the aggregation tlist and HAVING. (Presumably,
* these would be Vars that are grouped by or used in grouping expressions.) * these would be Vars that are grouped by or used in grouping expressions.)
* *

View File

@ -134,7 +134,7 @@ LookupOperName(ParseState *pstate, List *opername, Oid oprleft, Oid oprright,
/* /*
* LookupOperWithArgs * LookupOperWithArgs
* Like LookupOperName, but the argument types are specified by * Like LookupOperName, but the argument types are specified by
* a ObjectWithArg node. * a ObjectWithArgs node.
*/ */
Oid Oid
LookupOperWithArgs(ObjectWithArgs *oper, bool noError) LookupOperWithArgs(ObjectWithArgs *oper, bool noError)

View File

@ -6122,7 +6122,7 @@ pgstat_recv_resetcounter(PgStat_MsgResetcounter *msg, int len)
} }
/* ---------- /* ----------
* pgstat_recv_resetshared() - * pgstat_recv_resetsharedcounter() -
* *
* Reset some shared statistics of the cluster. * Reset some shared statistics of the cluster.
* ---------- * ----------

View File

@ -288,7 +288,6 @@ struct vars
#define NWBDRY 'W' /* non-word-boundary constraint */ #define NWBDRY 'W' /* non-word-boundary constraint */
#define SBEGIN 'A' /* beginning of string (even if not BOL) */ #define SBEGIN 'A' /* beginning of string (even if not BOL) */
#define SEND 'Z' /* end of string (even if not EOL) */ #define SEND 'Z' /* end of string (even if not EOL) */
#define PREFER 'P' /* length preference */
/* is an arc colored, and hence on a color chain? */ /* is an arc colored, and hence on a color chain? */
#define COLORED(a) \ #define COLORED(a) \

View File

@ -1381,7 +1381,7 @@ ReorderBufferCopySnap(ReorderBuffer *rb, Snapshot orig_snap,
snap->subxip[i++] = txn->xid; snap->subxip[i++] = txn->xid;
/* /*
* nsubxcnt isn't decreased when subtransactions abort, so count manually. * subxcnt isn't decreased when subtransactions abort, so count manually.
* Since it's an upper boundary it is safe to use it for the allocation * Since it's an upper boundary it is safe to use it for the allocation
* above. * above.
*/ */

View File

@ -265,7 +265,6 @@ CreateSharedProcArray(void)
&found); &found);
} }
/* Register and initialize fields of ProcLWLockTranche */
LWLockRegisterTranche(LWTRANCHE_PROC, "proc"); LWLockRegisterTranche(LWTRANCHE_PROC, "proc");
} }

View File

@ -1251,7 +1251,7 @@ shm_mq_inc_bytes_written(shm_mq *mq, Size n)
pg_atomic_read_u64(&mq->mq_bytes_written) + n); pg_atomic_read_u64(&mq->mq_bytes_written) + n);
} }
/* Shim for on_dsm_callback. */ /* Shim for on_dsm_detach callback. */
static void static void
shm_mq_detach_callback(dsm_segment *seg, Datum arg) shm_mq_detach_callback(dsm_segment *seg, Datum arg)
{ {

View File

@ -996,8 +996,8 @@ LockAcquireExtended(const LOCKTAG *locktag,
/* /*
* We can't acquire the lock immediately. If caller specified no * We can't acquire the lock immediately. If caller specified no
* blocking, remove useless table entries and return NOT_AVAIL without * blocking, remove useless table entries and return
* waiting. * LOCKACQUIRE_NOT_AVAIL without waiting.
*/ */
if (dontWait) if (dontWait)
{ {

View File

@ -364,7 +364,7 @@ static SERIALIZABLEXACT *OldCommittedSxact;
* These configuration variables are used to set the predicate lock table size * These configuration variables are used to set the predicate lock table size
* and to control promotion of predicate locks to coarser granularity in an * and to control promotion of predicate locks to coarser granularity in an
* attempt to degrade performance (mostly as false positive serialization * attempt to degrade performance (mostly as false positive serialization
* failure) gracefully in the face of memory pressurel * failure) gracefully in the face of memory pressure.
*/ */
int max_predicate_locks_per_xact; /* set by guc.c */ int max_predicate_locks_per_xact; /* set by guc.c */
int max_predicate_locks_per_relation; /* set by guc.c */ int max_predicate_locks_per_relation; /* set by guc.c */
@ -4809,7 +4809,7 @@ OnConflict_CheckForSerializationFailure(const SERIALIZABLEXACT *reader,
} }
/* /*
* PreCommit_CheckForSerializableConflicts * PreCommit_CheckForSerializationFailure
* Check for dangerous structures in a serializable transaction * Check for dangerous structures in a serializable transaction
* at commit. * at commit.
* *

View File

@ -325,7 +325,7 @@ pg_read_binary_file(PG_FUNCTION_ARGS)
/* /*
* Wrapper functions for the 1 and 3 argument variants of pg_read_file_v2() * Wrapper functions for the 1 and 3 argument variants of pg_read_file_v2()
* and pg_binary_read_file(). * and pg_read_binary_file().
* *
* These are necessary to pass the sanity check in opr_sanity, which checks * These are necessary to pass the sanity check in opr_sanity, which checks
* that all built-in functions that share the implementing C function take * that all built-in functions that share the implementing C function take

View File

@ -115,7 +115,7 @@ typedef struct
List *windowTList; /* targetlist for resolving WINDOW clause */ List *windowTList; /* targetlist for resolving WINDOW clause */
int prettyFlags; /* enabling of pretty-print functions */ int prettyFlags; /* enabling of pretty-print functions */
int wrapColumn; /* max line length, or -1 for no limit */ int wrapColumn; /* max line length, or -1 for no limit */
int indentLevel; /* current indent level for prettyprint */ int indentLevel; /* current indent level for pretty-print */
bool varprefix; /* true to print prefixes on Vars */ bool varprefix; /* true to print prefixes on Vars */
ParseExprKind special_exprkind; /* set only for exprkinds needing special ParseExprKind special_exprkind; /* set only for exprkinds needing special
* handling */ * handling */

View File

@ -40,7 +40,7 @@
* *
* For each block, we maintain pointer to the first free chunk - this is quite * For each block, we maintain pointer to the first free chunk - this is quite
* cheap and allows us to skip all the preceding used chunks, eliminating * cheap and allows us to skip all the preceding used chunks, eliminating
* a significant number of lookups in many common usage patters. In the worst * a significant number of lookups in many common usage patterns. In the worst
* case this performs as if the pointer was not maintained. * case this performs as if the pointer was not maintained.
* *
* We cache the freelist index for the blocks with the fewest free chunks * We cache the freelist index for the blocks with the fewest free chunks

View File

@ -1171,7 +1171,7 @@ AtEOXact_Snapshot(bool isCommit, bool resetXmin)
/* /*
* During normal commit processing, we call ProcArrayEndTransaction() to * During normal commit processing, we call ProcArrayEndTransaction() to
* reset the PgXact->xmin. That call happens prior to the call to * reset the MyPgXact->xmin. That call happens prior to the call to
* AtEOXact_Snapshot(), so we need not touch xmin here at all. * AtEOXact_Snapshot(), so we need not touch xmin here at all.
*/ */
if (resetXmin) if (resetXmin)

View File

@ -1295,7 +1295,7 @@ setup_config(void)
err = WSAStartup(MAKEWORD(2, 2), &wsaData); err = WSAStartup(MAKEWORD(2, 2), &wsaData);
#endif #endif
/* for best results, this code should match parse_hba() */ /* for best results, this code should match parse_hba_line() */
hints.ai_flags = AI_NUMERICHOST; hints.ai_flags = AI_NUMERICHOST;
hints.ai_family = AF_UNSPEC; hints.ai_family = AF_UNSPEC;
hints.ai_socktype = 0; hints.ai_socktype = 0;

View File

@ -18,10 +18,6 @@
#define oidcmp(x,y) ( ((x) < (y) ? -1 : ((x) > (y)) ? 1 : 0) ) #define oidcmp(x,y) ( ((x) < (y) ? -1 : ((x) > (y)) ? 1 : 0) )
#define oideq(x,y) ( (x) == (y) )
#define oidle(x,y) ( (x) <= (y) )
#define oidge(x,y) ( (x) >= (y) )
#define oidzero(x) ( (x) == 0 )
/* /*
* The data structures used to store system catalog information. Every * The data structures used to store system catalog information. Every

View File

@ -54,8 +54,6 @@
static void usage(const char *progname); static void usage(const char *progname);
typedef struct option optType;
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {

View File

@ -934,8 +934,8 @@ RewriteControlFile(void)
* *
* On entry, ControlFile.checkPointCopy.redo and ControlFile.xlog_seg_size * On entry, ControlFile.checkPointCopy.redo and ControlFile.xlog_seg_size
* are assumed valid (note that we allow the old xlog seg size to differ * are assumed valid (note that we allow the old xlog seg size to differ
* from what we're using). On exit, newXlogId and newXlogSeg are set to * from what we're using). On exit, newXlogSegNo is set to suitable
* suitable values for the beginning of replacement WAL (in our seg size). * value for the beginning of replacement WAL (in our seg size).
*/ */
static void static void
FindEndOfXLOG(void) FindEndOfXLOG(void)

View File

@ -31,7 +31,7 @@ extern bool describeOperators(const char *pattern, bool verbose, bool showSystem
extern bool describeRoles(const char *pattern, bool verbose, bool showSystem); extern bool describeRoles(const char *pattern, bool verbose, bool showSystem);
/* \drds */ /* \drds */
extern bool listDbRoleSettings(const char *pattern1, const char *pattern2); extern bool listDbRoleSettings(const char *pattern, const char *pattern2);
/* \z (or \dp) */ /* \z (or \dp) */
extern bool permissionsList(const char *pattern); extern bool permissionsList(const char *pattern);

View File

@ -66,7 +66,7 @@ main(int argc, char **argv)
if (pg_wcscmp(test->output, result) != 0) if (pg_wcscmp(test->output, result) != 0)
{ {
printf("FAILURE (Normalizationdata.txt line %d):\n", test->linenum); printf("FAILURE (NormalizationTest.txt line %d):\n", test->linenum);
printf("input:\t%s\n", print_wchar_str(test->input)); printf("input:\t%s\n", print_wchar_str(test->input));
printf("expected:\t%s\n", print_wchar_str(test->output)); printf("expected:\t%s\n", print_wchar_str(test->output));
printf("got\t%s\n", print_wchar_str(result)); printf("got\t%s\n", print_wchar_str(result));

View File

@ -35,7 +35,7 @@ extern Size CommitTsShmemSize(void);
extern void CommitTsShmemInit(void); extern void CommitTsShmemInit(void);
extern void BootStrapCommitTs(void); extern void BootStrapCommitTs(void);
extern void StartupCommitTs(void); extern void StartupCommitTs(void);
extern void CommitTsParameterChange(bool xlrecvalue, bool pgcontrolvalue); extern void CommitTsParameterChange(bool newvalue, bool oldvalue);
extern void CompleteCommitTsInitialization(void); extern void CompleteCommitTsInitialization(void);
extern void ShutdownCommitTs(void); extern void ShutdownCommitTs(void);
extern void CheckPointCommitTs(void); extern void CheckPointCommitTs(void);

View File

@ -54,7 +54,7 @@ typedef struct GinState
bool oneCol; /* true if single-column index */ bool oneCol; /* true if single-column index */
/* /*
* origTupDesc is the nominal tuple descriptor of the index, ie, the i'th * origTupdesc is the nominal tuple descriptor of the index, ie, the i'th
* attribute shows the key type (not the input data type!) of the i'th * attribute shows the key type (not the input data type!) of the i'th
* index column. In a single-column index this describes the actual leaf * index column. In a single-column index this describes the actual leaf
* index tuples. In a multi-column index, the actual leaf tuples contain * index tuples. In a multi-column index, the actual leaf tuples contain
@ -443,7 +443,7 @@ extern void ginInsertCleanup(GinState *ginstate, bool full_clean,
/* ginpostinglist.c */ /* ginpostinglist.c */
extern GinPostingList *ginCompressPostingList(const ItemPointer ptrs, int nptrs, extern GinPostingList *ginCompressPostingList(const ItemPointer ipd, int nipd,
int maxsize, int *nwritten); int maxsize, int *nwritten);
extern int ginPostingListDecodeAllSegmentsToTbm(GinPostingList *ptr, int totalsize, TIDBitmap *tbm); extern int ginPostingListDecodeAllSegmentsToTbm(GinPostingList *ptr, int totalsize, TIDBitmap *tbm);

View File

@ -252,7 +252,7 @@ typedef struct HashMetaPageData
uint32 hashm_maxbucket; /* ID of maximum bucket in use */ uint32 hashm_maxbucket; /* ID of maximum bucket in use */
uint32 hashm_highmask; /* mask to modulo into entire table */ uint32 hashm_highmask; /* mask to modulo into entire table */
uint32 hashm_lowmask; /* mask to modulo into lower half of table */ uint32 hashm_lowmask; /* mask to modulo into lower half of table */
uint32 hashm_ovflpoint; /* splitpoint from which ovflpgs being uint32 hashm_ovflpoint; /* splitpoint from which ovflpage being
* allocated */ * allocated */
uint32 hashm_firstfree; /* lowest-number free ovflpage (bit#) */ uint32 hashm_firstfree; /* lowest-number free ovflpage (bit#) */
uint32 hashm_nmaps; /* number of bitmap pages */ uint32 hashm_nmaps; /* number of bitmap pages */

View File

@ -259,4 +259,4 @@ extern void btree_desc(StringInfo buf, XLogReaderState *record);
extern const char *btree_identify(uint8 info); extern const char *btree_identify(uint8 info);
extern void btree_mask(char *pagedata, BlockNumber blkno); extern void btree_mask(char *pagedata, BlockNumber blkno);
#endif /* NBXLOG_H */ #endif /* NBTXLOG_H */

View File

@ -42,7 +42,7 @@
extern void XLogBeginInsert(void); extern void XLogBeginInsert(void);
extern void XLogSetRecordFlags(uint8 flags); extern void XLogSetRecordFlags(uint8 flags);
extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info); extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info);
extern void XLogEnsureRecordSpace(int nbuffers, int ndatas); extern void XLogEnsureRecordSpace(int max_block_id, int ndatas);
extern void XLogRegisterData(char *data, int len); extern void XLogRegisterData(char *data, int len);
extern void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags); extern void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags);
extern void XLogRegisterBlock(uint8 block_id, RelFileNode *rnode, extern void XLogRegisterBlock(uint8 block_id, RelFileNode *rnode,

View File

@ -25,8 +25,8 @@
* *
* The rule for developers is: if you commit a change that requires * The rule for developers is: if you commit a change that requires
* an initdb, you should update the catalog version number (as well as * an initdb, you should update the catalog version number (as well as
* notifying the pghackers mailing list, which has been the informal * notifying the pgsql-hackers mailing list, which has been the
* practice for a long time). * informal practice for a long time).
* *
* The catalog version number is placed here since modifying files in * The catalog version number is placed here since modifying files in
* include/catalog is the most common kind of initdb-forcing change. * include/catalog is the most common kind of initdb-forcing change.

View File

@ -43,7 +43,7 @@ extern ObjectAddress InsertExtensionTuple(const char *extName, Oid extOwner,
extern ObjectAddress ExecAlterExtensionStmt(ParseState *pstate, AlterExtensionStmt *stmt); extern ObjectAddress ExecAlterExtensionStmt(ParseState *pstate, AlterExtensionStmt *stmt);
extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt, extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt,
ObjectAddress *objAddress); ObjectAddress *objAddr);
extern Oid get_extension_oid(const char *extname, bool missing_ok); extern Oid get_extension_oid(const char *extname, bool missing_ok);
extern char *get_extension_name(Oid ext_oid); extern char *get_extension_name(Oid ext_oid);

View File

@ -87,7 +87,7 @@ extern void RangeVarCallbackOwnsTable(const RangeVar *relation,
Oid relId, Oid oldRelId, void *arg); Oid relId, Oid oldRelId, void *arg);
extern void RangeVarCallbackOwnsRelation(const RangeVar *relation, extern void RangeVarCallbackOwnsRelation(const RangeVar *relation,
Oid relId, Oid oldRelId, void *noCatalogs); Oid relId, Oid oldRelId, void *arg);
extern bool PartConstraintImpliedByRelConstraint(Relation scanrel, extern bool PartConstraintImpliedByRelConstraint(Relation scanrel,
List *partConstraint); List *partConstraint);

View File

@ -576,7 +576,7 @@ typedef struct ExprEvalStep
/* for EEOP_WINDOW_FUNC */ /* for EEOP_WINDOW_FUNC */
struct struct
{ {
/* out-of-line state, modified by nodeWindowFunc.c */ /* out-of-line state, modified by nodeWindowAgg.c */
WindowFuncExprState *wfstate; WindowFuncExprState *wfstate;
} window_func; } window_func;

View File

@ -289,7 +289,7 @@ typedef enum pg_enc
#define PG_ENCODING_BE_LAST PG_KOI8U #define PG_ENCODING_BE_LAST PG_KOI8U
/* /*
* Please use these tests before access to pg_encconv_tbl[] * Please use these tests before access to pg_enc2name_tbl[]
* or to other places... * or to other places...
*/ */
#define PG_VALID_BE_ENCODING(_enc) \ #define PG_VALID_BE_ENCODING(_enc) \

View File

@ -11,8 +11,8 @@
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
#ifndef PARSER_FUNC_H #ifndef PARSE_FUNC_H
#define PARSER_FUNC_H #define PARSE_FUNC_H
#include "catalog/namespace.h" #include "catalog/namespace.h"
#include "parser/parse_node.h" #include "parser/parse_node.h"

View File

@ -178,7 +178,7 @@ pg_atomic_init_flag(volatile pg_atomic_flag *ptr)
} }
/* /*
* pg_atomic_test_and_set_flag - TAS() * pg_atomic_test_set_flag - TAS()
* *
* Returns true if the flag has successfully been set, false otherwise. * Returns true if the flag has successfully been set, false otherwise.
* *

View File

@ -22,8 +22,8 @@
* *
* This is a pointer to an item within a disk page of a known file * This is a pointer to an item within a disk page of a known file
* (for example, a cross-link from an index to its parent table). * (for example, a cross-link from an index to its parent table).
* blkid tells us which block, posid tells us which entry in the linp * ip_blkid tells us which block, ip_posid tells us which entry in
* (ItemIdData) array we want. * the linp (ItemIdData) array we want.
* *
* Note: because there is an item pointer in each tuple header and index * Note: because there is an item pointer in each tuple header and index
* tuple header on disk, it's very important not to waste space with * tuple header on disk, it's very important not to waste space with

View File

@ -26,7 +26,6 @@ typedef uint16 OffsetNumber;
#define InvalidOffsetNumber ((OffsetNumber) 0) #define InvalidOffsetNumber ((OffsetNumber) 0)
#define FirstOffsetNumber ((OffsetNumber) 1) #define FirstOffsetNumber ((OffsetNumber) 1)
#define MaxOffsetNumber ((OffsetNumber) (BLCKSZ / sizeof(ItemIdData))) #define MaxOffsetNumber ((OffsetNumber) (BLCKSZ / sizeof(ItemIdData)))
#define OffsetNumberMask (0xffff) /* valid uint16 bits */
/* ---------------- /* ----------------
* support macros * support macros

View File

@ -332,4 +332,4 @@ extern PGPROC *AuxiliaryPidGetProc(int pid);
extern void BecomeLockGroupLeader(void); extern void BecomeLockGroupLeader(void);
extern bool BecomeLockGroupMember(PGPROC *leader, int pid); extern bool BecomeLockGroupMember(PGPROC *leader, int pid);
#endif /* PROC_H */ #endif /* _PROC_H_ */

View File

@ -94,7 +94,7 @@ typedef struct JsonSemAction
} JsonSemAction; } JsonSemAction;
/* /*
* parse_json will parse the string in the lex calling the * pg_parse_json will parse the string in the lex calling the
* action functions in sem at the appropriate points. It is * action functions in sem at the appropriate points. It is
* up to them to keep what state they need in semstate. If they * up to them to keep what state they need in semstate. If they
* need access to the state of the lexer, then its pointer * need access to the state of the lexer, then its pointer

View File

@ -2062,8 +2062,9 @@ ecpg_do_prologue(int lineno, const int compat, const int force_indicator,
/*------ /*------
* create a list of variables * create a list of variables
* *
* The variables are listed with input variables preceding outputvariables * The variables are listed with input variables preceding output
* The end of each group is marked by an end marker. per variable we list: * variables. The end of each group is marked by an end marker.
* Per variable we list:
* *
* type - as defined in ecpgtype.h * type - as defined in ecpgtype.h
* value - where to store the data * value - where to store the data

View File

@ -623,7 +623,7 @@ PGTYPESdate_defmt_asc(date * d, const char *fmt, const char *str)
/* /*
* evil[tm] hack: if we read the pgtypes_date_months and haven't * evil[tm] hack: if we read the pgtypes_date_months and haven't
* found a match, reset list to point to pgtypes_date_months_short * found a match, reset list to point to months (abbreviations)
* and reset the counter variable i * and reset the counter variable i
*/ */
if (list == pgtypes_date_months) if (list == pgtypes_date_months)

View File

@ -3732,8 +3732,8 @@ internal_ping(PGconn *conn)
* PQPING_NO_RESPONSE. This result could be somewhat misleading for a * PQPING_NO_RESPONSE. This result could be somewhat misleading for a
* pre-7.4 server, since it won't send back a SQLSTATE, but those are long * pre-7.4 server, since it won't send back a SQLSTATE, but those are long
* out of support. Another corner case where the server could return a * out of support. Another corner case where the server could return a
* failure without a SQLSTATE is fork failure, but NO_RESPONSE isn't * failure without a SQLSTATE is fork failure, but PQPING_NO_RESPONSE
* totally unreasonable for that anyway. We expect that every other * isn't totally unreasonable for that anyway. We expect that every other
* failure case in a modern server will produce a report with a SQLSTATE. * failure case in a modern server will produce a report with a SQLSTATE.
* *
* NOTE: whenever we get around to making libpq generate SQLSTATEs for * NOTE: whenever we get around to making libpq generate SQLSTATEs for

View File

@ -3291,7 +3291,7 @@ PQflush(PGconn *conn)
* PQfreemem - safely frees memory allocated * PQfreemem - safely frees memory allocated
* *
* Needed mostly by Win32, unless multithreaded DLL (/MD in VC6) * Needed mostly by Win32, unless multithreaded DLL (/MD in VC6)
* Used for freeing memory from PQescapeByte()a/PQunescapeBytea() * Used for freeing memory from PQescapeBytea()/PQunescapeBytea()
*/ */
void void
PQfreemem(void *ptr) PQfreemem(void *ptr)

View File

@ -7,7 +7,7 @@
* miscellaneous useful functions * miscellaneous useful functions
* *
* The communication routines here are analogous to the ones in * The communication routines here are analogous to the ones in
* backend/libpq/pqcomm.c and backend/libpq/pqcomprim.c, but operate * backend/libpq/pqcomm.c and backend/libpq/pqformat.c, but operate
* in the considerably different environment of the frontend libpq. * in the considerably different environment of the frontend libpq.
* In particular, we work with a bare nonblock-mode socket, rather than * In particular, we work with a bare nonblock-mode socket, rather than
* a stdio stream, so that we can avoid unwanted blocking of the application. * a stdio stream, so that we can avoid unwanted blocking of the application.

View File

@ -565,10 +565,10 @@ extern void PQdisplayTuples(const PGresult *res,
extern void PQprintTuples(const PGresult *res, extern void PQprintTuples(const PGresult *res,
FILE *fout, /* output stream */ FILE *fout, /* output stream */
int printAttName, /* print attribute names */ int PrintAttNames, /* print attribute names */
int terseOutput, /* delimiter bars */ int TerseOutput, /* delimiter bars */
int width); /* width of column, if 0, use variable int colWidth); /* width of column, if 0, use
* width */ * variable width */
/* === in fe-lobj.c === */ /* === in fe-lobj.c === */

View File

@ -169,7 +169,7 @@ struct pg_result
int ntups; int ntups;
int numAttributes; int numAttributes;
PGresAttDesc *attDescs; PGresAttDesc *attDescs;
PGresAttValue **tuples; /* each PGresTuple is an array of PGresAttValue **tuples; /* each PGresult tuple is an array of
* PGresAttValue's */ * PGresAttValue's */
int tupArrSize; /* allocated size of tuples array */ int tupArrSize; /* allocated size of tuples array */
int numParameters; int numParameters;
@ -232,7 +232,8 @@ typedef enum
PGQUERY_DESCRIBE /* Describe Statement or Portal */ PGQUERY_DESCRIBE /* Describe Statement or Portal */
} PGQueryClass; } PGQueryClass;
/* PGSetenvStatusType defines the state of the PQSetenv state machine */ /* PGSetenvStatusType defines the state of the pqSetenv state machine */
/* (this is used only for 2.0-protocol connections) */ /* (this is used only for 2.0-protocol connections) */
typedef enum typedef enum
{ {

View File

@ -2452,7 +2452,7 @@ delete_function(PLpgSQL_function *func)
plpgsql_free_function_memory(func); plpgsql_free_function_memory(func);
} }
/* exported so we can call it from plpgsql_init() */ /* exported so we can call it from _PG_init() */
void void
plpgsql_HashTableInit(void) plpgsql_HashTableInit(void)
{ {

View File

@ -685,7 +685,7 @@ typedef struct PLpgSQL_stmt_fori
/* /*
* PLpgSQL_stmt_forq represents a FOR statement running over a SQL query. * PLpgSQL_stmt_forq represents a FOR statement running over a SQL query.
* It is the common supertype of PLpgSQL_stmt_fors, PLpgSQL_stmt_forc * It is the common supertype of PLpgSQL_stmt_fors, PLpgSQL_stmt_forc
* and PLpgSQL_dynfors. * and PLpgSQL_stmt_dynfors.
*/ */
typedef struct PLpgSQL_stmt_forq typedef struct PLpgSQL_stmt_forq
{ {

View File

@ -471,7 +471,7 @@ PLy_procedure_munge_source(const char *name, const char *src)
*mp = '\0'; *mp = '\0';
if (mp > (mrc + mlen)) if (mp > (mrc + mlen))
elog(FATAL, "buffer overrun in PLy_munge_source"); elog(FATAL, "buffer overrun in PLy_procedure_munge_source");
return mrc; return mrc;
} }

View File

@ -55,7 +55,7 @@ installcheck: all
check: all check: all
$(pg_isolation_regress_check) --schedule=$(srcdir)/isolation_schedule $(pg_isolation_regress_check) --schedule=$(srcdir)/isolation_schedule
# Versions of the check tests that include the prepared_transactions test # Versions of the check tests that include the prepared-transactions test
# It only makes sense to run these if set up to use prepared transactions, # It only makes sense to run these if set up to use prepared transactions,
# via TEMP_CONFIG for the check case, or via the postgresql.conf for the # via TEMP_CONFIG for the check case, or via the postgresql.conf for the
# installcheck case. # installcheck case.

View File

@ -230,8 +230,7 @@ sub AddDir
if ($filter eq "LIBOBJS") if ($filter eq "LIBOBJS")
{ {
no warnings qw(once); no warnings qw(once);
if (grep(/$p/, @main::pgportfiles, @main::pgcommonfiles) if (grep(/$p/, @main::pgportfiles) == 1)
== 1)
{ {
$p =~ s/\.c/\.o/; $p =~ s/\.c/\.o/;
$matches .= $p . " "; $matches .= $p . " ";