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
0ca6939c
Commit
0ca6939c
authored
Nov 10, 2003
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated version of initdb with "rmdir/del" call on Win32.
Other cleanups as discussed.
parent
279598bb
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
120 additions
and
223 deletions
+120
-223
src/bin/initdb/initdb.c
src/bin/initdb/initdb.c
+120
-223
No files found.
src/bin/initdb/initdb.c
View file @
0ca6939c
/*-------------------------------------------------------------------------
*
* initdb
*
* author: Andrew Dunstan mailto:andrew@dunslane.net
*
* Copyright (C) 2003 Andrew Dunstan
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
...
...
@@ -14,7 +12,7 @@
* This is a C implementation of the previous shell script for setting up a
* PostgreSQL cluster location, and should be highly compatible with it.
*
* $Header: /cvsroot/pgsql/src/bin/initdb/initdb.c,v 1.
1 2003/11/10 22:51:16
momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/initdb/initdb.c,v 1.
2 2003/11/10 22:52:10
momjian Exp $
*
* TODO:
* - clean up find_postgres code and return values
...
...
@@ -53,7 +51,6 @@ char *bindir = PGBINDIR;
char
*
datadir
=
PGDATADIR
;
/* values to be obtained from arguments */
char
*
pg_data
=
""
;
char
*
encoding
=
""
;
char
*
locale
=
""
;
...
...
@@ -93,8 +90,8 @@ char infoversion[100];
bool
not_ok
=
false
;
/* defaults */
int
n_buffers
=
50
;
int
n_connections
=
10
;
int
n_buffers
=
50
;
/* platform specific path stuff */
...
...
@@ -104,13 +101,13 @@ int n_connections = 10;
#else
#define EXE ""
#define DEVNULL "/dev/null"
#endif
/* defined(__CYGWIN__) || defined(WIN32) */
#endif
#ifdef WIN32
#define PATHSEP ';'
#else
#define PATHSEP ':'
#endif
/* WIN32 */
#endif
/* detected path to postgres and (we assume) friends */
char
*
pgpath
;
...
...
@@ -118,23 +115,20 @@ char *pgpath;
/* forward declare all our functions */
static
bool
rmtree
(
char
*
,
bool
);
static
void
exit_nicely
(
void
);
static
void
canonicali
s
e_path
(
char
*
);
static
void
canonicali
z
e_path
(
char
*
);
#ifdef WIN32
static
char
*
expanded_path
(
char
*
);
static
int
init_unlink
(
const
char
*
);
#else
#define expanded_path(x) ( x )
#define init_unlink(x) unlink( (x) )
#endif
/* WIN32 */
#define expanded_path(x) (x)
#endif
static
char
**
readfile
(
char
*
);
static
void
writefile
(
char
*
,
char
**
);
static
char
*
get_id
(
void
);
static
char
*
get_encoding_id
(
char
*
);
static
char
*
get_short_version
(
void
);
static
int
build_path
(
char
*
,
mode_t
);
static
int
mkdir_p
(
char
*
,
mode_t
);
static
bool
check_data_dir
(
void
);
static
bool
mkdatadir
(
char
*
);
static
bool
chklocale
(
const
char
*
);
...
...
@@ -151,7 +145,7 @@ static void test_connections(void);
static
void
setup_config
(
void
);
static
void
bootstrap_template1
(
char
*
);
static
void
setup_shadow
(
void
);
static
void
get_set_pw
(
void
);
static
void
get_set_pw
d
(
void
);
static
void
unlimit_systables
(
void
);
static
void
setup_depend
(
void
);
static
void
setup_sysviews
(
void
);
...
...
@@ -171,60 +165,41 @@ static void *xmalloc(size_t);
/*
* macros for running pipes to postgres
*/
#define PG_CMD_DECL char cmd[MAXPGPATH]; char ** line ; FILE * pg
#define PG_CMD_DECL_NOLINE char cmd[MAXPGPATH]; FILE * pg
#define PG_CMD_OPEN \
do {
\
pg = popen(cmd,PG_BINARY_W);\
do {
\
pg = popen(cmd,PG_BINARY_W);
\
if (pg == NULL) \
exit_nicely();\
} while (0)
exit_nicely(); \
} while (0)
#define PG_CMD_CLOSE \
do {\
if(pclose(pg)>>8 &0xff)\
exit_nicely();\
} while (0)
do { \
if(pclose(pg) >> 8 & 0xff) \
exit_nicely(); \
} while (0)
#define PG_CMD_PUTLINE \
do {
\
do {
\
if (fputs(*line, pg) < 0) \
exit_nicely(); \
fflush(pg);\
} while (0)
#ifdef WIN32
fflush(pg); \
} while (0)
/* workaround for win32 unlink bug, not using logging like in port/dirmod.c */
/* make sure we call the real unlink from MSVCRT */
#ifdef unlink
#undef unlink
#ifndef WIN32
#define QUOTE_PATH ""
#else
#define QUOTE_PATH "\""
#endif
static
int
init_unlink
(
const
char
*
path
)
{
while
(
unlink
(
path
))
{
if
(
errno
!=
EACCES
)
return
-
1
;
Sleep
(
100
);
/* ms */
}
return
0
;
}
#endif
/* WIN32 */
/*
* routines to check mem allocations and fail noisily
* routines to check mem allocations and fail noisily
.
* Note that we can't call exit_nicely() on a memory failure, as it calls
* rmtree() which needs memory allocation. So we just exit with a bang.
*
*/
static
void
*
xmalloc
(
size_t
size
)
{
...
...
@@ -263,84 +238,31 @@ xstrdup(const char *s)
static
bool
rmtree
(
char
*
path
,
bool
rmtopdir
)
{
char
filepath
[
MAXPGPATH
];
DIR
*
dir
;
struct
dirent
*
file
;
char
**
filenames
;
char
**
filename
;
int
numnames
=
0
;
struct
stat
statbuf
;
char
buf
[
MAXPGPATH
+
64
];
/*
* we copy all the names out of the directory before we start
* modifying it.
*
*/
dir
=
opendir
(
path
);
if
(
dir
==
NULL
)
return
false
;
while
((
file
=
readdir
(
dir
))
!=
NULL
)
{
if
(
strcmp
(
file
->
d_name
,
"."
)
!=
0
&&
strcmp
(
file
->
d_name
,
".."
)
!=
0
)
numnames
++
;
}
rewinddir
(
dir
);
filenames
=
xmalloc
((
numnames
+
2
)
*
sizeof
(
char
*
));
numnames
=
0
;
while
((
file
=
readdir
(
dir
))
!=
NULL
)
{
if
(
strcmp
(
file
->
d_name
,
"."
)
!=
0
&&
strcmp
(
file
->
d_name
,
".."
)
!=
0
)
filenames
[
numnames
++
]
=
xstrdup
(
file
->
d_name
);
}
filenames
[
numnames
]
=
NULL
;
closedir
(
dir
);
/* now we have the names we can start removing things */
for
(
filename
=
filenames
;
*
filename
;
filename
++
)
{
snprintf
(
filepath
,
MAXPGPATH
,
"%s/%s"
,
path
,
*
filename
);
if
(
stat
(
filepath
,
&
statbuf
)
!=
0
)
return
false
;
if
(
S_ISDIR
(
statbuf
.
st_mode
))
{
/* call ourselves recursively for a directory */
if
(
!
rmtree
(
filepath
,
true
))
return
false
;
}
else
{
if
(
init_unlink
(
filepath
)
!=
0
)
return
false
;
}
}
if
(
rmtopdir
)
{
if
(
rmdir
(
path
)
!=
0
)
return
false
;
}
#ifndef WIN32
/* doesn't handle .* files */
snprintf
(
buf
,
sizeof
(
buf
),
"rm -rf '%s%s'"
,
path
,
rmtopdir
?
""
:
"/*"
);
#else
snprintf
(
buf
,
sizeof
(
buf
),
"%s /s /q
\"
%s
\"
"
,
rmtopdir
?
"rmdir"
:
"del"
,
path
);
#endif
return
true
;
return
!
system
(
buf
)
;
}
/*
* make all paths look like unix, with forward slashes
* also strip any trailing slash
* also strip any trailing slash.
* The Windows command processor will accept suitably quoted paths
* with forward slashes, but barfs badly with mixed forward and back
* slashes. Removing the trailing slash on a path means we never get
* ugly double slashes.
*/
static
void
canonicali
s
e_path
(
char
*
path
)
canonicali
z
e_path
(
char
*
path
)
{
char
*
p
;
...
...
@@ -349,7 +271,7 @@ canonicalise_path(char *path)
#ifdef WIN32
if
(
*
p
==
'\\'
)
*
p
=
'/'
;
#endif
/* WIN32 */
#endif
}
if
(
p
!=
path
&&
*--
p
==
'/'
)
*
p
=
'\0'
;
...
...
@@ -361,7 +283,6 @@ canonicalise_path(char *path)
* This does most of what sed was used for in the shell script, but
* doesn't need any regexp stuff.
*/
static
char
**
replace_token
(
char
**
lines
,
char
*
token
,
char
*
replacement
)
{
...
...
@@ -372,7 +293,6 @@ replace_token(char **lines, char *token, char *replacement)
replen
,
diff
;
for
(
i
=
0
;
lines
[
i
];
i
++
)
numlines
++
;
...
...
@@ -431,9 +351,7 @@ readfile(char *path)
char
*
buffer
;
int
c
;
infile
=
fopen
(
path
,
"r"
);
if
(
!
infile
)
if
((
infile
=
fopen
(
path
,
"r"
))
==
NULL
)
{
fprintf
(
stderr
,
"could not read %s ... "
,
path
);
exit_nicely
();
...
...
@@ -491,8 +409,8 @@ writefile(char *path, char **lines)
FILE
*
out_file
;
char
**
line
;
out_file
=
fopen
(
path
,
PG_BINARY_W
)
;
if
(
out_file
==
NULL
)
;
if
(
(
out_file
=
fopen
(
path
,
PG_BINARY_W
))
==
NULL
)
{
fprintf
(
stderr
,
"could not write %s ... "
,
path
);
exit_nicely
();
...
...
@@ -515,9 +433,8 @@ writefile(char *path, char **lines)
* we also assume it isn't null.
*
*/
static
int
build_path
(
char
*
path
,
mode_t
omode
)
mkdir_p
(
char
*
path
,
mode_t
omode
)
{
struct
stat
sb
;
mode_t
numask
,
...
...
@@ -532,7 +449,6 @@ build_path(char *path, mode_t omode)
retval
=
0
;
#ifdef WIN32
/* skip network and drive specifiers for win32 */
if
(
strlen
(
p
)
>=
2
)
{
...
...
@@ -551,7 +467,7 @@ build_path(char *path, mode_t omode)
p
+=
2
;
}
}
#endif
/* WIN32 */
#endif
if
(
p
[
0
]
==
'/'
)
/* Skip leading '/'. */
++
p
;
...
...
@@ -614,7 +530,7 @@ build_path(char *path, mode_t omode)
}
if
(
!
first
&&
!
last
)
(
void
)
umask
(
oumask
);
return
(
retval
)
;
return
retval
;
}
/*
...
...
@@ -673,7 +589,7 @@ get_id(void)
progname
);
exit
(
1
);
}
#endif
/* __BEOS__ */
#endif
#else
/* the windows code */
...
...
@@ -687,7 +603,7 @@ get_id(void)
pw
->
pw_uid
=
1
;
GetUserName
(
pw
->
pw_name
,
&
pwname_size
);
#endif
/* ! WIN32 */
#endif
return
xstrdup
(
pw
->
pw_name
);
}
...
...
@@ -785,7 +701,7 @@ check_data_dir(void)
closedir
(
chkdir
);
return
(
empty
)
;
return
empty
;
}
/*
...
...
@@ -812,7 +728,7 @@ mkdatadir(char *subdir)
else
if
(
subdir
==
NULL
||
errno
!=
ENOENT
)
return
false
;
else
return
!
build_path
(
path
,
0700
);
return
!
mkdir_p
(
path
,
0700
);
}
...
...
@@ -853,7 +769,6 @@ check_input(char *path)
* don't overkill
*
*/
#define FIND_SUCCESS 0
#define FIND_NOT_FOUND 1
#define FIND_STAT_ERR 2
...
...
@@ -875,11 +790,9 @@ find_postgres(char *path)
char
line
[
100
];
#ifndef WIN32
int
permmask
=
S_IROTH
|
S_IXOTH
;
#endif
struct
stat
statbuf
;
FILE
*
pgver
;
int
plen
=
strlen
(
path
);
...
...
@@ -900,12 +813,13 @@ find_postgres(char *path)
return
FIND_NOT_REGFILE
;
#ifndef WIN32
/* on windows a .exe file should be executable - this is the unix test */
/*
* Only unix requires this test, on WIN32 an .exe file should be
* executable
*/
if
((
statbuf
.
st_mode
&
permmask
)
!=
permmask
)
return
FIND_BAD_PERM
;
#endif
/* ! WIN32 */
#endif
snprintf
(
cmd
,
MAXPGPATH
,
"
\"
%s/postgres
\"
-V 2>%s"
,
path
,
DEVNULL
);
...
...
@@ -913,11 +827,8 @@ find_postgres(char *path)
return
FIND_EXEC_ERR
;
if
(
fgets
(
line
,
sizeof
(
line
),
pgver
)
==
NULL
)
{
perror
(
"fgets failure"
);
}
pclose
(
pgver
);
if
(
strcmp
(
line
,
PG_VERSIONSTR
)
!=
0
)
...
...
@@ -926,14 +837,12 @@ find_postgres(char *path)
return
FIND_SUCCESS
;
}
#ifdef WIN32
/*
* Windows doesn't like relative paths to executables (other things work fine)
* so we call its builtin function to expand them. Elsewhere this is a NOOP
*
*/
#ifdef WIN32
static
char
*
expanded_path
(
char
*
path
)
{
...
...
@@ -944,10 +853,10 @@ expanded_path(char *path)
perror
(
"expanded path"
);
return
path
;
}
canonicali
s
e_path
(
abspath
);
canonicali
z
e_path
(
abspath
);
return
xstrdup
(
abspath
);
}
#endif
/* WIN32 */
#endif
/*
* set the paths pointing to postgres
...
...
@@ -992,7 +901,7 @@ set_paths(void)
}
else
{
canonicali
s
e_path
(
cursor
);
canonicali
z
e_path
(
cursor
);
pathbits
[
pathsegs
]
=
cursor
;
}
pathsegs
++
;
...
...
@@ -1024,7 +933,7 @@ set_paths(void)
char
*
cbindir
;
cbindir
=
xstrdup
(
bindir
);
canonicali
s
e_path
(
cbindir
);
canonicali
z
e_path
(
cbindir
);
res
=
find_postgres
(
expanded_path
(
cbindir
));
if
(
res
==
0
)
pgpath
=
expanded_path
(
cbindir
);
...
...
@@ -1078,63 +987,63 @@ set_null_conf(void)
}
/*
* check how many
buffers we can run with
* check how many
connections we can sustain
*
*/
static
void
test_
buffer
s
(
void
)
test_
connection
s
(
void
)
{
char
*
format
=
"
\"
%s/postgres
\"
-boot -x 0 -F "
"-c shared_buffers=%d -c max_connections=
5
template1 <%s >%s 2>&1"
;
"-c shared_buffers=%d -c max_connections=
%d
template1 <%s >%s 2>&1"
;
char
cmd
[
MAXPGPATH
];
int
bufs
[]
=
{
1000
,
900
,
800
,
700
,
600
,
500
,
400
,
300
,
200
,
100
,
50
};
int
len
=
sizeof
(
bufs
)
/
sizeof
(
int
);
int
conns
[]
=
{
100
,
50
,
40
,
30
,
20
,
10
};
int
len
=
sizeof
(
conns
)
/
sizeof
(
int
);
int
i
,
status
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
snprintf
(
cmd
,
sizeof
(
cmd
),
format
,
pgpath
,
bufs
[
i
],
DEVNULL
,
DEVNULL
);
snprintf
(
cmd
,
sizeof
(
cmd
),
format
,
pgpath
,
conns
[
i
]
*
5
,
conns
[
i
],
DEVNULL
,
DEVNULL
);
status
=
system
(
cmd
);
if
(
status
==
0
)
break
;
}
if
(
i
>=
len
)
i
=
len
-
1
;
n_
buffers
=
buf
s
[
i
];
printf
(
"
buffers set to %d
\n
"
,
n_buffer
s
);
n_
connections
=
conn
s
[
i
];
printf
(
"
connections set to %d
\n
"
,
n_connection
s
);
}
/*
* check how many
connections we can sustain
* check how many
buffers we can run with
*
*/
static
void
test_
connection
s
(
void
)
test_
buffer
s
(
void
)
{
char
*
format
=
"
\"
%s/postgres
\"
-boot -x 0 -F "
"-c shared_buffers=%d -c max_connections=%d template1 <%s >%s 2>&1"
;
char
cmd
[
MAXPGPATH
];
int
conns
[]
=
{
100
,
50
,
40
,
30
,
20
,
1
0
};
int
len
=
sizeof
(
conn
s
)
/
sizeof
(
int
);
int
bufs
[]
=
{
1000
,
900
,
800
,
700
,
600
,
500
,
400
,
300
,
200
,
100
,
5
0
};
int
len
=
sizeof
(
buf
s
)
/
sizeof
(
int
);
int
i
,
status
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
snprintf
(
cmd
,
sizeof
(
cmd
),
format
,
pgpath
,
n_buffers
,
conns
[
i
],
DEVNULL
,
DEVNULL
);
snprintf
(
cmd
,
sizeof
(
cmd
),
format
,
pgpath
,
bufs
[
i
],
n_connections
,
DEVNULL
,
DEVNULL
);
status
=
system
(
cmd
);
if
(
status
==
0
)
break
;
}
if
(
i
>=
len
)
i
=
len
-
1
;
n_
connections
=
conn
s
[
i
];
printf
(
"
connections set to %d
\n
"
,
n_connection
s
);
n_
buffers
=
buf
s
[
i
];
printf
(
"
buffers set to %d
\n
"
,
n_buffer
s
);
}
/*
...
...
@@ -1155,12 +1064,12 @@ setup_config(void)
conflines
=
readfile
(
conf_file
);
snprintf
(
repltok
,
sizeof
(
repltok
),
"shared_buffers = %d"
,
n_buffers
);
conflines
=
replace_token
(
conflines
,
"#shared_buffers = 1000"
,
repltok
);
snprintf
(
repltok
,
sizeof
(
repltok
),
"max_connections = %d"
,
n_connections
);
conflines
=
replace_token
(
conflines
,
"#max_connections = 100"
,
repltok
);
snprintf
(
repltok
,
sizeof
(
repltok
),
"shared_buffers = %d"
,
n_buffers
);
conflines
=
replace_token
(
conflines
,
"#shared_buffers = 1000"
,
repltok
);
snprintf
(
repltok
,
sizeof
(
repltok
),
"lc_messages = '%s'"
,
lc_messages
);
conflines
=
replace_token
(
conflines
,
"#lc_messages = 'C'"
,
repltok
);
...
...
@@ -1190,7 +1099,7 @@ setup_config(void)
conflines
=
replace_token
(
conflines
,
"host all all ::1"
,
"#host all all ::1"
);
#endif
/* ! HAVE_IPV6 */
#endif
snprintf
(
path
,
MAXPGPATH
,
"%s/pg_hba.conf"
,
pg_data
);
...
...
@@ -1211,7 +1120,6 @@ setup_config(void)
free
(
conflines
);
check_ok
();
}
...
...
@@ -1258,7 +1166,6 @@ bootstrap_template1(char *short_version)
* already called setlocale().
*
*/
snprintf
(
cmd
,
MAXPGPATH
,
"LC_COLLATE=%s"
,
lc_collate
);
putenv
(
xstrdup
(
cmd
));
...
...
@@ -1337,23 +1244,23 @@ setup_shadow(void)
*
*/
static
void
get_set_pw
(
void
)
get_set_pw
d
(
void
)
{
PG_CMD_DECL_NOLINE
;
char
*
pw1
,
*
pw2
;
char
pwpath
[
MAXPGPATH
];
char
*
pw
d
1
,
*
pw
d
2
;
char
pw
d
path
[
MAXPGPATH
];
struct
stat
statbuf
;
pw1
=
simple_prompt
(
"Enter new superuser password: "
,
100
,
false
);
pw2
=
simple_prompt
(
"Enter it again: "
,
100
,
false
);
if
(
strcmp
(
pw
1
,
pw
2
)
!=
0
)
pw
d
1
=
simple_prompt
(
"Enter new superuser password: "
,
100
,
false
);
pw
d
2
=
simple_prompt
(
"Enter it again: "
,
100
,
false
);
if
(
strcmp
(
pw
d1
,
pwd
2
)
!=
0
)
{
fprintf
(
stderr
,
"Passwords didn't match.
\n
"
);
exit_nicely
();
}
free
(
pw2
);
free
(
pw
d
2
);
printf
(
"storing the password ... "
);
...
...
@@ -1365,7 +1272,7 @@ get_set_pw(void)
PG_CMD_OPEN
;
if
(
fprintf
(
pg
,
"ALTER USER
\"
%s
\"
WITH PASSWORD '%s';
\n
"
,
username
,
pw1
)
<
0
)
pg
,
"ALTER USER
\"
%s
\"
WITH PASSWORD '%s';
\n
"
,
username
,
pw
d
1
)
<
0
)
{
/* write failure */
exit_nicely
();
...
...
@@ -1374,8 +1281,8 @@ get_set_pw(void)
PG_CMD_CLOSE
;
snprintf
(
pwpath
,
MAXPGPATH
,
"%s/global/pg_pwd"
,
pg_data
);
if
(
stat
(
pwpath
,
&
statbuf
)
!=
0
||
!
S_ISREG
(
statbuf
.
st_mode
))
snprintf
(
pw
d
path
,
MAXPGPATH
,
"%s/global/pg_pwd"
,
pg_data
);
if
(
stat
(
pw
d
path
,
&
statbuf
)
!=
0
||
!
S_ISREG
(
statbuf
.
st_mode
))
{
fprintf
(
stderr
,
"%s: The password file was not generated - "
...
...
@@ -1898,7 +1805,6 @@ make_template0(void)
* So this will need some testing on Windows.
*
*/
static
void
trapsig
(
int
signum
)
{
...
...
@@ -2009,7 +1915,7 @@ setlocales(void)
/* when not available, get the CTYPE setting */
lc_messages
=
xstrdup
(
setlocale
(
LC_CTYPE
,
NULL
));
}
#endif
/* LC_MESSAGES */
#endif
}
...
...
@@ -2017,7 +1923,6 @@ setlocales(void)
* help text data
*
*/
char
*
usage_text
[]
=
{
"$CMDNAME initializes a PostgreSQL database cluster.
\n
"
,
"
\n
"
,
...
...
@@ -2117,12 +2022,12 @@ main(int argc, char *argv[])
#if defined(__CYGWIN__) || defined(WIN32)
char
*
exe
;
/* location of exe suffix in progname */
#endif
/* defined(__CYGWIN__) || defined(WIN32) */
#endif
setlocale
(
LC_ALL
,
""
);
carg0
=
xstrdup
(
argv
[
0
]);
canonicali
s
e_path
(
carg0
);
canonicali
z
e_path
(
carg0
);
lastsep
=
strrchr
(
carg0
,
'/'
);
progname
=
lastsep
?
xstrdup
(
lastsep
+
1
)
:
carg0
;
...
...
@@ -2135,7 +2040,7 @@ main(int argc, char *argv[])
/* strip .exe suffix, regardless of case */
*
exe
=
'\0'
;
}
#endif
/* defined(__CYGWIN__) || defined(WIN32) */
#endif
if
(
lastsep
)
{
...
...
@@ -2253,7 +2158,7 @@ main(int argc, char *argv[])
}
}
canonicali
s
e_path
(
pg_data
);
canonicali
z
e_path
(
pg_data
);
/*
* we have to set PGDATA for postgres rather than pass it on the
...
...
@@ -2317,7 +2222,6 @@ main(int argc, char *argv[])
set_input
(
&
features_file
,
"sql_features.txt"
);
set_input
(
&
system_views_file
,
"system_views.sql"
);
if
(
show_setting
||
debug
)
{
fprintf
(
stderr
,
...
...
@@ -2335,11 +2239,9 @@ main(int argc, char *argv[])
hba_file
,
ident_file
);
}
if
(
show_setting
)
exit
(
0
);
check_input
(
bki_file
);
check_input
(
desc_file
);
check_input
(
hba_file
);
...
...
@@ -2388,17 +2290,16 @@ main(int argc, char *argv[])
/* some of these are not valid on Windows */
#ifdef SIGHUP
pqsignal
(
SIGHUP
,
trapsig
);
#endif
/* SIGHUP */
#endif
#ifdef SIGINT
pqsignal
(
SIGINT
,
trapsig
);
#endif
/* SIGINT */
#endif
#ifdef SIGQUIT
pqsignal
(
SIGQUIT
,
trapsig
);
#endif
/* SIGQUIT */
#endif
#ifdef SIGTERM
pqsignal
(
SIGTERM
,
trapsig
);
#endif
/* SIGTERM */
#endif
/* clear this we'll use it in a few lines */
errno
=
0
;
...
...
@@ -2420,7 +2321,6 @@ main(int argc, char *argv[])
* check_data_dir() called opendir - the errno should still be hanging
* around
*/
if
(
errno
==
ENOENT
)
{
printf
(
"creating directory
\"
%s
\"
... "
,
pg_data
);
...
...
@@ -2447,9 +2347,9 @@ main(int argc, char *argv[])
set_null_conf
();
test_buffers
();
/* test connections first because it has more constraints */
test_connections
();
test_buffers
();
setup_config
();
...
...
@@ -2458,9 +2358,8 @@ main(int argc, char *argv[])
set_short_version
(
short_version
,
"base/1"
);
setup_shadow
();
if
(
pwprompt
)
get_set_pw
();
get_set_pw
d
();
unlimit_systables
();
...
...
@@ -2480,14 +2379,12 @@ main(int argc, char *argv[])
make_template0
();
printf
(
"
\n
"
"Success. You can now start the database server using:
\n
"
"
\n
"
"
\"
%s/postmaster
\"
-D
\"
%s
\"\n
"
printf
(
"
\n
Success. You can now start the database server using:
\n\n
"
" %s%s%s/postmaster -D %s%s%s
\n
"
"or
\n
"
"
\"
%s/pg_ctl
\"
-D
\"
%s
\"
-l logfile start
\n
"
"
\n
"
,
pgpath
,
pg_data
,
pgpath
,
pg_data
);
"
%s%s%s/pg_ctl -D %s%s%s -l logfile start
\n\n
"
,
QUOTE_PATH
,
pgpath
,
QUOTE_PATH
,
QUOTE_PATH
,
pg_data
,
QUOTE_PATH
,
QUOTE_PATH
,
pgpath
,
QUOTE_PATH
,
QUOTE_PATH
,
pg_data
,
QUOTE_PATH
);
return
0
;
}
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