88 *
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/storage/page/bufpage.c,v 1.57 2003/11/29 19:51:57 pgsql Exp $
11+ * $PostgreSQL: pgsql/src/backend/storage/page/bufpage.c,v 1.58 2004/06/08 14:00:35 momjian Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -151,8 +151,8 @@ PageAddItem(Page page,
151151if (offsetNumber < limit )
152152{
153153itemId = PageGetItemId (phdr ,offsetNumber );
154- if ((( * itemId ). lp_flags & LP_USED )||
155- (( * itemId ). lp_len != 0 ))
154+ if ((itemId -> lp_flags & LP_USED )||
155+ (itemId -> lp_len != 0 ))
156156{
157157elog (WARNING ,"will not overwrite a used ItemId" );
158158return InvalidOffsetNumber ;
@@ -172,8 +172,8 @@ PageAddItem(Page page,
172172for (offsetNumber = 1 ;offsetNumber < limit ;offsetNumber ++ )
173173{
174174itemId = PageGetItemId (phdr ,offsetNumber );
175- if (((( * itemId ). lp_flags & LP_USED )== 0 )&&
176- (( * itemId ). lp_len == 0 ))
175+ if (((itemId -> lp_flags & LP_USED )== 0 )&&
176+ (itemId -> lp_len == 0 ))
177177break ;
178178}
179179/* if no free slot, we'll put it at limit (1st open slot) */
@@ -214,9 +214,9 @@ PageAddItem(Page page,
214214(limit - offsetNumber )* sizeof (ItemIdData ));
215215
216216/* set the item pointer */
217- ( * itemId ). lp_off = upper ;
218- ( * itemId ). lp_len = size ;
219- ( * itemId ). lp_flags = flags ;
217+ itemId -> lp_off = upper ;
218+ itemId -> lp_len = size ;
219+ itemId -> lp_flags = flags ;
220220
221221/* copy the item's data onto the page */
222222memcpy ((char * )page + upper ,item ,size );
@@ -278,19 +278,20 @@ PageRestoreTempPage(Page tempPage, Page oldPage)
278278/*
279279 * sorting support for PageRepairFragmentation
280280 */
281- struct itemIdSortData
281+ typedef struct itemIdSortData
282282{
283283int offsetindex ;/* linp array index */
284284int itemoff ;/* page offset of item data */
285285Size alignedlen ;/* MAXALIGN(item data len) */
286- };
286+ }itemIdSortData ;
287+ typedef itemIdSortData * itemIdSort ;
287288
288289static int
289290itemoffcompare (const void * itemidp1 ,const void * itemidp2 )
290291{
291292/* Sort in decreasing itemoff order */
292- return ((struct itemIdSortData * )itemidp2 )-> itemoff -
293- (( struct itemIdSortData * )itemidp1 )-> itemoff ;
293+ return ((itemIdSort )itemidp2 )-> itemoff -
294+ (( itemIdSort )itemidp1 )-> itemoff ;
294295}
295296
296297/*
@@ -309,8 +310,8 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
309310Offset pd_lower = ((PageHeader )page )-> pd_lower ;
310311Offset pd_upper = ((PageHeader )page )-> pd_upper ;
311312Offset pd_special = ((PageHeader )page )-> pd_special ;
312- struct itemIdSortData * itemidbase ,
313- * itemidptr ;
313+ itemIdSort itemidbase ,
314+ itemidptr ;
314315ItemId lp ;
315316int nline ,
316317nused ;
@@ -340,9 +341,9 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
340341for (i = 0 ;i < nline ;i ++ )
341342{
342343lp = PageGetItemId (page ,i + 1 );
343- if (( * lp ). lp_flags & LP_DELETE )/* marked for deletion */
344- ( * lp ). lp_flags &= ~(LP_USED |LP_DELETE );
345- if (( * lp ). lp_flags & LP_USED )
344+ if (lp -> lp_flags & LP_DELETE )/* marked for deletion */
345+ lp -> lp_flags &= ~(LP_USED |LP_DELETE );
346+ if (lp -> lp_flags & LP_USED )
346347nused ++ ;
347348else if (unused )
348349unused [i - nused ]= (OffsetNumber )i ;
@@ -354,37 +355,36 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
354355for (i = 0 ;i < nline ;i ++ )
355356{
356357lp = PageGetItemId (page ,i + 1 );
357- ( * lp ). lp_len = 0 ;/* indicate unused & deallocated */
358+ lp -> lp_len = 0 ;/* indicate unused & deallocated */
358359}
359360((PageHeader )page )-> pd_upper = pd_special ;
360361}
361362else
362363{/* nused != 0 */
363364/* Need to compact the page the hard way */
364- itemidbase = (struct itemIdSortData * )
365- palloc (sizeof (struct itemIdSortData )* nused );
365+ itemidbase = (itemIdSort )palloc (sizeof (itemIdSortData )* nused );
366366itemidptr = itemidbase ;
367367totallen = 0 ;
368368for (i = 0 ;i < nline ;i ++ )
369369{
370370lp = PageGetItemId (page ,i + 1 );
371- if (( * lp ). lp_flags & LP_USED )
371+ if (lp -> lp_flags & LP_USED )
372372{
373373itemidptr -> offsetindex = i ;
374- itemidptr -> itemoff = ( * lp ). lp_off ;
374+ itemidptr -> itemoff = lp -> lp_off ;
375375if (itemidptr -> itemoff < (int )pd_upper ||
376376itemidptr -> itemoff >= (int )pd_special )
377377ereport (ERROR ,
378378(errcode (ERRCODE_DATA_CORRUPTED ),
379379errmsg ("corrupted item pointer: %u" ,
380380itemidptr -> itemoff )));
381- itemidptr -> alignedlen = MAXALIGN (( * lp ). lp_len );
381+ itemidptr -> alignedlen = MAXALIGN (lp -> lp_len );
382382totallen += itemidptr -> alignedlen ;
383383itemidptr ++ ;
384384}
385385else
386386{
387- ( * lp ). lp_len = 0 ;/* indicate unused & deallocated */
387+ lp -> lp_len = 0 ;/* indicate unused & deallocated */
388388}
389389}
390390
@@ -395,7 +395,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
395395 (unsignedint )totallen ,pd_special - pd_lower )));
396396
397397/* sort itemIdSortData array into decreasing itemoff order */
398- qsort ((char * )itemidbase ,nused ,sizeof (struct itemIdSortData ),
398+ qsort ((char * )itemidbase ,nused ,sizeof (itemIdSortData ),
399399itemoffcompare );
400400
401401/* compactify page */
@@ -408,7 +408,7 @@ PageRepairFragmentation(Page page, OffsetNumber *unused)
408408memmove ((char * )page + upper ,
409409(char * )page + itemidptr -> itemoff ,
410410itemidptr -> alignedlen );
411- ( * lp ). lp_off = upper ;
411+ lp -> lp_off = upper ;
412412}
413413
414414((PageHeader )page )-> pd_upper = upper ;
@@ -538,8 +538,9 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum)
538538nline -- ;/* there's one less than when we started */
539539for (i = 1 ;i <=nline ;i ++ )
540540{
541- if (PageGetItemId (phdr ,i )-> lp_off <=offset )
542- PageGetItemId (phdr ,i )-> lp_off += size ;
541+ ItemId ii = PageGetItemId (phdr ,i );
542+ if (ii -> lp_off <=offset )
543+ ii -> lp_off += size ;
543544}
544545}
545546}