aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-05-15 07:58:27 +0000
committerWerner Koch <[email protected]>2017-05-15 07:58:27 +0000
commit00b7767bc6fe309aa20375c859ebf708cfc7b9ea (patch)
tree95049d0230b05b0beb4520e166a450bff9dd6b86 /common
parenttests: Also run all OpenPGP tests using keyrings. (diff)
downloadgnupg-00b7767bc6fe309aa20375c859ebf708cfc7b9ea.tar.gz
gnupg-00b7767bc6fe309aa20375c859ebf708cfc7b9ea.zip
common: Let format_text return an error.
* common/stringhelp.c (format_text): Return NULL on error. * common/t-stringhelp.c (test_format_text): Adjust for change. * g10/gpgcompose.c (show_help): Abort on out of core. * g10/tofu.c (ask_about_binding): Abort on format_text error. (show_statistics): Ditto. (show_warning): Ditto. -- For better re-usability function in common/ shot better not use xmalloc functions. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'common')
-rw-r--r--common/stringhelp.c36
-rw-r--r--common/t-stringhelp.c5
2 files changed, 25 insertions, 16 deletions
diff --git a/common/stringhelp.c b/common/stringhelp.c
index 509d327b0..3b481e862 100644
--- a/common/stringhelp.c
+++ b/common/stringhelp.c
@@ -1443,12 +1443,13 @@ compare_version_strings (const char *my_version, const char *req_version)
/* Format a string so that it fits within about TARGET_COLS columns.
- TEXT_IN is copied to a new buffer, which is returned.
- Normally, target_cols will be 72 and max_cols is 80. */
+ * TEXT_IN is copied to a new buffer, which is returned. Normally,
+ * target_cols will be 72 and max_cols is 80. On error NULL is
+ * returned and ERRNO is set. */
char *
format_text (const char *text_in, int target_cols, int max_cols)
{
- const int do_debug = 0;
+ /* const int do_debug = 0; */
/* The character under consideration. */
char *p;
@@ -1460,7 +1461,9 @@ format_text (const char *text_in, int target_cols, int max_cols)
int copied_last_space = 0;
char *text;
- text = xstrdup (text_in);
+ text = xtrystrdup (text_in);
+ if (!text)
+ return NULL;
p = line = text;
while (1)
@@ -1514,9 +1517,9 @@ format_text (const char *text_in, int target_cols, int max_cols)
cols_with_left_space = last_space_cols;
cols_with_right_space = cols;
- if (do_debug)
- log_debug ("Breaking: '%.*s'\n",
- (int) ((uintptr_t) p - (uintptr_t) line), line);
+ /* if (do_debug) */
+ /* log_debug ("Breaking: '%.*s'\n", */
+ /* (int) ((uintptr_t) p - (uintptr_t) line), line); */
/* The number of columns away from TARGET_COLS. We prefer
to underflow than to overflow. */
@@ -1528,21 +1531,22 @@ format_text (const char *text_in, int target_cols, int max_cols)
max_cols. */
right_penalty += 4 * (cols_with_right_space - max_cols);
- if (do_debug)
- log_debug ("Left space => %d cols (penalty: %d); right space => %d cols (penalty: %d)\n",
- cols_with_left_space, left_penalty,
- cols_with_right_space, right_penalty);
+ /* if (do_debug) */
+ /* log_debug ("Left space => %d cols (penalty: %d); " */
+ /* "right space => %d cols (penalty: %d)\n", */
+ /* cols_with_left_space, left_penalty, */
+ /* cols_with_right_space, right_penalty); */
if (last_space_cols && left_penalty <= right_penalty)
- /* Prefer the left space. */
{
- if (do_debug)
- log_debug ("Breaking at left space.\n");
+ /* Prefer the left space. */
+ /* if (do_debug) */
+ /* log_debug ("Breaking at left space.\n"); */
p = last_space;
}
else
{
- if (do_debug)
- log_debug ("Breaking at right space.\n");
+ /* if (do_debug) */
+ /* log_debug ("Breaking at right space.\n"); */
}
if (! *p)
diff --git a/common/t-stringhelp.c b/common/t-stringhelp.c
index 869ca56f0..189fed1f9 100644
--- a/common/t-stringhelp.c
+++ b/common/t-stringhelp.c
@@ -886,6 +886,11 @@ test_format_text (void)
struct test *test = &tests[i];
char *result =
format_text (test->input, test->target_cols, test->max_cols);
+ if (!result)
+ {
+ fail (1);
+ exit (2);
+ }
if (strcmp (result, test->expected) != 0)
{
printf ("%s: Test #%d failed.\nExpected: '%s'\nResult: '%s'\n",