[cairo] [PATCH v2] boilerplate: Add xsprintf() and xsnprintf()

Ravi Nanjundappa nravi.n at samsung.com
Wed Oct 22 02:31:42 PDT 2014


Add xsprintf() and xsnprintf() functions to boilerplate code
and replace sprintf() and snprintf() accordingly wherever applicable.

Signed-off-by: Ravi Nanjundappa <nravi.n at samsung.com>
---
 boilerplate/cairo-boilerplate-pdf.c            |    2 +-
 boilerplate/cairo-boilerplate-ps.c             |    2 +-
 boilerplate/cairo-boilerplate-svg.c            |    2 +-
 boilerplate/cairo-boilerplate-system.c         |   51 ++++++++++++++++++++++++
 boilerplate/cairo-boilerplate-system.h         |   14 +++++++
 boilerplate/cairo-boilerplate-win32-printing.c |    2 +-
 boilerplate/cairo-boilerplate.c                |    4 +-
 perf/cairo-perf-chart.c                        |   14 +++----
 test/cairo-test-runner.c                       |    2 +-
 test/pdf-mime-data.c                           |    2 +-
 util/cairo-sphinx/sphinx.c                     |   22 +++++-----
 util/xml-to-trace.c                            |    2 +-
 12 files changed, 92 insertions(+), 27 deletions(-)

