summaryrefslogtreecommitdiffstats
path: root/mfbt/Sprintf.h
diff options
context:
space:
mode:
Diffstat (limited to 'mfbt/Sprintf.h')
-rw-r--r--mfbt/Sprintf.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/mfbt/Sprintf.h b/mfbt/Sprintf.h
new file mode 100644
index 000000000..e0be271e5
--- /dev/null
+++ b/mfbt/Sprintf.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* Provides a safer sprintf for printing to fixed-size character arrays. */
+
+#ifndef mozilla_Sprintf_h_
+#define mozilla_Sprintf_h_
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "mozilla/Assertions.h"
+#include "mozilla/Attributes.h"
+
+#ifdef __cplusplus
+
+template <size_t N>
+int VsprintfLiteral(char (&buffer)[N], const char* format, va_list args)
+{
+ MOZ_ASSERT(format != buffer);
+ int result = vsnprintf(buffer, N, format, args);
+ buffer[N - 1] = '\0';
+ return result;
+}
+
+template <size_t N>
+MOZ_FORMAT_PRINTF(2, 3)
+int SprintfLiteral(char (&buffer)[N], const char* format, ...)
+{
+ va_list args;
+ va_start(args, format);
+ int result = VsprintfLiteral(buffer, format, args);
+ va_end(args);
+ return result;
+}
+
+#endif
+#endif /* mozilla_Sprintf_h_ */