summaryrefslogtreecommitdiffstats
path: root/core/qthelper.h
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-02-21 22:35:50 +0100
committerGravatar Robert C. Helling <helling@atdotde.de>2018-03-05 16:23:55 +0100
commitbec3e806831290f11c8b46a01dc2295ffc307ca4 (patch)
treeb7f539162aa7f30b24dbe3fdd8b75838a70e97cc /core/qthelper.h
parent9a8a0afa29776c195c6a6acbb77b5d70cecea0c9 (diff)
downloadsubsurface-bec3e806831290f11c8b46a01dc2295ffc307ca4.tar.gz
Localization: Make Qt's locale-aware formatting accessible from C
This commit introduces functions: - QString asprintf_loc(const char *cformat, ...); - int snprintf_loc(char *dst, size_t size, const char *cformat, ...); - put_format_loc(struct membuffer *, const char *fmt, ...); and their va_arg equivalents, which use Qt's QString::arg() formatting options to render the strings. The snprintf_loc() function takes care not to truncate multi-byte UTF-8 encodings. Thus, on overflow, the resulting string might be shorter than size-1. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/qthelper.h')
-rw-r--r--core/qthelper.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/core/qthelper.h b/core/qthelper.h
index f86b5499b..f84c74d2b 100644
--- a/core/qthelper.h
+++ b/core/qthelper.h
@@ -6,7 +6,13 @@
#include "dive.h"
#include "divelist.h"
-// 1) Types
+// 1) Types and macros
+
+#ifdef __GNUC__
+#define __printf(x, y) __attribute__((__format__(__printf__, x, y)))
+#else
+#define __printf(x, y)
+#endif
enum inertgas {N2, HE};
@@ -47,6 +53,9 @@ void init_proxy();
QString getUUID();
QStringList imageExtensionFilters();
char *intdup(int index);
+__printf(1, 2) QString asprintf_loc(const char *cformat, ...);
+__printf(1, 0) QString vasprintf_loc(const char *cformat, va_list ap);
+
#endif
// 3) Functions visible to C and C++
@@ -81,10 +90,11 @@ void cache_insert(int tissue, int timestep, enum inertgas gas, double value);
void print_qt_versions();
void lock_planner();
void unlock_planner();
+__printf(3, 4) int snprintf_loc(char *dst, size_t size, const char *cformat, ...);
+__printf(3, 0) int vsnprintf_loc(char *dst, size_t size, const char *cformat, va_list ap);
#ifdef __cplusplus
}
#endif
-
#endif // QTHELPER_H