pg_malloc-unified-v9.patch

text/x-patch

Filename: pg_malloc-unified-v9.patch
Type: text/x-patch
Part: 0
Message: [PATCH] Factor out pg_malloc and friends into port code

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
Series: patch v9
File+
contrib/oid2name/oid2name.c 0 50
contrib/pgbench/pgbench.c 0 52
contrib/pg_upgrade/pg_upgrade.h 0 4
contrib/pg_upgrade/util.c 0 49
src/bin/initdb/initdb.c 0 39
src/bin/pg_basebackup/streamutil.c 0 37
src/bin/pg_basebackup/streamutil.h 0 4
src/bin/pg_ctl/pg_ctl.c 0 38
src/bin/pg_dump/common.c 0 1
src/bin/pg_dump/compress_io.c 0 1
src/bin/pg_dump/dumpmem.c 0 76
src/bin/pg_dump/dumpmem.h 0 22
src/bin/pg_dump/Makefile 3 3
src/bin/pg_dump/nls.mk 1 1
src/bin/pg_dump/pg_backup_archiver.c 0 1
src/bin/pg_dump/pg_backup_custom.c 0 1
src/bin/pg_dump/pg_backup_db.c 0 1
src/bin/pg_dump/pg_backup_directory.c 0 1
src/bin/pg_dump/pg_backup_null.c 0 1
src/bin/pg_dump/pg_backup_tar.c 0 1
src/bin/pg_dump/pg_dumpall.c 0 1
src/bin/pg_dump/pg_dump.c 0 1
src/bin/pg_dump/pg_dump_sort.c 0 1
src/bin/pg_dump/pg_restore.c 0 1
src/bin/psql/common.c 0 50
src/bin/psql/common.h 0 9
src/bin/scripts/common.c 0 49
src/bin/scripts/common.h 0 4
src/include/port.h 11 0
src/port/Makefile 1 1
src/port/pgmalloc.c 96 0
diff -durpN postgresql.2/contrib/oid2name/oid2name.c postgresql.3/contrib/oid2name/oid2name.c
--- postgresql.2/contrib/oid2name/oid2name.c	2012-10-03 10:40:48.241207023 +0200
+++ postgresql.3/contrib/oid2name/oid2name.c	2013-01-02 13:40:08.483260103 +0100
@@ -50,9 +50,6 @@ struct options
 /* function prototypes */
 static void help(const char *progname);
 void		get_opts(int, char **, struct options *);
-void	   *pg_malloc(size_t size);
-void	   *pg_realloc(void *ptr, size_t size);
-char	   *pg_strdup(const char *str);
 void		add_one_elt(char *eltname, eary *eary);
 char	   *get_comma_elts(eary *eary);
 PGconn	   *sql_conn(struct options *);
@@ -201,53 +198,6 @@ help(const char *progname)
 		   progname, progname);
 }
 
-void *
-pg_malloc(size_t size)
-{
-	void	   *ptr;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	ptr = malloc(size);
-	if (!ptr)
-	{
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return ptr;
-}
-
-void *
-pg_realloc(void *ptr, size_t size)
-{
-	void	   *result;
-
-	/* Avoid unportable behavior of realloc(NULL, 0) */
-	if (ptr == NULL && size == 0)
-		size = 1;
-	result = realloc(ptr, size);
-	if (!result)
-	{
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return result;
-}
-
-char *
-pg_strdup(const char *str)
-{
-	char	   *result = strdup(str);
-
-	if (!result)
-	{
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return result;
-}
-
 /*
  * add_one_elt
  *
diff -durpN postgresql.2/contrib/pgbench/pgbench.c postgresql.3/contrib/pgbench/pgbench.c
--- postgresql.2/contrib/pgbench/pgbench.c	2013-01-02 09:19:03.655519614 +0100
+++ postgresql.3/contrib/pgbench/pgbench.c	2013-01-02 13:40:26.539378189 +0100
@@ -296,58 +296,6 @@ static void setalarm(int seconds);
 static void *threadRun(void *arg);
 
 
-/*
- * routines to check mem allocations and fail noisily.
- */
-static void *
-pg_malloc(size_t size)
-{
-	void	   *result;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	result = malloc(size);
-	if (!result)
-	{
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return result;
-}
-
-static void *
-pg_realloc(void *ptr, size_t size)
-{
-	void	   *result;
-
-	/* Avoid unportable behavior of realloc(NULL, 0) */
-	if (ptr == NULL && size == 0)
-		size = 1;
-	result = realloc(ptr, size);
-	if (!result)
-	{
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return result;
-}
-
-static char *
-pg_strdup(const char *s)
-{
-	char	   *result;
-
-	result = strdup(s);
-	if (!result)
-	{
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return result;
-}
-
-
 static void
 usage(void)
 {
diff -durpN postgresql.2/contrib/pg_upgrade/pg_upgrade.h postgresql.3/contrib/pg_upgrade/pg_upgrade.h
--- postgresql.2/contrib/pg_upgrade/pg_upgrade.h	2013-01-02 09:19:03.654519603 +0100
+++ postgresql.3/contrib/pg_upgrade/pg_upgrade.h	2013-01-02 12:47:14.578678309 +0100
@@ -438,10 +438,6 @@ void
 prep_status(const char *fmt,...)
 __attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));
 void		check_ok(void);
-char	   *pg_strdup(const char *s);
-void	   *pg_malloc(size_t size);
-void	   *pg_realloc(void *ptr, size_t size);
-void		pg_free(void *ptr);
 const char *getErrorText(int errNum);
 unsigned int str2uint(const char *str);
 void		pg_putenv(const char *var, const char *val);
diff -durpN postgresql.2/contrib/pg_upgrade/util.c postgresql.3/contrib/pg_upgrade/util.c
--- postgresql.2/contrib/pg_upgrade/util.c	2013-01-02 09:19:03.655519614 +0100
+++ postgresql.3/contrib/pg_upgrade/util.c	2013-01-02 12:47:14.579678318 +0100
@@ -213,55 +213,6 @@ get_user_info(char **user_name)
 }
 
 
-void *
-pg_malloc(size_t size)
-{
-	void	   *p;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	p = malloc(size);
-	if (p == NULL)
-		pg_log(PG_FATAL, "%s: out of memory\n", os_info.progname);
-	return p;
-}
-
-void *
-pg_realloc(void *ptr, size_t size)
-{
-	void	   *p;
-
-	/* Avoid unportable behavior of realloc(NULL, 0) */
-	if (ptr == NULL && size == 0)
-		size = 1;
-	p = realloc(ptr, size);
-	if (p == NULL)
-		pg_log(PG_FATAL, "%s: out of memory\n", os_info.progname);
-	return p;
-}
-
-
-void
-pg_free(void *ptr)
-{
-	if (ptr != NULL)
-		free(ptr);
-}
-
-
-char *
-pg_strdup(const char *s)
-{
-	char	   *result = strdup(s);
-
-	if (result == NULL)
-		pg_log(PG_FATAL, "%s: out of memory\n", os_info.progname);
-
-	return result;
-}
-
-
 /*
  * getErrorText()
  *
diff -durpN postgresql.2/src/bin/initdb/initdb.c postgresql.3/src/bin/initdb/initdb.c
--- postgresql.2/src/bin/initdb/initdb.c	2013-01-02 11:28:34.369505958 +0100
+++ postgresql.3/src/bin/initdb/initdb.c	2013-01-02 13:38:44.281677642 +0100
@@ -200,8 +200,6 @@ const char *subdirs[] = {
 static char bin_path[MAXPGPATH];
 static char backend_exec[MAXPGPATH];
 
-static void *pg_malloc(size_t size);
-static char *pg_strdup(const char *s);
 static char **replace_token(char **lines,
 			  const char *token, const char *replacement);
 
@@ -317,43 +315,6 @@ do { \
 #define DIR_SEP "\\"
 #endif
 
-/*
- * 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 *
-pg_malloc(size_t size)
-{
-	void	   *result;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	result = malloc(size);
-	if (!result)
-	{
-		fprintf(stderr, _("%s: out of memory\n"), progname);
-		exit(1);
-	}
-	return result;
-}
-
-static char *
-pg_strdup(const char *s)
-{
-	char	   *result;
-
-	result = strdup(s);
-	if (!result)
-	{
-		fprintf(stderr, _("%s: out of memory\n"), progname);
-		exit(1);
-	}
-	return result;
-}
-
 static char *
 escape_quotes(const char *src)
 {
diff -durpN postgresql.2/src/bin/pg_basebackup/streamutil.c postgresql.3/src/bin/pg_basebackup/streamutil.c
--- postgresql.2/src/bin/pg_basebackup/streamutil.c	2013-01-02 09:19:03.856521815 +0100
+++ postgresql.3/src/bin/pg_basebackup/streamutil.c	2013-01-02 12:57:57.401140484 +0100
@@ -26,43 +26,6 @@ static char *dbpassword = NULL;
 PGconn	   *conn = NULL;
 
 /*
- * strdup() and malloc() replacements that print an error and exit
- * if something goes wrong. Can never return NULL.
- */
-char *
-pg_strdup(const char *s)
-{
-	char	   *result;
-
-	result = strdup(s);
-	if (!result)
-	{
-		fprintf(stderr, _("%s: out of memory\n"), progname);
-		exit(1);
-	}
-	return result;
-}
-
-void *
-pg_malloc0(size_t size)
-{
-	void	   *result;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	result = malloc(size);
-	if (!result)
-	{
-		fprintf(stderr, _("%s: out of memory\n"), progname);
-		exit(1);
-	}
-	MemSet(result, 0, size);
-	return result;
-}
-
-
-/*
  * Connect to the server. Returns a valid PGconn pointer if connected,
  * or NULL on non-permanent error. On permanent error, the function will
  * call exit(1) directly.
diff -durpN postgresql.2/src/bin/pg_basebackup/streamutil.h postgresql.3/src/bin/pg_basebackup/streamutil.h
--- postgresql.2/src/bin/pg_basebackup/streamutil.h	2012-10-03 10:40:48.299207401 +0200
+++ postgresql.3/src/bin/pg_basebackup/streamutil.h	2013-01-02 13:34:42.760112017 +0100
@@ -15,8 +15,4 @@ extern PGconn *conn;
 	exit(code);									\
 	}
 
-
-extern char *pg_strdup(const char *s);
-extern void *pg_malloc0(size_t size);
-
 extern PGconn *GetConnection(void);
diff -durpN postgresql.2/src/bin/pg_ctl/pg_ctl.c postgresql.3/src/bin/pg_ctl/pg_ctl.c
--- postgresql.2/src/bin/pg_ctl/pg_ctl.c	2013-01-02 09:19:03.857521826 +0100
+++ postgresql.3/src/bin/pg_ctl/pg_ctl.c	2013-01-02 13:36:01.760623946 +0100
@@ -118,8 +118,6 @@ write_stderr(const char *fmt,...)
 /* This extension allows gcc to check the format string for consistency with
    the supplied arguments. */
 __attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));
-static void *pg_malloc(size_t size);
-static char *pg_strdup(const char *s);
 static void do_advice(void);
 static void do_help(void);
 static void set_mode(char *modeopt);
@@ -226,42 +224,6 @@ write_stderr(const char *fmt,...)
 }
 
 /*
- * routines to check memory allocations and fail noisily.
- */
-
-static void *
-pg_malloc(size_t size)
-{
-	void	   *result;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	result = malloc(size);
-	if (!result)
-	{
-		write_stderr(_("%s: out of memory\n"), progname);
-		exit(1);
-	}
-	return result;
-}
-
-
-static char *
-pg_strdup(const char *s)
-{
-	char	   *result;
-
-	result = strdup(s);
-	if (!result)
-	{
-		write_stderr(_("%s: out of memory\n"), progname);
-		exit(1);
-	}
-	return result;
-}
-
-/*
  * Given an already-localized string, print it to stdout unless the
  * user has specified that no messages should be printed.
  */
diff -durpN postgresql.2/src/bin/pg_dump/common.c postgresql.3/src/bin/pg_dump/common.c
--- postgresql.2/src/bin/pg_dump/common.c	2013-01-02 09:19:03.857521826 +0100
+++ postgresql.3/src/bin/pg_dump/common.c	2013-01-02 12:47:14.587678379 +0100
@@ -18,7 +18,6 @@
 #include <ctype.h>
 
 #include "catalog/pg_class.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 
diff -durpN postgresql.2/src/bin/pg_dump/compress_io.c postgresql.3/src/bin/pg_dump/compress_io.c
--- postgresql.2/src/bin/pg_dump/compress_io.c	2013-01-02 09:19:03.857521826 +0100
+++ postgresql.3/src/bin/pg_dump/compress_io.c	2013-01-02 12:47:14.587678379 +0100
@@ -53,7 +53,6 @@
  */
 
 #include "compress_io.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 /*----------------------
diff -durpN postgresql.2/src/bin/pg_dump/dumpmem.c postgresql.3/src/bin/pg_dump/dumpmem.c
--- postgresql.2/src/bin/pg_dump/dumpmem.c	2013-01-02 09:19:03.857521826 +0100
+++ postgresql.3/src/bin/pg_dump/dumpmem.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,76 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * dumpmem.c
- *	  Memory allocation routines used by pg_dump, pg_dumpall, and pg_restore
- *
- * Portions Copyright (c) 1996-2013, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *	  src/bin/pg_dump/dumpmem.c
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres_fe.h"
-
-#include "dumputils.h"
-#include "dumpmem.h"
-
-
-/*
- * Safer versions of some standard C library functions. If an
- * out-of-memory condition occurs, these functions will bail out via exit();
- *therefore, their return value is guaranteed to be non-NULL.
- */
-
-char *
-pg_strdup(const char *string)
-{
-	char	   *tmp;
-
-	if (!string)
-		exit_horribly(NULL, "cannot duplicate null pointer\n");
-	tmp = strdup(string);
-	if (!tmp)
-		exit_horribly(NULL, "out of memory\n");
-	return tmp;
-}
-
-void *
-pg_malloc(size_t size)
-{
-	void	   *tmp;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	tmp = malloc(size);
-	if (!tmp)
-		exit_horribly(NULL, "out of memory\n");
-	return tmp;
-}
-
-void *
-pg_malloc0(size_t size)
-{
-	void	   *tmp;
-
-	tmp = pg_malloc(size);
-	MemSet(tmp, 0, size);
-	return tmp;
-}
-
-void *
-pg_realloc(void *ptr, size_t size)
-{
-	void	   *tmp;
-
-	/* Avoid unportable behavior of realloc(NULL, 0) */
-	if (ptr == NULL && size == 0)
-		size = 1;
-	tmp = realloc(ptr, size);
-	if (!tmp)
-		exit_horribly(NULL, "out of memory\n");
-	return tmp;
-}
diff -durpN postgresql.2/src/bin/pg_dump/dumpmem.h postgresql.3/src/bin/pg_dump/dumpmem.h
--- postgresql.2/src/bin/pg_dump/dumpmem.h	2013-01-02 09:19:03.857521826 +0100
+++ postgresql.3/src/bin/pg_dump/dumpmem.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * dumpmem.h
- *	  Memory allocation routines used by pg_dump, pg_dumpall, and pg_restore
- *
- * Portions Copyright (c) 1996-2013, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/bin/pg_dump/dumpmem.h
- *
- *-------------------------------------------------------------------------
- */
-
-#ifndef DUMPMEM_H
-#define DUMPMEM_H
-
-extern char *pg_strdup(const char *string);
-extern void *pg_malloc(size_t size);
-extern void *pg_malloc0(size_t size);
-extern void *pg_realloc(void *ptr, size_t size);
-
-#endif   /* DUMPMEM_H */
diff -durpN postgresql.2/src/bin/pg_dump/Makefile postgresql.3/src/bin/pg_dump/Makefile
--- postgresql.2/src/bin/pg_dump/Makefile	2013-01-02 09:19:03.857521826 +0100
+++ postgresql.3/src/bin/pg_dump/Makefile	2013-01-02 12:47:21.267724965 +0100
@@ -20,7 +20,7 @@ override CPPFLAGS := -I$(libpq_srcdir) $
 
 OBJS=	pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o \
 	pg_backup_null.o pg_backup_tar.o \
-	pg_backup_directory.o dumpmem.o dumputils.o compress_io.o $(WIN32RES)
+	pg_backup_directory.o dumputils.o compress_io.o $(WIN32RES)
 
 KEYWRDOBJS = keywords.o kwlookup.o
 
@@ -35,8 +35,8 @@ pg_dump: pg_dump.o common.o pg_dump_sort
 pg_restore: pg_restore.o $(OBJS) $(KEYWRDOBJS) | submake-libpq submake-libpgport
 	$(CC) $(CFLAGS) pg_restore.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
 
-pg_dumpall: pg_dumpall.o dumputils.o dumpmem.o $(KEYWRDOBJS) | submake-libpq submake-libpgport
-	$(CC) $(CFLAGS) pg_dumpall.o dumputils.o dumpmem.o $(KEYWRDOBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+pg_dumpall: pg_dumpall.o dumputils.o $(KEYWRDOBJS) | submake-libpq submake-libpgport
+	$(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(KEYWRDOBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
 
 install: all installdirs
 	$(INSTALL_PROGRAM) pg_dump$(X) '$(DESTDIR)$(bindir)'/pg_dump$(X)
diff -durpN postgresql.2/src/bin/pg_dump/nls.mk postgresql.3/src/bin/pg_dump/nls.mk
--- postgresql.2/src/bin/pg_dump/nls.mk	2012-04-16 19:57:22.596917323 +0200
+++ postgresql.3/src/bin/pg_dump/nls.mk	2013-01-02 12:47:21.268724970 +0100
@@ -3,7 +3,7 @@ CATALOG_NAME     = pg_dump
 AVAIL_LANGUAGES  = de es fr it ja ko pt_BR sv tr zh_CN zh_TW
 GETTEXT_FILES    = pg_backup_archiver.c pg_backup_db.c pg_backup_custom.c \
                    pg_backup_null.c pg_backup_tar.c \
-                   pg_backup_directory.c dumpmem.c dumputils.c compress_io.c \
+                   pg_backup_directory.c dumputils.c compress_io.c \
                    pg_dump.c common.c pg_dump_sort.c \
                    pg_restore.c pg_dumpall.c \
                    ../../port/exec.c
diff -durpN postgresql.2/src/bin/pg_dump/pg_backup_archiver.c postgresql.3/src/bin/pg_dump/pg_backup_archiver.c
--- postgresql.2/src/bin/pg_dump/pg_backup_archiver.c	2012-10-21 10:56:15.398945610 +0200
+++ postgresql.3/src/bin/pg_dump/pg_backup_archiver.c	2013-01-02 12:47:21.270724967 +0100
@@ -21,7 +21,6 @@
  */
 
 #include "pg_backup_db.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 #include <ctype.h>
diff -durpN postgresql.2/src/bin/pg_dump/pg_backup_custom.c postgresql.3/src/bin/pg_dump/pg_backup_custom.c
--- postgresql.2/src/bin/pg_dump/pg_backup_custom.c	2012-10-03 10:40:48.303207429 +0200
+++ postgresql.3/src/bin/pg_dump/pg_backup_custom.c	2013-01-02 12:47:21.270724967 +0100
@@ -26,7 +26,6 @@
 
 #include "compress_io.h"
 #include "dumputils.h"
-#include "dumpmem.h"
 
 /*--------
  * Routines in the format interface
diff -durpN postgresql.2/src/bin/pg_dump/pg_backup_db.c postgresql.3/src/bin/pg_dump/pg_backup_db.c
--- postgresql.2/src/bin/pg_dump/pg_backup_db.c	2012-07-25 10:51:14.973507544 +0200
+++ postgresql.3/src/bin/pg_dump/pg_backup_db.c	2013-01-02 12:47:21.271724969 +0100
@@ -11,7 +11,6 @@
  */
 
 #include "pg_backup_db.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 #include <unistd.h>
diff -durpN postgresql.2/src/bin/pg_dump/pg_backup_directory.c postgresql.3/src/bin/pg_dump/pg_backup_directory.c
--- postgresql.2/src/bin/pg_dump/pg_backup_directory.c	2013-01-02 09:19:03.858521837 +0100
+++ postgresql.3/src/bin/pg_dump/pg_backup_directory.c	2013-01-02 12:47:21.272724974 +0100
@@ -34,7 +34,6 @@
  */
 
 #include "compress_io.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 #include <dirent.h>
diff -durpN postgresql.2/src/bin/pg_dump/pg_backup_null.c postgresql.3/src/bin/pg_dump/pg_backup_null.c
--- postgresql.2/src/bin/pg_dump/pg_backup_null.c	2012-04-16 19:57:22.598917347 +0200
+++ postgresql.3/src/bin/pg_dump/pg_backup_null.c	2013-01-02 12:47:21.272724974 +0100
@@ -23,7 +23,6 @@
  */
 
 #include "pg_backup_archiver.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 #include <unistd.h>				/* for dup */
diff -durpN postgresql.2/src/bin/pg_dump/pg_backup_tar.c postgresql.3/src/bin/pg_dump/pg_backup_tar.c
--- postgresql.2/src/bin/pg_dump/pg_backup_tar.c	2013-01-02 09:19:03.858521837 +0100
+++ postgresql.3/src/bin/pg_dump/pg_backup_tar.c	2013-01-02 12:47:21.273724983 +0100
@@ -28,7 +28,6 @@
 #include "pg_backup.h"
 #include "pg_backup_archiver.h"
 #include "pg_backup_tar.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 #include <sys/stat.h>
diff -durpN postgresql.2/src/bin/pg_dump/pg_dumpall.c postgresql.3/src/bin/pg_dump/pg_dumpall.c
--- postgresql.2/src/bin/pg_dump/pg_dumpall.c	2013-01-02 09:19:03.861521870 +0100
+++ postgresql.3/src/bin/pg_dump/pg_dumpall.c	2013-01-02 12:47:21.273724983 +0100
@@ -23,7 +23,6 @@
 #include "getopt_long.h"
 
 #include "dumputils.h"
-#include "dumpmem.h"
 #include "pg_backup.h"
 
 /* version string we expect back from pg_dump */
diff -durpN postgresql.2/src/bin/pg_dump/pg_dump.c postgresql.3/src/bin/pg_dump/pg_dump.c
--- postgresql.2/src/bin/pg_dump/pg_dump.c	2013-01-02 09:19:03.861521870 +0100
+++ postgresql.3/src/bin/pg_dump/pg_dump.c	2013-01-02 12:47:21.276725015 +0100
@@ -59,7 +59,6 @@
 
 #include "pg_backup_archiver.h"
 #include "pg_backup_db.h"
-#include "dumpmem.h"
 #include "dumputils.h"
 
 extern char *optarg;
diff -durpN postgresql.2/src/bin/pg_dump/pg_dump_sort.c postgresql.3/src/bin/pg_dump/pg_dump_sort.c
--- postgresql.2/src/bin/pg_dump/pg_dump_sort.c	2013-01-02 09:19:03.861521870 +0100
+++ postgresql.3/src/bin/pg_dump/pg_dump_sort.c	2013-01-02 12:47:21.276725015 +0100
@@ -15,7 +15,6 @@
  */
 #include "pg_backup_archiver.h"
 #include "dumputils.h"
-#include "dumpmem.h"
 
 /* translator: this is a module name */
 static const char *modulename = gettext_noop("sorter");
diff -durpN postgresql.2/src/bin/pg_dump/pg_restore.c postgresql.3/src/bin/pg_dump/pg_restore.c
--- postgresql.2/src/bin/pg_dump/pg_restore.c	2012-10-14 11:09:08.143146185 +0200
+++ postgresql.3/src/bin/pg_dump/pg_restore.c	2013-01-02 12:47:21.277725022 +0100
@@ -41,7 +41,6 @@
 
 #include "pg_backup_archiver.h"
 
-#include "dumpmem.h"
 #include "dumputils.h"
 
 #include <ctype.h>
diff -durpN postgresql.2/src/bin/psql/common.c postgresql.3/src/bin/psql/common.c
--- postgresql.2/src/bin/psql/common.c	2013-01-02 09:19:03.863521892 +0100
+++ postgresql.3/src/bin/psql/common.c	2013-01-02 12:47:21.278725029 +0100
@@ -33,56 +33,6 @@ static bool command_no_begin(const char
 static bool is_select_command(const char *query);
 
 /*
- * "Safe" wrapper around strdup()
- */
-char *
-pg_strdup(const char *string)
-{
-	char	   *tmp;
-
-	if (!string)
-	{
-		psql_error("%s: pg_strdup: cannot duplicate null pointer (internal error)\n",
-				pset.progname);
-		exit(EXIT_FAILURE);
-	}
-	tmp = strdup(string);
-	if (!tmp)
-	{
-		psql_error("out of memory\n");
-		exit(EXIT_FAILURE);
-	}
-	return tmp;
-}
-
-void *
-pg_malloc(size_t size)
-{
-	void	   *tmp;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	tmp = malloc(size);
-	if (!tmp)
-	{
-		psql_error("out of memory\n");
-		exit(EXIT_FAILURE);
-	}
-	return tmp;
-}
-
-void *
-pg_malloc0(size_t size)
-{
-	void	   *tmp;
-
-	tmp = pg_malloc(size);
-	MemSet(tmp, 0, size);
-	return tmp;
-}
-
-/*
  * setQFout
  * -- handler for -o command line option and \o command
  *
diff -durpN postgresql.2/src/bin/psql/common.h postgresql.3/src/bin/psql/common.h
--- postgresql.2/src/bin/psql/common.h	2013-01-02 09:19:03.863521892 +0100
+++ postgresql.3/src/bin/psql/common.h	2013-01-02 12:47:21.279725035 +0100
@@ -14,15 +14,6 @@
 
 #define atooid(x)  ((Oid) strtoul((x), NULL, 10))
 
-/*
- * Safer versions of some standard C library functions. If an
- * out-of-memory condition occurs, these functions will bail out
- * safely; therefore, their return value is guaranteed to be non-NULL.
- */
-extern char *pg_strdup(const char *string);
-extern void *pg_malloc(size_t size);
-extern void *pg_malloc0(size_t size);
-
 extern bool setQFout(const char *fname);
 
 extern void
diff -durpN postgresql.2/src/bin/scripts/common.c postgresql.3/src/bin/scripts/common.c
--- postgresql.2/src/bin/scripts/common.c	2013-01-02 09:19:03.871521980 +0100
+++ postgresql.3/src/bin/scripts/common.c	2013-01-02 13:36:57.808986089 +0100
@@ -278,55 +278,6 @@ executeMaintenanceCommand(PGconn *conn,
 }
 
 /*
- * "Safe" wrapper around strdup().	Pulled from psql/common.c
- */
-char *
-pg_strdup(const char *string)
-{
-	char	   *tmp;
-
-	if (!string)
-	{
-		fprintf(stderr, _("pg_strdup: cannot duplicate null pointer (internal error)\n"));
-		exit(EXIT_FAILURE);
-	}
-	tmp = strdup(string);
-	if (!tmp)
-	{
-		fprintf(stderr, _("out of memory\n"));
-		exit(EXIT_FAILURE);
-	}
-	return tmp;
-}
-
-void *
-pg_malloc(size_t size)
-{
-	void	   *tmp;
-
-	/* Avoid unportable behavior of malloc(0) */
-	if (size == 0)
-		size = 1;
-	tmp = malloc(size);
-	if (!tmp)
-	{
-		fprintf(stderr, _("out of memory\n"));
-		exit(EXIT_FAILURE);
-	}
-	return tmp;
-}
-
-void *
-pg_malloc0(size_t size)
-{
-	void	   *tmp;
-
-	tmp = pg_malloc(size);
-	MemSet(tmp, 0, size);
-	return tmp;
-}
-
-/*
  * Check yes/no answer in a localized way.	1=yes, 0=no, -1=neither.
  */
 
diff -durpN postgresql.2/src/bin/scripts/common.h postgresql.3/src/bin/scripts/common.h
--- postgresql.2/src/bin/scripts/common.h	2013-01-02 09:19:03.871521980 +0100
+++ postgresql.3/src/bin/scripts/common.h	2013-01-02 13:36:44.504900390 +0100
@@ -50,8 +50,4 @@ extern bool yesno_prompt(const char *que
 
 extern void setup_cancel_handler(void);
 
-extern char *pg_strdup(const char *string);
-extern void *pg_malloc(size_t size);
-extern void *pg_malloc0(size_t size);
-
 #endif   /* COMMON_H */
diff -durpN postgresql.2/src/include/port.h postgresql.3/src/include/port.h
--- postgresql.2/src/include/port.h	2013-01-02 11:28:47.256587185 +0100
+++ postgresql.3/src/include/port.h	2013-01-02 13:49:38.686060590 +0100
@@ -462,6 +462,17 @@ extern char *inet_net_ntop(int af, const
 /* port/pgcheckdir.c */
 extern int	pg_check_dir(const char *dir);
 
+/* port/pgmalloc.c */
+extern char *pg_strdup(const char *string);
+
+extern void *pg_malloc(size_t size);
+
+extern void *pg_malloc0(size_t size);
+
+extern void *pg_realloc(void *ptr, size_t size);
+
+extern void pg_free(void *ptr);
+
 /* port/pgmkdirp.c */
 extern int	pg_mkdir_p(char *path, int omode);
 
diff -durpN postgresql.2/src/port/Makefile postgresql.3/src/port/Makefile
--- postgresql.2/src/port/Makefile	2013-01-02 10:43:57.358410221 +0100
+++ postgresql.3/src/port/Makefile	2013-01-02 12:48:18.788120056 +0100
@@ -31,7 +31,7 @@ override CPPFLAGS := -I$(top_builddir)/s
 LIBS += $(PTHREAD_LIBS)
 
 OBJS = $(LIBOBJS) chklocale.o dirmod.o erand48.o exec.o fls.o inet_net_ntop.o \
-	noblock.o path.o pgcheckdir.o pg_crc.o pgmkdirp.o pgsleep.o \
+	noblock.o path.o pgcheckdir.o pg_crc.o pgmalloc.o pgmkdirp.o pgsleep.o \
 	pgstrcasecmp.o quotes.o qsort.o qsort_arg.o sprompt.o tar.o thread.o
 
 # foo_srv.o and foo.o are both built from foo.c, but only foo.o has -DFRONTEND
diff -durpN postgresql.2/src/port/pgmalloc.c postgresql.3/src/port/pgmalloc.c
--- postgresql.2/src/port/pgmalloc.c	1970-01-01 01:00:00.000000000 +0100
+++ postgresql.3/src/port/pgmalloc.c	2013-01-02 12:51:05.238252844 +0100
@@ -0,0 +1,96 @@
+/*-------------------------------------------------------------------------
+ *
+ * pgmalloc.c
+ *		Functions for allocating memory and
+ *		exiting on out-of-memory
+ *
+ *
+ * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ *	  src/port/pgmalloc.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef FRONTEND
+#include "postgres_fe.h"
+
+#include <stdio.h>
+
+/*
+ * "Safe" wrapper around strdup()
+ */
+char *
+pg_strdup(const char *string)
+{
+	char	   *tmp;
+
+	if (!string)
+	{
+		fprintf(stderr, "pg_strdup: cannot duplicate null pointer (internal error)\n");
+		exit(1);
+	}
+	tmp = strdup(string);
+	if (!tmp)
+	{
+		fprintf(stderr, "pg_strdup: out of memory\n");
+		exit(1);
+	}
+	return tmp;
+}
+
+void *
+pg_malloc(size_t size)
+{
+	void	   *tmp;
+
+	/* Avoid unportable behavior of malloc(0) */
+	if (size == 0)
+		size = 1;
+	tmp = malloc(size);
+	if (!tmp)
+	{
+		fprintf(stderr, "pg_malloc: out of memory\n");
+		exit(1);
+	}
+	return tmp;
+}
+
+void *
+pg_malloc0(size_t size)
+{
+	void	   *tmp;
+
+	tmp = pg_malloc(size);
+	MemSet(tmp, 0, size);
+	return tmp;
+}
+
+void *
+pg_realloc(void *ptr, size_t size)
+{
+	void	   *tmp;
+
+	/* Avoid unportable behavior of realloc(NULL, 0) */
+	if (ptr == NULL && size == 0)
+		size = 1;
+	tmp = realloc(ptr, size);
+	if (!tmp)
+	{
+		fprintf(stderr, "pg_realloc: out of memory\n");
+		exit(1);
+	}
+	return tmp;
+}
+
+void
+pg_free(void *ptr)
+{
+	if (ptr != NULL) 
+		free(ptr);
+}
+
+#endif