Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
4da8fc05
Commit
4da8fc05
authored
Jul 26, 2012
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplify pg_upgrade's handling when returning directory listings.
Backpatch to 9.2.
parent
af026b5d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
17 additions
and
26 deletions
+17
-26
contrib/pg_upgrade/file.c
contrib/pg_upgrade/file.c
+8
-17
contrib/pg_upgrade/pg_upgrade.h
contrib/pg_upgrade/pg_upgrade.h
+1
-1
contrib/pg_upgrade/relfilenode.c
contrib/pg_upgrade/relfilenode.c
+8
-8
No files found.
contrib/pg_upgrade/file.c
View file @
4da8fc05
...
@@ -225,23 +225,21 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
...
@@ -225,23 +225,21 @@ copy_file(const char *srcfile, const char *dstfile, bool force)
* load_directory()
* load_directory()
*
*
* Read all the file names in the specified directory, and return them as
* Read all the file names in the specified directory, and return them as
* an array of "
struct dirent
" pointers. The array address is returned in
* an array of "
char *
" pointers. The array address is returned in
* *namelist, and the function result is the count of file names.
* *namelist, and the function result is the count of file names.
*
*
* To free the result data, free each
namelist
array member, then free the
* To free the result data, free each
(char *)
array member, then free the
* namelist array itself.
* namelist array itself.
*/
*/
int
int
load_directory
(
const
char
*
dirname
,
struct
dirent
***
namelist
)
load_directory
(
const
char
*
dirname
,
char
***
namelist
)
{
{
DIR
*
dirdesc
;
DIR
*
dirdesc
;
struct
dirent
*
direntry
;
struct
dirent
*
direntry
;
int
count
=
0
;
int
count
=
0
;
int
allocsize
=
64
;
int
allocsize
=
64
;
/* initial array size */
size_t
entrysize
;
*
namelist
=
(
struct
dirent
**
)
*
namelist
=
(
char
**
)
pg_malloc
(
allocsize
*
sizeof
(
char
*
));
pg_malloc
(
allocsize
*
sizeof
(
struct
dirent
*
));
if
((
dirdesc
=
opendir
(
dirname
))
==
NULL
)
if
((
dirdesc
=
opendir
(
dirname
))
==
NULL
)
pg_log
(
PG_FATAL
,
"could not open directory
\"
%s
\"
: %s
\n
"
,
pg_log
(
PG_FATAL
,
"could not open directory
\"
%s
\"
: %s
\n
"
,
...
@@ -252,18 +250,11 @@ load_directory(const char *dirname, struct dirent *** namelist)
...
@@ -252,18 +250,11 @@ load_directory(const char *dirname, struct dirent *** namelist)
if
(
count
>=
allocsize
)
if
(
count
>=
allocsize
)
{
{
allocsize
*=
2
;
allocsize
*=
2
;
*
namelist
=
(
struct
dirent
**
)
*
namelist
=
(
char
**
)
pg_realloc
(
*
namelist
,
allocsize
*
sizeof
(
struct
dirent
*
));
pg_realloc
(
*
namelist
,
allocsize
*
sizeof
(
char
*
));
}
}
entrysize
=
offsetof
(
struct
dirent
,
d_name
)
+
(
*
namelist
)[
count
++
]
=
pg_strdup
(
direntry
->
d_name
);
strlen
(
direntry
->
d_name
)
+
1
;
(
*
namelist
)[
count
]
=
(
struct
dirent
*
)
pg_malloc
(
entrysize
);
memcpy
((
*
namelist
)[
count
],
direntry
,
entrysize
);
count
++
;
}
}
#ifdef WIN32
#ifdef WIN32
...
...
contrib/pg_upgrade/pg_upgrade.h
View file @
4da8fc05
...
@@ -356,7 +356,7 @@ const char *setupPageConverter(pageCnvCtx **result);
...
@@ -356,7 +356,7 @@ const char *setupPageConverter(pageCnvCtx **result);
typedef
void
*
pageCnvCtx
;
typedef
void
*
pageCnvCtx
;
#endif
#endif
int
load_directory
(
const
char
*
dirname
,
struct
dirent
***
namelist
);
int
load_directory
(
const
char
*
dirname
,
char
***
namelist
);
const
char
*
copyAndUpdateFile
(
pageCnvCtx
*
pageConverter
,
const
char
*
src
,
const
char
*
copyAndUpdateFile
(
pageCnvCtx
*
pageConverter
,
const
char
*
src
,
const
char
*
dst
,
bool
force
);
const
char
*
dst
,
bool
force
);
const
char
*
linkAndUpdateFile
(
pageCnvCtx
*
pageConverter
,
const
char
*
src
,
const
char
*
linkAndUpdateFile
(
pageCnvCtx
*
pageConverter
,
const
char
*
src
,
...
...
contrib/pg_upgrade/relfilenode.c
View file @
4da8fc05
...
@@ -133,7 +133,7 @@ transfer_single_new_db(pageCnvCtx *pageConverter,
...
@@ -133,7 +133,7 @@ transfer_single_new_db(pageCnvCtx *pageConverter,
{
{
char
old_dir
[
MAXPGPATH
];
char
old_dir
[
MAXPGPATH
];
char
file_pattern
[
MAXPGPATH
];
char
file_pattern
[
MAXPGPATH
];
struct
dirent
**
namelist
=
NULL
;
char
**
namelist
=
NULL
;
int
numFiles
=
0
;
int
numFiles
=
0
;
int
mapnum
;
int
mapnum
;
int
fileno
;
int
fileno
;
...
@@ -192,21 +192,21 @@ transfer_single_new_db(pageCnvCtx *pageConverter,
...
@@ -192,21 +192,21 @@ transfer_single_new_db(pageCnvCtx *pageConverter,
for
(
fileno
=
0
;
fileno
<
numFiles
;
fileno
++
)
for
(
fileno
=
0
;
fileno
<
numFiles
;
fileno
++
)
{
{
char
*
vm_offset
=
strstr
(
namelist
[
fileno
]
->
d_name
,
"_vm"
);
char
*
vm_offset
=
strstr
(
namelist
[
fileno
],
"_vm"
);
bool
is_vm_file
=
false
;
bool
is_vm_file
=
false
;
/* Is a visibility map file? (name ends with _vm) */
/* Is a visibility map file? (name ends with _vm) */
if
(
vm_offset
&&
strlen
(
vm_offset
)
==
strlen
(
"_vm"
))
if
(
vm_offset
&&
strlen
(
vm_offset
)
==
strlen
(
"_vm"
))
is_vm_file
=
true
;
is_vm_file
=
true
;
if
(
strncmp
(
namelist
[
fileno
]
->
d_name
,
file_pattern
,
if
(
strncmp
(
namelist
[
fileno
],
file_pattern
,
strlen
(
file_pattern
))
==
0
&&
strlen
(
file_pattern
))
==
0
&&
(
!
is_vm_file
||
!
vm_crashsafe_change
))
(
!
is_vm_file
||
!
vm_crashsafe_change
))
{
{
snprintf
(
old_file
,
sizeof
(
old_file
),
"%s/%s"
,
maps
[
mapnum
].
old_dir
,
snprintf
(
old_file
,
sizeof
(
old_file
),
"%s/%s"
,
maps
[
mapnum
].
old_dir
,
namelist
[
fileno
]
->
d_name
);
namelist
[
fileno
]);
snprintf
(
new_file
,
sizeof
(
new_file
),
"%s/%u%s"
,
maps
[
mapnum
].
new_dir
,
snprintf
(
new_file
,
sizeof
(
new_file
),
"%s/%u%s"
,
maps
[
mapnum
].
new_dir
,
maps
[
mapnum
].
new_relfilenode
,
strchr
(
namelist
[
fileno
]
->
d_name
,
'_'
));
maps
[
mapnum
].
new_relfilenode
,
strchr
(
namelist
[
fileno
],
'_'
));
unlink
(
new_file
);
unlink
(
new_file
);
transfer_relfile
(
pageConverter
,
old_file
,
new_file
,
transfer_relfile
(
pageConverter
,
old_file
,
new_file
,
...
@@ -227,13 +227,13 @@ transfer_single_new_db(pageCnvCtx *pageConverter,
...
@@ -227,13 +227,13 @@ transfer_single_new_db(pageCnvCtx *pageConverter,
for
(
fileno
=
0
;
fileno
<
numFiles
;
fileno
++
)
for
(
fileno
=
0
;
fileno
<
numFiles
;
fileno
++
)
{
{
if
(
strncmp
(
namelist
[
fileno
]
->
d_name
,
file_pattern
,
if
(
strncmp
(
namelist
[
fileno
],
file_pattern
,
strlen
(
file_pattern
))
==
0
)
strlen
(
file_pattern
))
==
0
)
{
{
snprintf
(
old_file
,
sizeof
(
old_file
),
"%s/%s"
,
maps
[
mapnum
].
old_dir
,
snprintf
(
old_file
,
sizeof
(
old_file
),
"%s/%s"
,
maps
[
mapnum
].
old_dir
,
namelist
[
fileno
]
->
d_name
);
namelist
[
fileno
]);
snprintf
(
new_file
,
sizeof
(
new_file
),
"%s/%u%s"
,
maps
[
mapnum
].
new_dir
,
snprintf
(
new_file
,
sizeof
(
new_file
),
"%s/%u%s"
,
maps
[
mapnum
].
new_dir
,
maps
[
mapnum
].
new_relfilenode
,
strchr
(
namelist
[
fileno
]
->
d_name
,
'.'
));
maps
[
mapnum
].
new_relfilenode
,
strchr
(
namelist
[
fileno
],
'.'
));
unlink
(
new_file
);
unlink
(
new_file
);
transfer_relfile
(
pageConverter
,
old_file
,
new_file
,
transfer_relfile
(
pageConverter
,
old_file
,
new_file
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment