aboutsummaryrefslogtreecommitdiff
path: root/src/bin/psql/print.c
diff options
context:
space:
mode:
authorNeil Conway <neilc@samurai.com>2004-01-24 19:38:49 +0000
committerNeil Conway <neilc@samurai.com>2004-01-24 19:38:49 +0000
commit610d33c1949005e9658863441f31083f9f3ceb9b (patch)
tree861eb9dfec8dc43b4f5716f48aa52d4468128a90 /src/bin/psql/print.c
parentcb3dc829f639801219aab4ec35e53ef924ce75c5 (diff)
downloadpostgresql-610d33c1949005e9658863441f31083f9f3ceb9b.tar.gz
postgresql-610d33c1949005e9658863441f31083f9f3ceb9b.zip
This patch makes some of the memory manipulation performed by psql a
little more sane. Some parts of the code was using a static function xmalloc() that did safe memory allocation (where "safe" means "bail out on OOM"), but most of it was just invoking calloc() or malloc() directly. Now almost everything invokes xmalloc() or xcalloc().
Diffstat (limited to 'src/bin/psql/print.c')
-rw-r--r--src/bin/psql/print.c91
1 files changed, 14 insertions, 77 deletions
diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
index 890b2efd5a8..6f8b3ede0bd 100644
--- a/src/bin/psql/print.c
+++ b/src/bin/psql/print.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2003, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.44 2003/11/29 19:52:07 pgsql Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.45 2004/01/24 19:38:49 neilc Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@@ -224,19 +224,8 @@ print_aligned_text(const char *title, const char *const * headers,
if (col_count > 0)
{
- widths = calloc(col_count, sizeof(*widths));
- if (!widths)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
-
- head_w = calloc(col_count, sizeof(*head_w));
- if (!head_w)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ widths = xcalloc(col_count, sizeof(*widths));
+ head_w = xcalloc(col_count, sizeof(*head_w));
}
else
{
@@ -250,12 +239,7 @@ print_aligned_text(const char *title, const char *const * headers,
if (cell_count > 0)
{
- cell_w = calloc(cell_count, sizeof(*cell_w));
- if (!cell_w)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ cell_w = xcalloc(cell_count, sizeof(*cell_w));
}
else
cell_w = NULL;
@@ -427,12 +411,7 @@ print_aligned_vertical(const char *title, const char *const * headers,
col_count++;
if (col_count > 0)
{
- head_w = calloc(col_count, sizeof(*head_w));
- if (!head_w)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ head_w = xcalloc(col_count, sizeof(*head_w));
}
else
head_w = NULL;
@@ -451,12 +430,7 @@ print_aligned_vertical(const char *title, const char *const * headers,
if (cell_count > 0)
{
- cell_w = calloc(cell_count, sizeof(*cell_w));
- if (!cell_w)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ cell_w = xcalloc(cell_count, sizeof(*cell_w));
}
else
cell_w = NULL;
@@ -475,12 +449,7 @@ print_aligned_vertical(const char *title, const char *const * headers,
fprintf(fout, "%s\n", title);
/* make horizontal border */
- divider = malloc(hwidth + dwidth + 10);
- if (!divider)
- {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
+ divider = xmalloc(hwidth + dwidth + 10);
divider[0] = '\0';
if (opt_border == 2)
strcat(divider, "+-");
@@ -502,15 +471,9 @@ print_aligned_vertical(const char *title, const char *const * headers,
{
if (!opt_barebones)
{
- char *record_str = malloc(32);
+ char *record_str = xmalloc(32);
size_t record_str_len;
- if (!record_str)
- {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
-
if (opt_border == 0)
snprintf(record_str, 32, "* Record %d", record++);
else
@@ -521,13 +484,7 @@ print_aligned_vertical(const char *title, const char *const * headers,
fprintf(fout, "%.*s%s\n", opt_border, divider, record_str);
else
{
- char *div_copy = strdup(divider);
-
- if (!div_copy)
- {
- perror("malloc");
- exit(EXIT_FAILURE);
- }
+ char *div_copy = xstrdup(divider);
strncpy(div_copy + opt_border, record_str, record_str_len);
fprintf(fout, "%s\n", div_copy);
@@ -1141,24 +1098,14 @@ printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout)
nfields = PQnfields(result);
- headers = calloc(nfields + 1, sizeof(*headers));
- if (!headers)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ headers = xcalloc(nfields + 1, sizeof(*headers));
for (i = 0; i < nfields; i++)
headers[i] = mbvalidate(PQfname(result, i), opt->topt.encoding);
/* set cells */
- cells = calloc(nfields * PQntuples(result) + 1, sizeof(*cells));
- if (!cells)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ cells = xcalloc(nfields * PQntuples(result) + 1, sizeof(*cells));
for (i = 0; i < nfields * PQntuples(result); i++)
{
@@ -1174,14 +1121,9 @@ printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout)
footers = opt->footers;
else if (!opt->topt.expanded && opt->default_footer)
{
- footers = calloc(2, sizeof(*footers));
- if (!footers)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ footers = xcalloc(2, sizeof(*footers));
- footers[0] = malloc(100);
+ footers[0] = xmalloc(100);
if (PQntuples(result) == 1)
snprintf(footers[0], 100, gettext("(1 row)"));
else
@@ -1192,12 +1134,7 @@ printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout)
/* set alignment */
- align = calloc(nfields + 1, sizeof(*align));
- if (!align)
- {
- perror("calloc");
- exit(EXIT_FAILURE);
- }
+ align = xcalloc(nfields + 1, sizeof(*align));
for (i = 0; i < nfields; i++)
{