diff --git a/boilerplate/cairo-boilerplate-pdf.c b/boilerplate/cairo-boilerplate-pdf.c
index d76d139..a090a2a 100644
--- a/boilerplate/cairo-boilerplate-pdf.c
+++ b/boilerplate/cairo-boilerplate-pdf.c
@@ -166,7 +166,7 @@ _cairo_boilerplate_pdf_surface_write_to_png (cairo_surface_t *surface,
     char    command[4096];
     int exitstatus;
 
-    sprintf (command, "./pdf2png %s %s 1",
+    xsprintf (command, "./pdf2png %s %s 1",
 	     ptc->filename, filename);
 
     exitstatus = system (command);
diff --git a/boilerplate/cairo-boilerplate-ps.c b/boilerplate/cairo-boilerplate-ps.c
index ae61239..f0c9055 100644
--- a/boilerplate/cairo-boilerplate-ps.c
+++ b/boilerplate/cairo-boilerplate-ps.c
@@ -221,7 +221,7 @@ _cairo_boilerplate_ps_surface_write_to_png (cairo_surface_t *surface,
     char    command[4096];
     int exitstatus;
 
-    sprintf (command, "gs -q -r72 -g%dx%d -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=%s %s %s",
+    xsprintf (command, "gs -q -r72 -g%dx%d -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=%s %s %s",
 	     ptc->width, ptc->height, filename,
 	     ptc->level == CAIRO_PS_LEVEL_2 ? "-c 2 .setlanguagelevel -f" : "",
 	     ptc->filename);
diff --git a/boilerplate/cairo-boilerplate-svg.c b/boilerplate/cairo-boilerplate-svg.c
index 797106e..92d856d 100644
--- a/boilerplate/cairo-boilerplate-svg.c
+++ b/boilerplate/cairo-boilerplate-svg.c
@@ -198,7 +198,7 @@ _cairo_boilerplate_svg_surface_write_to_png (cairo_surface_t *surface,
     char    command[4096];
     int exitstatus;
 
-    sprintf (command, "./svg2png %s %s",
+    xsprintf (command, "./svg2png %s %s",
 	     ptc->filename, filename);
 
     exitstatus = system (command);
diff --git a/boilerplate/cairo-boilerplate-system.c b/boilerplate/cairo-boilerplate-system.c
index ec23341..36dc85f 100644
--- a/boilerplate/cairo-boilerplate-system.c
+++ b/boilerplate/cairo-boilerplate-system.c
@@ -140,6 +140,57 @@ xasprintf (char       **strp,
 #endif /* !HAVE_VASNPRINTF */
 }
 
+int
+xsprintf (char       *str,
+	   const char  *fmt,
+			...) 
+{
+    va_list va;
+    int ret;
+
+    if (str == NULL) {
+	fprintf (stderr, "Error: string is null\n");
+	exit (1);
+    }
+
+    va_start (va, fmt);
+    ret = vsprintf(str, fmt, va);
+    va_end (va);
+
+    if (ret < 0) {
+	fprintf (stderr, "Error: Out of memory. Exiting.\n");
+	exit (1);
+    }
+   
+    return ret;    
+}
+
+int
+xsnprintf (char       *str,
+	   size_t  size,
+	   const char  *fmt,
+			...) 
+{
+    va_list va;
+    int ret;
+
+    if (str == NULL) {
+	fprintf (stderr, "Error: string is null\n");
+	exit (1);
+    }
+
+    va_start (va, fmt);
+    ret = vsnprintf (str, size, fmt, va);
+    va_end (va);
+
+    if (ret < 0) {
+	fprintf (stderr, "Error: Out of memory. Exiting.\n");
+	exit (1);
+    }
+
+    return ret;
+}
+
 void
 xunlink (const char *pathname)
 {
diff --git a/boilerplate/cairo-boilerplate-system.h b/boilerplate/cairo-boilerplate-system.h
index 2816567..2e2d8de 100644
--- a/boilerplate/cairo-boilerplate-system.h
+++ b/boilerplate/cairo-boilerplate-system.h
@@ -48,6 +48,20 @@ xasprintf (char       **strp,
 	   const char  *fmt,
 			...) CAIRO_BOILERPLATE_PRINTF_FORMAT(2, 3);
 
+#define xsprintf cairo_boilerplate_xsprintf
+cairo_private_no_warn int
+xsprintf (char       *strp,
+	   const char  *fmt,
+			...) CAIRO_BOILERPLATE_PRINTF_FORMAT(2, 3);
+
+#define xsnprintf cairo_boilerplate_xsnprintf
+int
+xsnprintf (char       *strp,
+	   size_t  size,
+	   const char  *fmt,
+			...) CAIRO_BOILERPLATE_PRINTF_FORMAT(3, 4);
+
+
 #define xunlink cairo_boilerplate_xunlink
 void
 xunlink (const char *path);
diff --git a/boilerplate/cairo-boilerplate-win32-printing.c b/boilerplate/cairo-boilerplate-win32-printing.c
index 625d52c..5cebccd 100644
--- a/boilerplate/cairo-boilerplate-win32-printing.c
+++ b/boilerplate/cairo-boilerplate-win32-printing.c
@@ -294,7 +294,7 @@ _cairo_boilerplate_win32_printing_surface_write_to_png (cairo_surface_t *surface
     cairo_surface_finish (surface);
     EndPage (ptc->dc);
     EndDoc (ptc->dc);
-    sprintf (command, "gs -q -r72 -g%dx%d -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=%s %s",
+    xsprintf (command, "gs -q -r72 -g%dx%d -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=%s %s",
 	     ptc->width + ptc->left_margin, ptc->height + ptc->bottom_margin, filename, ptc->filename);
 
     if (system (command) != 0)
diff --git a/boilerplate/cairo-boilerplate.c b/boilerplate/cairo-boilerplate.c
index 7fdbf79..f4e07d6 100644
--- a/boilerplate/cairo-boilerplate.c
+++ b/boilerplate/cairo-boilerplate.c
@@ -935,7 +935,7 @@ cairo_boilerplate_open_any2ppm (const char   *filename,
 	goto POPEN;
     }
 
-    len = sprintf (command, "%s %d\n", filename, page);
+    len = xsprintf (command, "%s %d\n", filename, page);
     if (write (sk, command, len) != len) {
 	close (sk);
 	goto POPEN;
@@ -948,7 +948,7 @@ POPEN:
 #endif
 
     *close_cb = pclose;
-    sprintf (command, "%s %s %d", any2ppm, filename, page);
+    xsprintf (command, "%s %s %d", any2ppm, filename, page);
     return popen (command, "rb");
 }
 
diff --git a/perf/cairo-perf-chart.c b/perf/cairo-perf-chart.c
index 738fe5c..b249d72 100644
--- a/perf/cairo-perf-chart.c
+++ b/perf/cairo-perf-chart.c
@@ -406,9 +406,9 @@ add_chart (struct chart *c,
 	cairo_set_font_size (c->cr, dx - 2);
 
 	if (value < 0) {
-	    sprintf (buf, "%.1f", -value/100 + 1);
+	    xsprintf (buf, "%.1f", -value/100 + 1);
 	} else {
-	    sprintf (buf, "%.1f", value/100 + 1);
+	    xsprintf (buf, "%.1f", value/100 + 1);
 	}
 	cairo_text_extents (c->cr, buf, &extents);
 
@@ -516,9 +516,9 @@ add_average (struct chart *c,
     cairo_set_font_size (c->cr, dx - 2);
 
     if (value < 0) {
-	sprintf (buf, "%.1f", -value/100 + 1);
+	xsprintf (buf, "%.1f", -value/100 + 1);
     } else {
-	sprintf (buf, "%.1f", value/100 + 1);
+	xsprintf (buf, "%.1f", value/100 + 1);
     }
     cairo_text_extents (c->cr, buf, &extents);
 
@@ -643,7 +643,7 @@ done:
 
 	cairo_set_font_size (c->cr, 8);
 
-	sprintf (buf, "%.0fs", i*v/1000);
+	xsprintf (buf, "%.0fs", i*v/1000);
 	cairo_text_extents (c->cr, buf, &extents);
 
 	cairo_set_source_rgba (c->cr, .75, 0, 0, .95);
@@ -704,7 +704,7 @@ done:
 	if (y > mid)
 	    break;
 
-	sprintf (buf, "%.*fx", precision, i*v + 1);
+	xsprintf (buf, "%.*fx", precision, i*v + 1);
 	cairo_text_extents (c->cr, buf, &extents);
 
 	cairo_set_source_rgba (c->cr, .75, 0, 0, .95);
@@ -986,7 +986,7 @@ add_legend (struct chart *chart)
 	str = chart->names[0] ?
 	      chart->names[0] : chart->reports[0].configuration;
 
-	sprintf (buf, "(relative to %s)", str);
+	xsprintf (buf, "(relative to %s)", str);
 	cairo_text_extents (chart->cr, buf, &extents);
 
 	cairo_set_source_rgb (chart->cr, 1, 1, 1);
diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c
index 3fb3ae5..221e042 100644
--- a/test/cairo-test-runner.c
+++ b/test/cairo-test-runner.c
@@ -166,7 +166,7 @@ is_running_under_debugger (void)
 #if HAVE_UNISTD_H && HAVE_LIBGEN_H && __linux__
     char buf[1024];
 
-    sprintf (buf, "/proc/%d/exe", getppid ());
+    xsprintf (buf, "/proc/%d/exe", getppid ());
     if (readlink (buf, buf, sizeof (buf)) != -1 &&
 	strncmp (basename (buf), "gdb", 3) == 0)
     {
diff --git a/test/pdf-mime-data.c b/test/pdf-mime-data.c
index fd5af1f..fb9f8ab 100644
--- a/test/pdf-mime-data.c
+++ b/test/pdf-mime-data.c
@@ -148,7 +148,7 @@ preamble (cairo_test_context_t *ctx)
 
     printf ("pdf-mime-data: Please check %s to ensure it looks/prints correctly.\n", filename);
 
-    sprintf (command, "pdfimages -j %s %s", filename, CAIRO_TEST_OUTPUT_DIR "/" BASENAME);
+    xsprintf (command, "pdfimages -j %s %s", filename, CAIRO_TEST_OUTPUT_DIR "/" BASENAME);
     exit_status = system (command);
     free (filename);
     if (exit_status) {
diff --git a/util/cairo-sphinx/sphinx.c b/util/cairo-sphinx/sphinx.c
index 3a6c04c..e181108 100644
--- a/util/cairo-sphinx/sphinx.c
+++ b/util/cairo-sphinx/sphinx.c
@@ -354,7 +354,7 @@ clients_add_command (struct clients *clients, int fd, char *info)
 	c->reference[len] = '\0';
     }
 
-    len = sprintf (buf, "%s\n", clients->shm_path);
+    len = xsprintf (buf, "%s\n", clients->shm_path);
     writen (fd, buf, len);
 }
 
@@ -695,17 +695,17 @@ write_trace (struct clients *clients)
 
     csum = checksum ("output/cairo-sphinx.trace");
 
-    sprintf (buf, "output/%s.trace", csum);
+    xsprintf (buf, "output/%s.trace", csum);
     if (! g_file_test (buf, G_FILE_TEST_EXISTS)) {
 	rename ("output/cairo-sphinx.trace", buf);
 
-	sprintf (buf, "output/%s.recording.png", csum);
+	xsprintf (buf, "output/%s.recording.png", csum);
 	cairo_surface_write_to_png (clients->recording, buf);
 
 	for (i = 0; i < clients->count; i++) {
 	    struct client_info *c = &clients->clients[i];
 	    if (c->image != NULL) {
-		sprintf (buf, "output/%s.%s.png", csum, c->name);
+		xsprintf (buf, "output/%s.%s.png", csum, c->name);
 		cairo_surface_write_to_png (c->image, buf);
 	    }
 	}
@@ -849,7 +849,7 @@ request_image (struct client *c,
 
     assert (format != CAIRO_FORMAT_INVALID);
 
-    len = sprintf (buf, ".image %lu %d %d %d %d\n",
+    len = xsprintf (buf, ".image %lu %d %d %d %d\n",
 		   closure->id, format, width, height, stride);
     writen (c->sk, buf, len);
 
@@ -964,7 +964,7 @@ send_recording (struct client *c,
     unsigned long serial;
 
     assert (cairo_surface_get_type (source) == CAIRO_SURFACE_TYPE_RECORDING);
-    len = sprintf (buf, ".recording %p %lu\n", source, closure->id);
+    len = xsprintf (buf, ".recording %p %lu\n", source, closure->id);
     writen (c->sk, buf, len);
 
     /* wait for image check */
@@ -1087,7 +1087,7 @@ recorder (void *arg)
     buf_size = 65536;
     buf = xmalloc (buf_size);
 
-    len = sprintf (buf, "client-command target=recording name=.recorder\n");
+    len = xsprintf (buf, "client-command target=recording name=.recorder\n");
     if (! writen (client.sk, buf, len))
 	return NULL;
 
@@ -1098,7 +1098,7 @@ recorder (void *arg)
     if (pfd.fd < 0)
 	return NULL;
 
-    len = sprintf (buf, "client-trace name=.recorder\n");
+    len = xsprintf (buf, "client-trace name=.recorder\n");
     if (! writen (pfd.fd, buf, len))
 	return NULL;
 
@@ -1397,11 +1397,11 @@ do_client (int fd,
     buf = xmalloc (buf_size);
 
     if (reference != NULL) {
-	len = sprintf (buf,
+	len = xsprintf (buf,
 		       "client-command name=%s target=%s reference=%s\n",
 		       name, target, reference);
     } else {
-	len = sprintf (buf,
+	len = xsprintf (buf,
 		       "client-command name=%s target=%s\n",
 		       name, target);
     }
@@ -1422,7 +1422,7 @@ do_client (int fd,
     if (pfd.fd < 0)
 	return 1;
 
-    len = sprintf (buf, "client-trace name=%s\n", name);
+    len = xsprintf (buf, "client-trace name=%s\n", name);
     if (! writen (pfd.fd, buf, len))
 	return 1;
 
diff --git a/util/xml-to-trace.c b/util/xml-to-trace.c
index 13b7e57..39e72a7 100644
--- a/util/xml-to-trace.c
+++ b/util/xml-to-trace.c
@@ -166,7 +166,7 @@ start_element (void *closure,
 	}
 
 	fprintf (trace->stream, "[");
-	sprintf (trace->tail_buf, "] %s set-dash\n", offset);
+	xsprintf (trace->tail_buf, "] %s set-dash\n", offset);
 	trace->tail = trace->tail_buf;
     } else {
     }
-- 
1.7.9.5



More information about the cairo mailing list