mirror of
https://github.com/postgres/postgres.git
synced 2025-11-24 00:23:06 +03:00
Version number now set in configure, available through Makefile.global
and config.h. Adjusted all referring code. Scrapped pg_version and changed initdb accordingly. Integrated src/utils/version.c into src/backend/utils/init/miscinit.c. Changed all callers. Set version number to `7.1devel'. (Non-numeric version suffixes now allowed.)
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Makefile--
|
||||
# Makefile for utils
|
||||
# Makefile for utils
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/utils/Attic/Makefile,v 1.7 2000/02/27 01:18:46 tgl Exp $
|
||||
# $Header: /cvsroot/pgsql/src/utils/Attic/Makefile,v 1.8 2000/07/02 15:21:27 petere Exp $
|
||||
#
|
||||
# About strdup: Some systems have strdup in their standard library, others
|
||||
# don't. Ones that don't will use this make file to compile the strdup.c
|
||||
@@ -19,24 +17,18 @@
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
SRCDIR = ..
|
||||
include $(SRCDIR)/Makefile.global
|
||||
subdir = src/utils
|
||||
top_builddir = ../..
|
||||
include ../Makefile.global
|
||||
|
||||
all: version.o
|
||||
all:
|
||||
|
||||
install:
|
||||
clean distclean maintainer-clean:
|
||||
rm -f dllinit.o getopt.o strdup.o
|
||||
|
||||
depend dep:
|
||||
$(CC) $(CFLAGS) -MM *.c >depend
|
||||
|
||||
clean:
|
||||
rm -f dllinit.o getopt.o strdup.o version.o
|
||||
|
||||
# Make sure version.o has proper dependency on version.h,
|
||||
# even if we didn't do make depend.
|
||||
version.o: version.c $(SRCDIR)/include/version.h
|
||||
|
||||
ifeq (depend,$(wildcard depend))
|
||||
include depend
|
||||
endif
|
||||
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* version.c
|
||||
* Routines to handle Postgres version number.
|
||||
*
|
||||
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/utils/Attic/version.c,v 1.17 2000/06/14 18:18:01 petere Exp $
|
||||
*
|
||||
* STANDALONE CODE - do not use error routines as this code is not linked
|
||||
* with any...
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include <sys/types.h>
|
||||
#include <sys/file.h>
|
||||
#include <fcntl.h> /* For open() flags */
|
||||
#include <sys/stat.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "postgres.h"
|
||||
|
||||
#include "storage/fd.h" /* for O_ */
|
||||
|
||||
#include "version.h"
|
||||
|
||||
|
||||
static void
|
||||
PathSetVersionFilePath(const char *path, char *filepathbuf)
|
||||
{
|
||||
/*----------------------------------------------------------------------------
|
||||
PathSetVersionFilePath
|
||||
|
||||
Destructively change "filepathbuf" to contain the concatenation of "path"
|
||||
and the name of the version file name.
|
||||
----------------------------------------------------------------------------*/
|
||||
if ((strlen(path) + 1 + strlen(PG_VERFILE)) >= MAXPGPATH)
|
||||
*filepathbuf = '\0';
|
||||
else
|
||||
sprintf(filepathbuf, "%s%c%s", path, SEP_CHAR, PG_VERFILE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
ValidatePgVersion(const char *path, char **reason_p)
|
||||
{
|
||||
/*----------------------------------------------------------------------------
|
||||
Determine whether the PG_VERSION file in directory <path> indicates
|
||||
a data version compatible with the version of this program.
|
||||
|
||||
If compatible, return <*reason_p> == NULL. Otherwise, malloc space,
|
||||
fill it with a text string explaining how it isn't compatible (or why
|
||||
we can't tell), and return a pointer to that space as <*reason_p>.
|
||||
-----------------------------------------------------------------------------*/
|
||||
int fd;
|
||||
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);
|
||||
|
||||
if ((fd = open(full_path, O_RDONLY | PG_BINARY, 0)) == -1)
|
||||
{
|
||||
*reason_p = malloc(100 + strlen(full_path));
|
||||
sprintf(*reason_p, "File '%s' does not exist or no read permission.", full_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
nread = read(fd, version, sizeof(version) - 1);
|
||||
if (nread < 4 ||
|
||||
!isdigit((int)version[0]) ||
|
||||
version[nread - 1] != '\n')
|
||||
{
|
||||
*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
|
||||
{
|
||||
version[nread] = '\0';
|
||||
if (strcmp(version, myversion) != 0)
|
||||
{
|
||||
*reason_p = malloc(200 + strlen(full_path));
|
||||
sprintf(*reason_p,
|
||||
"Version number in file '%s' should be %s, "
|
||||
"not %s.",
|
||||
full_path, myversion, version);
|
||||
}
|
||||
else
|
||||
*reason_p = NULL;
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
SetPgVersion(const char *path, char **reason_p)
|
||||
{
|
||||
/*---------------------------------------------------------------------------
|
||||
Create the PG_VERSION file in the directory <path>.
|
||||
|
||||
If we fail, allocate storage, fill it with a text string explaining why,
|
||||
and return a pointer to that storage as <*reason_p>. If we succeed,
|
||||
return *reason_p = NULL.
|
||||
---------------------------------------------------------------------------*/
|
||||
int fd;
|
||||
char version[32];
|
||||
char full_path[MAXPGPATH];
|
||||
|
||||
PathSetVersionFilePath(path, full_path);
|
||||
|
||||
sprintf(version, "%s.%s\n", PG_RELEASE, PG_VERSION);
|
||||
|
||||
fd = open(full_path, O_WRONLY | O_CREAT | O_EXCL | PG_BINARY, 0666);
|
||||
if (fd < 0)
|
||||
{
|
||||
*reason_p = malloc(100 + strlen(full_path));
|
||||
sprintf(*reason_p,
|
||||
"Unable to create file '%s', errno from open(): %s (%d).",
|
||||
full_path, strerror(errno), errno);
|
||||
}
|
||||
else
|
||||
{
|
||||
int rc; /* return code from some function we call */
|
||||
|
||||
rc = write(fd, version, strlen(version));
|
||||
if (rc != strlen(version))
|
||||
{
|
||||
*reason_p = malloc(100 + strlen(full_path));
|
||||
sprintf(*reason_p,
|
||||
"Failed to write to file '%s', after it was already "
|
||||
"open. Errno from write(): %s (%d)",
|
||||
full_path, strerror(errno), errno);
|
||||
}
|
||||
else
|
||||
*reason_p = NULL;
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user