@@ -99,35 +99,46 @@ struct BufFile
9999 char buffer [BLCKSZ ];
100100};
101101
102+ static BufFile * makeBufFileCommon (int nfiles );
102103static BufFile * makeBufFile (File firstfile );
103104static void extendBufFile (BufFile * file );
104105static void BufFileLoadBuffer (BufFile * file );
105106static void BufFileDumpBuffer (BufFile * file );
106107static int BufFileFlush (BufFile * file );
107108static File MakeNewSharedSegment (BufFile * file , int segment );
108109
109-
110110/*
111- * Create a BufFile given the first underlying physical file.
112- * NOTE: caller must set isInterXact if appropriate.
111+ * Create BufFile and perform the common initialization.
113112 */
114113static BufFile *
115- makeBufFile ( File firstfile )
114+ makeBufFileCommon ( int nfiles )
116115{
117116 BufFile * file = (BufFile * ) palloc (sizeof (BufFile ));
118117
119- file -> numFiles = 1 ;
120- file -> files = (File * ) palloc (sizeof (File ));
121- file -> files [0 ] = firstfile ;
122- file -> offsets = (off_t * ) palloc (sizeof (off_t ));
123- file -> offsets [0 ] = 0L ;
118+ file -> numFiles = nfiles ;
119+ file -> offsets = (off_t * ) palloc0 (sizeof (off_t ) * nfiles );
124120 file -> isInterXact = false;
125121 file -> dirty = false;
126122 file -> resowner = CurrentResourceOwner ;
127123 file -> curFile = 0 ;
128124 file -> curOffset = 0L ;
129125 file -> pos = 0 ;
130126 file -> nbytes = 0 ;
127+
128+ return file ;
129+ }
130+
131+ /*
132+ * Create a BufFile given the first underlying physical file.
133+ * NOTE: caller must set isInterXact if appropriate.
134+ */
135+ static BufFile *
136+ makeBufFile (File firstfile )
137+ {
138+ BufFile * file = makeBufFileCommon (1 );
139+
140+ file -> files = (File * ) palloc (sizeof (File ));
141+ file -> files [0 ] = firstfile ;
131142 file -> readOnly = false;
132143 file -> fileset = NULL ;
133144 file -> name = NULL ;
@@ -246,23 +257,12 @@ BufFileCreateShared(SharedFileSet *fileset, const char *name)
246257{
247258 BufFile * file ;
248259
249- file = ( BufFile * ) palloc ( sizeof ( BufFile ) );
260+ file = makeBufFileCommon ( 1 );
250261 file -> fileset = fileset ;
251262 file -> name = pstrdup (name );
252- file -> numFiles = 1 ;
253263 file -> files = (File * ) palloc (sizeof (File ));
254264 file -> files [0 ] = MakeNewSharedSegment (file , 0 );
255- file -> offsets = (off_t * ) palloc (sizeof (off_t ));
256- file -> offsets [0 ] = 0L ;
257- file -> isInterXact = false;
258- file -> dirty = false;
259- file -> resowner = CurrentResourceOwner ;
260- file -> curFile = 0 ;
261- file -> curOffset = 0L ;
262- file -> pos = 0 ;
263- file -> nbytes = 0 ;
264265 file -> readOnly = false;
265- file -> name = pstrdup (name );
266266
267267 return file ;
268268}
@@ -283,7 +283,6 @@ BufFileOpenShared(SharedFileSet *fileset, const char *name)
283283 File * files ;
284284 int nfiles = 0 ;
285285
286- file = (BufFile * ) palloc (sizeof (BufFile ));
287286 files = palloc (sizeof (File ) * capacity );
288287
289288 /*
@@ -317,16 +316,8 @@ BufFileOpenShared(SharedFileSet *fileset, const char *name)
317316 (errcode_for_file_access (),
318317 errmsg ("could not open BufFile \"%s\"" , name )));
319318
320- file -> numFiles = nfiles ;
319+ file = makeBufFileCommon ( nfiles ) ;
321320 file -> files = files ;
322- file -> offsets = (off_t * ) palloc0 (sizeof (off_t ) * nfiles );
323- file -> isInterXact = false;
324- file -> dirty = false;
325- file -> resowner = CurrentResourceOwner ; /* Unused, can't extend */
326- file -> curFile = 0 ;
327- file -> curOffset = 0L ;
328- file -> pos = 0 ;
329- file -> nbytes = 0 ;
330321 file -> readOnly = true; /* Can't write to files opened this way */
331322 file -> fileset = fileset ;
332323 file -> name = pstrdup (name );
0 commit comments