@@ -99,35 +99,46 @@ struct BufFile
99
99
char buffer [BLCKSZ ];
100
100
};
101
101
102
+ static BufFile * makeBufFileCommon (int nfiles );
102
103
static BufFile * makeBufFile (File firstfile );
103
104
static void extendBufFile (BufFile * file );
104
105
static void BufFileLoadBuffer (BufFile * file );
105
106
static void BufFileDumpBuffer (BufFile * file );
106
107
static int BufFileFlush (BufFile * file );
107
108
static File MakeNewSharedSegment (BufFile * file , int segment );
108
109
109
-
110
110
/*
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.
113
112
*/
114
113
static BufFile *
115
- makeBufFile ( File firstfile )
114
+ makeBufFileCommon ( int nfiles )
116
115
{
117
116
BufFile * file = (BufFile * ) palloc (sizeof (BufFile ));
118
117
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 );
124
120
file -> isInterXact = false;
125
121
file -> dirty = false;
126
122
file -> resowner = CurrentResourceOwner ;
127
123
file -> curFile = 0 ;
128
124
file -> curOffset = 0L ;
129
125
file -> pos = 0 ;
130
126
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 ;
131
142
file -> readOnly = false;
132
143
file -> fileset = NULL ;
133
144
file -> name = NULL ;
@@ -246,23 +257,12 @@ BufFileCreateShared(SharedFileSet *fileset, const char *name)
246
257
{
247
258
BufFile * file ;
248
259
249
- file = ( BufFile * ) palloc ( sizeof ( BufFile ) );
260
+ file = makeBufFileCommon ( 1 );
250
261
file -> fileset = fileset ;
251
262
file -> name = pstrdup (name );
252
- file -> numFiles = 1 ;
253
263
file -> files = (File * ) palloc (sizeof (File ));
254
264
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 ;
264
265
file -> readOnly = false;
265
- file -> name = pstrdup (name );
266
266
267
267
return file ;
268
268
}
@@ -283,7 +283,6 @@ BufFileOpenShared(SharedFileSet *fileset, const char *name)
283
283
File * files ;
284
284
int nfiles = 0 ;
285
285
286
- file = (BufFile * ) palloc (sizeof (BufFile ));
287
286
files = palloc (sizeof (File ) * capacity );
288
287
289
288
/*
@@ -317,16 +316,8 @@ BufFileOpenShared(SharedFileSet *fileset, const char *name)
317
316
(errcode_for_file_access (),
318
317
errmsg ("could not open BufFile \"%s\"" , name )));
319
318
320
- file -> numFiles = nfiles ;
319
+ file = makeBufFileCommon ( nfiles ) ;
321
320
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 ;
330
321
file -> readOnly = true; /* Can't write to files opened this way */
331
322
file -> fileset = fileset ;
332
323
file -> name = pstrdup (name );
0 commit comments