1
#include "postgres_fe.h"
6
pgtypes_alloc(long size)
8
char *new = (char *) calloc(1L, size);
16
memset(new, '\0', size);
21
pgtypes_strdup(char *str)
23
char *new = (char *) strdup(str);
31
pgtypes_fmt_replace(union un_fmt_comb replace_val, int replace_type, char **output, int *pstr_len)
34
* general purpose variable, set to 0 in order to fix compiler warning
40
case PGTYPES_TYPE_NOTHING:
42
case PGTYPES_TYPE_STRING_CONSTANT:
43
case PGTYPES_TYPE_STRING_MALLOCED:
44
i = strlen(replace_val.str_val);
45
if (i + 1 <= *pstr_len)
48
* copy over i + 1 bytes, that includes the tailing
51
strncpy(*output, replace_val.str_val, i + 1);
54
if (replace_type == PGTYPES_TYPE_STRING_MALLOCED)
55
free(replace_val.str_val);
61
case PGTYPES_TYPE_CHAR:
64
(*output)[0] = replace_val.char_val;
73
case PGTYPES_TYPE_DOUBLE_NF:
74
case PGTYPES_TYPE_INT64:
75
case PGTYPES_TYPE_UINT:
76
case PGTYPES_TYPE_UINT_2_LZ:
77
case PGTYPES_TYPE_UINT_2_LS:
78
case PGTYPES_TYPE_UINT_3_LZ:
79
case PGTYPES_TYPE_UINT_4_LZ:
81
char *t = pgtypes_alloc(PGTYPES_FMT_NUM_MAX_DIGITS);
87
case PGTYPES_TYPE_DOUBLE_NF:
88
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
89
"%0.0g", replace_val.double_val);
91
case PGTYPES_TYPE_INT64:
92
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
93
INT64_FORMAT, replace_val.int64_val);
95
case PGTYPES_TYPE_UINT:
96
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
97
"%u", replace_val.uint_val);
99
case PGTYPES_TYPE_UINT_2_LZ:
100
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
101
"%02u", replace_val.uint_val);
103
case PGTYPES_TYPE_UINT_2_LS:
104
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
105
"%2u", replace_val.uint_val);
107
case PGTYPES_TYPE_UINT_3_LZ:
108
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
109
"%03u", replace_val.uint_val);
111
case PGTYPES_TYPE_UINT_4_LZ:
112
i = snprintf(t, PGTYPES_FMT_NUM_MAX_DIGITS,
113
"%04u", replace_val.uint_val);
126
* if *pstr_len == 0, we don't have enough space for the
127
* terminator and the conversion fails