cast ctype functions input to unsigned char
[libfirm] / ir / libcore / lc_printf.h
index 621f2ba..558b09a 100644 (file)
  * @date 3.1.2005
  */
 
-#ifndef _LIBCORE_XPRINTF_H
-#define _LIBCORE_XPRINTF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+#ifndef _LIBCORE_LC_PRINTF_H
+#define _LIBCORE_LC_PRINTF_H
 
 #include <stddef.h>
 #include <stdarg.h>
 #include <stdio.h>
+#include <stdint.h>
 
 #include <obstack.h>
 
-#include <libcore/lc_config.h>
-#include <libcore/lc_appendable.h>
-
-typedef struct _lc_arg_occ_t {
-       int width;                                                              /**< The width, or 0 if not given. */
-       int precision;                                          /**< The precision, or 0 if not given */
-
-       const char *modifier;                   /**< A string of of modifiers preceding the
-                                                                                                                       conversion specifier. Attention: This string is not
-                                                                                                                       zero terminated. Use @c modifier_length to get the
-                                                                                                                       number of valid chars in it. */
-       size_t modifier_length;         /**< The number of valid chars in @c modifier. */
-       char conversion;                                        /**< The conversion specifier. */
-       int lc_arg_type;                                                        /**< The type of the argument as determined by the
-                                                                                                                       @c get_lc_arg_type member function of the handler. */
-
-       unsigned flag_hash : 1;         /**< @c # flag was seen. */
-       unsigned flag_zero : 1;         /**< @c 0 flag was seen. */
-       unsigned flag_minus : 1;        /**< @c - flag was seen. */
-       unsigned flag_plus : 1;         /**< @c + flag was seen. */
-       unsigned flag_space : 1;        /**< A space flag was seen. */
+#include "lc_config.h"
+#include "lc_appendable.h"
+
+typedef struct lc_arg_occ_t {
+       int width;                 /**< The width, or 0 if not given. */
+       int precision;             /**< The precision, or 0 if not given */
+
+       const char *modifier;      /**< A string of of modifiers preceding the
+                                       conversion specifier. Attention: This string
+                                       is not zero terminated. Use
+                                       @c modifier_length to get the number of
+                                       valid chars in it. */
+       size_t modifier_length;    /**< The number of valid chars in @c modifier. */
+       char conversion;           /**< The conversion specifier. */
+       int lc_arg_type;           /**< The type of the argument as determined by
+                                       the @c get_lc_arg_type member function of
+                                       the handler. */
+
+       unsigned flag_hash : 1;    /**< @c # flag was seen. */
+       unsigned flag_zero : 1;    /**< @c 0 flag was seen. */
+       unsigned flag_minus : 1;   /**< @c - flag was seen. */
+       unsigned flag_plus : 1;    /**< @c + flag was seen. */
+       unsigned flag_space : 1;   /**< A space flag was seen. */
 } lc_arg_occ_t;
 
 /**
@@ -67,24 +66,24 @@ typedef struct _lc_arg_occ_t {
  * @c ARG_TYPE macro is the name of the union member preceded by $c v_
  */
 typedef union {
-#define LC_ARG_TYPE(type,name) type v_ ## name;
+#define LC_ARG_TYPE(type,name,va_type) type v_ ## name;
 #include "lc_printf_arg_types.def"
 #undef LC_ARG_TYPE
 } lc_arg_value_t;
 
 enum {
-#define LC_ARG_TYPE(type,name) lc_arg_type_ ## name,
+#define LC_ARG_TYPE(type,name,va_type) lc_arg_type_ ## name,
 #include "lc_printf_arg_types.def"
 #undef LC_ARG_TYPE
   lc_arg_type_last
 };
 
-typedef struct _lc_arg_handler {
+typedef struct lc_arg_handler {
        int (*get_lc_arg_type)(const lc_arg_occ_t *occ);
        int (*emit)(lc_appendable_t *app, const lc_arg_occ_t *occ, const lc_arg_value_t *arg);
 } lc_arg_handler_t;
 
-typedef struct _lc_arg_env_t lc_arg_env_t;
+typedef struct lc_arg_env_t lc_arg_env_t;
 
 lc_arg_env_t *lc_arg_new_env(void);
 void lc_arg_free_env(lc_arg_env_t *env);
@@ -112,19 +111,14 @@ int lc_evsnprintf(const lc_arg_env_t *env, char *buf, size_t len, const char *fm
 int lc_evfprintf(const lc_arg_env_t *env, FILE *f, const char *fmt, va_list args);
 int lc_evoprintf(const lc_arg_env_t *env, struct obstack *obst, const char *fmt, va_list args);
 
-int lc_printf(const char *fmt, ...);
-int lc_snprintf(char *buf, size_t len, const char *fmt, ...);
-int lc_fprintf(FILE *f, const char *fmt, ...);
-int lc_oprintf(struct obstack *obst, const char *fmt, ...);
+int lc_printf(const char *fmt, ...) LC_PRINTF(1);
+int lc_snprintf(char *buf, size_t len, const char *fmt, ...) LC_PRINTF(3);
+int lc_fprintf(FILE *f, const char *fmt, ...) LC_PRINTF(2);
+int lc_oprintf(struct obstack *obst, const char *fmt, ...) LC_PRINTF(2);
 
 int lc_vprintf(const char *fmt, va_list args);
 int lc_vsnprintf(char *buf, size_t len, const char *fmt, va_list args);
 int lc_vfprintf(FILE *f, const char *fmt, va_list args);
 int lc_voprintf(struct obstack *obst, const char *fmt, va_list args);
 
-#ifdef __cplusplus
-}
 #endif
-
-
-#endif /* _LIBCORE_XPRINTF_H */