diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-02-21 22:35:50 +0100 |
---|---|---|
committer | Robert C. Helling <helling@atdotde.de> | 2018-03-05 16:23:55 +0100 |
commit | bec3e806831290f11c8b46a01dc2295ffc307ca4 (patch) | |
tree | b7f539162aa7f30b24dbe3fdd8b75838a70e97cc /core/qthelper.h | |
parent | 9a8a0afa29776c195c6a6acbb77b5d70cecea0c9 (diff) | |
download | subsurface-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.h | 14 |
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 |