aboutsummaryrefslogtreecommitdiff
path: root/src/utils/version.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/version.c')
-rw-r--r--src/utils/version.c61
1 files changed, 28 insertions, 33 deletions
diff --git a/src/utils/version.c b/src/utils/version.c
index 2284093eab8..092f055d53f 100644
--- a/src/utils/version.c
+++ b/src/utils/version.c
@@ -7,14 +7,10 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/utils/Attic/version.c,v 1.12 1999/07/17 20:18:55 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/utils/Attic/version.c,v 1.13 1999/10/25 03:08:03 tgl Exp $
*
- * NOTES
- * XXX eventually, should be able to handle version identifiers
- * of length != 4.
- *
- * STANDALONE CODE - do not use error routines as this code is linked with
- * stuff that does not cinterface.a
+ * STANDALONE CODE - do not use error routines as this code is not linked
+ * with any...
*-------------------------------------------------------------------------
*/
#include <sys/types.h>
@@ -41,7 +37,7 @@ PathSetVersionFilePath(const char *path, char *filepathbuf)
Destructively change "filepathbuf" to contain the concatenation of "path"
and the name of the version file name.
----------------------------------------------------------------------------*/
- if (strlen(path) > (MAXPGPATH - sizeof(PG_VERFILE) - 1))
+ if ((strlen(path) + 1 + strlen(PG_VERFILE)) >= MAXPGPATH)
*filepathbuf = '\0';
else
sprintf(filepathbuf, "%s%c%s", path, SEP_CHAR, PG_VERFILE);
@@ -61,44 +57,45 @@ ValidatePgVersion(const char *path, char **reason_p)
we can't tell), and return a pointer to that space as <*reason_p>.
-----------------------------------------------------------------------------*/
int fd;
- char version[4];
- char full_path[MAXPGPATH + 1];
+ int nread;
+ char myversion[32];
+ char version[32];
+ char full_path[MAXPGPATH];
PathSetVersionFilePath(path, full_path);
+ sprintf(myversion, "%s.%s\n", PG_RELEASE, PG_VERSION);
+
#ifndef __CYGWIN32__
if ((fd = open(full_path, O_RDONLY, 0)) == -1)
#else
if ((fd = open(full_path, O_RDONLY | O_BINARY, 0)) == -1)
#endif
{
- *reason_p = malloc(200);
+ *reason_p = malloc(100 + strlen(full_path));
sprintf(*reason_p, "File '%s' does not exist or no read permission.", full_path);
}
else
{
- if (read(fd, version, 4) < 4 ||
- !isascii(version[0]) || !isdigit(version[0]) ||
- version[1] != '.' ||
- !isascii(version[2]) || !isdigit(version[2]) ||
- version[3] != '\n')
+ nread = read(fd, version, sizeof(version)-1);
+ if (nread < 4 ||
+ !isdigit(version[0]) ||
+ version[nread-1] != '\n')
{
-
- *reason_p = malloc(200);
+ *reason_p = malloc(100 + strlen(full_path));
sprintf(*reason_p, "File '%s' does not have a valid format "
"for a PG_VERSION file.", full_path);
}
else
{
- if (version[2] != PG_VERSION[0] ||
- version[0] != PG_RELEASE[0])
+ version[nread] = '\0';
+ if (strcmp(version, myversion) != 0)
{
- *reason_p = malloc(200);
+ *reason_p = malloc(200 + strlen(full_path));
sprintf(*reason_p,
- "Version number in file '%s' should be %s.%s, "
- "not %c.%c.",
- full_path,
- PG_RELEASE, PG_VERSION, version[0], version[2]);
+ "Version number in file '%s' should be %s, "
+ "not %s.",
+ full_path, myversion, version);
}
else
*reason_p = NULL;
@@ -120,11 +117,13 @@ SetPgVersion(const char *path, char **reason_p)
return *reason_p = NULL.
---------------------------------------------------------------------------*/
int fd;
- char version[4];
- char full_path[MAXPGPATH + 1];
+ char version[32];
+ char full_path[MAXPGPATH];
PathSetVersionFilePath(path, full_path);
+ sprintf(version, "%s.%s\n", PG_RELEASE, PG_VERSION);
+
#ifndef __CYGWIN32__
fd = open(full_path, O_WRONLY | O_CREAT | O_EXCL, 0666);
#else
@@ -141,12 +140,8 @@ SetPgVersion(const char *path, char **reason_p)
{
int rc; /* return code from some function we call */
- version[0] = PG_RELEASE[0];
- version[1] = '.';
- version[2] = PG_VERSION[0];
- version[3] = '\n';
- rc = write(fd, version, 4);
- if (rc != 4)
+ rc = write(fd, version, strlen(version));
+ if (rc != strlen(version))
{
*reason_p = malloc(100 + strlen(full_path));
sprintf(*reason_p,