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

Ravi Nanjundappa <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Add xsprintf() and xsnprintf() functions to boilerplate code
and replace sprintf() and snprintf() accordingly wherever applicable.

Signed-off-by: Ravi Nanjundappa <[email protected]>
---
 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

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.