/*
-Copyright (c) 2005-2010, Troy D. Hanson http:://tpl.sourceforge.net
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
+ Copyright (c) 2005-2010, Troy D. Hanson http:://tpl.sourceforge.net
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
#define TPL_VERSION 1.5
-static const char id[] = "$Id : tpl.c 192 2009-04-24 10:35:30Z thanson $";
+//static const char id[] = "$Id : tpl.c 192 2009-04-24 10:35:30Z thanson $";
#include <stdlib.h> /* malloc */
/* macro to add a structure to a doubly-linked list */
#define DL_ADD(head, add) \
- do { \
- if (head) { \
- (add)->prev = (head)->prev; \
- (head)->prev->next = (add); \
- (head)->prev = (add); \
- (add)->next = NULL; \
- } else { \
- (head) = (add); \
- (head)->prev = (head); \
- (head)->next = NULL; \
- } \
- } while (0);
+ do { \
+ if (head) { \
+ (add)->prev = (head)->prev; \
+ (head)->prev->next = (add); \
+ (head)->prev = (add); \
+ (add)->next = NULL; \
+ } else { \
+ (head) = (add); \
+ (head)->prev = (head); \
+ (head)->next = NULL; \
+ } \
+ } while (0);
#define fatal_oom() tpl_hook.fatal("out of memory\n")
/* access to A(...) nodes by index */
typedef struct tpl_pidx {
- struct tpl_node *node;
- struct tpl_pidx *next, *prev;
+ struct tpl_node *node;
+ struct tpl_pidx *next, *prev;
} tpl_pidx;
/* A(...) node datum */
typedef struct tpl_atyp {
- uint32_t num; /* num elements */
- size_t sz; /* size of each backbone's datum */
- struct tpl_backbone *bb, *bbtail;
- void *cur;
+ uint32_t num; /* num elements */
+ size_t sz; /* size of each backbone's datum */
+ struct tpl_backbone *bb, *bbtail;
+ void *cur;
} tpl_atyp;
/* backbone to extend A(...) lists dynamically */
typedef struct tpl_backbone {
- struct tpl_backbone *next;
- /* when this structure is malloc'd, extra space is alloc'd at the
- * end to store the backbone "datum", and data points to it. */
+ struct tpl_backbone *next;
+ /* when this structure is malloc'd, extra space is alloc'd at the
+ * end to store the backbone "datum", and data points to it. */
#if __STDC_VERSION__ < 199901
- char *data;
+ char *data;
#else
- char data[];
+ char data[];
#endif
} tpl_backbone;
/* mmap record */
typedef struct tpl_mmap_rec {
- int fd;
- void *text;
- size_t text_sz;
+ int fd;
+ void *text;
+ size_t text_sz;
} tpl_mmap_rec;
/* root node datum */
typedef struct tpl_root_data {
- int flags;
- tpl_pidx *pidx;
- tpl_mmap_rec mmap;
- char *fmt;
- int *fxlens, num_fxlens;
+ int flags;
+ tpl_pidx *pidx;
+ tpl_mmap_rec mmap;
+ char *fmt;
+ int *fxlens, num_fxlens;
} tpl_root_data;
/* node type to size mapping */
struct tpl_type_t {
- char c;
- int sz;
+ char c;
+ int sz;
};
* Also SPARC and x86_64 seem to align always on +8.
*/
struct tpl_double_alignment_detector {
- char a;
- double d; /* some platforms align this on +4, others on +8 */
+ char a;
+ double d; /* some platforms align this on +4, others on +8 */
};
/* this is another case where alignment varies. mac os x/gcc was observed
* to align the int64_t at +4 under -m32 and at +8 under -m64 */
struct tpl_int64_alignment_detector {
- int i;
- int64_t j; /* some platforms align this on +4, others on +8 */
+ int i;
+ int64_t j; /* some platforms align this on +4, others on +8 */
};
typedef struct {
- size_t inter_elt_len; /* padded inter-element len; i.e. &a[1].field - &a[0].field */
- tpl_node *iter_start_node; /* node to jump back to, as we start each new iteration */
- size_t iternum; /* current iteration number (total req'd. iter's in n->num) */
+ size_t inter_elt_len; /* padded inter-element len; i.e. &a[1].field - &a[0].field */
+ tpl_node *iter_start_node; /* node to jump back to, as we start each new iteration */
+ size_t iternum; /* current iteration number (total req'd. iter's in n->num) */
} tpl_pound_data;
/* Hooks for customizing tpl mem alloc, error handling, etc. Set defaults. */
tpl_hook_t tpl_hook = {
- /* .oops = */ tpl_oops,
- /* .malloc = */ malloc,
- /* .realloc = */ realloc,
- /* .free = */ free,
- /* .fatal = */ tpl_fatal,
- /* .gather_max = */ 0 /* max tpl size (bytes) for tpl_gather */
+ /* .oops = */ tpl_oops,
+ /* .malloc = */ malloc,
+ /* .realloc = */ realloc,
+ /* .free = */ free,
+ /* .fatal = */ tpl_fatal,
+ /* .gather_max = */ 0 /* max tpl size (bytes) for tpl_gather */
};
static const char tpl_fmt_chars[] = "AS($)BiucsfIUjv#"; /* valid format chars */
-static const char tpl_S_fmt_chars[] = "iucsfIUjv#$()"; /* valid within S(...) */
+//static const char tpl_S_fmt_chars[] = "iucsfIUjv#$()"; /* valid within S(...) */
static const char tpl_datapeek_ok_chars[] = "iucsfIUjv"; /* valid in datapeek */
static const struct tpl_type_t tpl_types[] = {
- /* [TPL_TYPE_ROOT] = */ {'r', 0},
- /* [TPL_TYPE_INT32] = */ {'i', sizeof(int32_t)},
- /* [TPL_TYPE_UINT32] = */ {'u', sizeof(uint32_t)},
- /* [TPL_TYPE_BYTE] = */ {'c', sizeof(char)},
- /* [TPL_TYPE_STR] = */ {'s', sizeof(char*)},
- /* [TPL_TYPE_ARY] = */ {'A', 0},
- /* [TPL_TYPE_BIN] = */ {'B', 0},
- /* [TPL_TYPE_DOUBLE] = */ {'f', 8}, /* not sizeof(double) as that varies */
- /* [TPL_TYPE_INT64] = */ {'I', sizeof(int64_t)},
- /* [TPL_TYPE_UINT64] = */ {'U', sizeof(uint64_t)},
- /* [TPL_TYPE_INT16] = */ {'j', sizeof(int16_t)},
- /* [TPL_TYPE_UINT16] = */ {'v', sizeof(uint16_t)},
- /* [TPL_TYPE_POUND] = */ {'#', 0},
+ /* [TPL_TYPE_ROOT] = */ {'r', 0},
+ /* [TPL_TYPE_INT32] = */ {'i', sizeof(int32_t)},
+ /* [TPL_TYPE_UINT32] = */ {'u', sizeof(uint32_t)},
+ /* [TPL_TYPE_BYTE] = */ {'c', sizeof(char)},
+ /* [TPL_TYPE_STR] = */ {'s', sizeof(char*)},
+ /* [TPL_TYPE_ARY] = */ {'A', 0},
+ /* [TPL_TYPE_BIN] = */ {'B', 0},
+ /* [TPL_TYPE_DOUBLE] = */ {'f', 8}, /* not sizeof(double) as that varies */
+ /* [TPL_TYPE_INT64] = */ {'I', sizeof(int64_t)},
+ /* [TPL_TYPE_UINT64] = */ {'U', sizeof(uint64_t)},
+ /* [TPL_TYPE_INT16] = */ {'j', sizeof(int16_t)},
+ /* [TPL_TYPE_UINT16] = */ {'v', sizeof(uint16_t)},
+ /* [TPL_TYPE_POUND] = */ {'#', 0},
};
/* default error-reporting function. Just writes to stderr. */
static int tpl_oops(const char *fmt, ...)
{
char buf[256];
- va_list ap;
- va_start(ap, fmt);
-/* vfprintf(stderr, fmt, ap); */
+ va_list ap;
+ va_start(ap, fmt);
+ /* vfprintf(stderr, fmt, ap); */
snprintf(buf, sizeof(buf)-1, fmt, ap);
EM_DEBUG_EXCEPTION("%s", buf);
- va_end(ap);
- return 0;
+ va_end(ap);
+ return 0;
}
static tpl_node *tpl_node_new(tpl_node *parent)
{
- tpl_node *n;
- if ((n = tpl_hook.malloc(sizeof(tpl_node))) == NULL) {
- fatal_oom();
- }
- n->addr = NULL;
- n->data = NULL;
- n->num = 1;
- n->ser_osz = 0;
- n->children = NULL;
- n->next = NULL;
- n->parent = parent;
- return n;
+ tpl_node *n;
+ if ((n = tpl_hook.malloc(sizeof(tpl_node))) == NULL)
+ fatal_oom();
+
+ n->addr = NULL;
+ n->data = NULL;
+ n->num = 1;
+ n->ser_osz = 0;
+ n->children = NULL;
+ n->next = NULL;
+ n->parent = parent;
+ return n;
}
/* Used in S(..) formats to pack several fields from a structure based on
*/
char *calc_field_addr(tpl_node *parent, int type, char *struct_addr, int ordinal)
{
- tpl_node *prev;
- int offset;
- int align_sz;
-
- if (ordinal == 1) return struct_addr; /* first field starts on structure address */
-
- /* generate enough padding so field addr is divisible by it's align_sz. 4, 8, etc */
- prev = parent->children->prev;
- switch (type) {
- case TPL_TYPE_DOUBLE:
- align_sz = sizeof(struct tpl_double_alignment_detector) > 12 ? 8 : 4;
- break;
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- align_sz = sizeof(struct tpl_int64_alignment_detector) > 12 ? 8 : 4;
- break;
- default:
- align_sz = tpl_types[type].sz;
- break;
- }
- offset = ((uintptr_t)prev->addr - (uintptr_t)struct_addr)
- + (tpl_types[prev->type].sz * prev->num);
- offset = (offset + align_sz - 1) / align_sz * align_sz;
- return struct_addr + offset;
+ tpl_node *prev;
+ int offset;
+ int align_sz;
+
+ if (ordinal == 1) return struct_addr; /* first field starts on structure address */
+
+ /* generate enough padding so field addr is divisible by it's align_sz. 4, 8, etc */
+ prev = parent->children->prev;
+ switch (type) {
+ case TPL_TYPE_DOUBLE:
+ align_sz = sizeof(struct tpl_double_alignment_detector) > 12 ? 8 : 4;
+ break;
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ align_sz = sizeof(struct tpl_int64_alignment_detector) > 12 ? 8 : 4;
+ break;
+ default:
+ align_sz = tpl_types[type].sz;
+ break;
+ }
+ offset = ((uintptr_t)prev->addr - (uintptr_t)struct_addr)
+ + (tpl_types[prev->type].sz * prev->num);
+ offset = (offset + align_sz - 1) / align_sz * align_sz;
+ return struct_addr + offset;
}
TPL_API tpl_node *tpl_map(char *fmt, ...)
{
- va_list ap;
- tpl_node *tn;
+ va_list ap;
+ tpl_node *tn;
- va_start(ap, fmt);
- tn = tpl_map_va(fmt, ap);
- va_end(ap);
- return tn;
+ va_start(ap, fmt);
+ tn = tpl_map_va(fmt, ap);
+ va_end(ap);
+ return tn;
}
static tpl_node *tpl_map_va(char *fmt, va_list ap)
{
- int lparen_level = 0, expect_lparen = 0, t = 0, in_structure = 0, ordinal = 0;
- int in_nested_structure = 0;
- char *c, *peek, *struct_addr = NULL, *struct_next;
- tpl_node *root, *parent, *n = NULL, *preceding, *iter_start_node = NULL,
- *struct_widest_node = NULL, *np; tpl_pidx *pidx;
- tpl_pound_data *pd;
- int *fxlens, num_fxlens, pound_num, pound_prod, applies_to_struct;
- int contig_fxlens[10]; /* temp space for contiguous fxlens */
- int num_contig_fxlens, i, j;
- ptrdiff_t inter_elt_len = 0; /* padded element length of contiguous structs in array */
-
-
- root = tpl_node_new(NULL);
- root->type = TPL_TYPE_ROOT;
- root->data = (tpl_root_data*)tpl_hook.malloc(sizeof(tpl_root_data));
- if (!root->data) fatal_oom();
- memset((tpl_root_data*)root->data, 0, sizeof(tpl_root_data));
-
- /* set up root nodes special ser_osz to reflect overhead of preamble */
- root->ser_osz = sizeof(uint32_t); /* tpl leading length */
- root->ser_osz += EM_SAFE_STRLEN(fmt) + 1; /* fmt + NUL-terminator */
- root->ser_osz += 4; /* 'tpl' magic prefix + flags byte */
-
- parent = root;
-
- c = fmt;
- while (*c != '\0') {
- switch (*c) {
- case 'c':
- case 'i':
- case 'u':
- case 'j':
- case 'v':
- case 'I':
- case 'U':
- case 'f':
- if (*c == 'c') t = TPL_TYPE_BYTE;
- else if (*c == 'i') t = TPL_TYPE_INT32;
- else if (*c == 'u') t = TPL_TYPE_UINT32;
- else if (*c == 'j') t = TPL_TYPE_INT16;
- else if (*c == 'v') t = TPL_TYPE_UINT16;
- else if (*c == 'I') t = TPL_TYPE_INT64;
- else if (*c == 'U') t = TPL_TYPE_UINT64;
- else if (*c == 'f') t = TPL_TYPE_DOUBLE;
-
- if (expect_lparen) goto fail;
- n = tpl_node_new(parent);
- n->type = t;
- if (in_structure) {
- if (ordinal == 1) {
- /* for S(...)# iteration. Apply any changes to case 's' too!!! */
- iter_start_node = n;
- struct_widest_node = n;
- }
- if (tpl_types[n->type].sz > tpl_types[struct_widest_node->type].sz) {
- struct_widest_node = n;
- }
- n->addr = calc_field_addr(parent, n->type, struct_addr, ordinal++);
- } else n->addr = (void*)va_arg(ap, void*);
- n->data = tpl_hook.malloc(tpl_types[t].sz);
- if (!n->data) fatal_oom();
- if (n->parent->type == TPL_TYPE_ARY)
- ((tpl_atyp*)(n->parent->data))->sz += tpl_types[t].sz;
- DL_ADD(parent->children, n);
- break;
- case 's':
- if (expect_lparen) goto fail;
- n = tpl_node_new(parent);
- n->type = TPL_TYPE_STR;
- if (in_structure) {
- if (ordinal == 1) {
- iter_start_node = n; /* for S(...)# iteration */
- struct_widest_node = n;
- }
- if (tpl_types[n->type].sz > tpl_types[struct_widest_node->type].sz) {
- struct_widest_node = n;
- }
- n->addr = calc_field_addr(parent, n->type, struct_addr, ordinal++);
- } else n->addr = (void*)va_arg(ap, void*);
- n->data = tpl_hook.malloc(sizeof(char*));
- if (!n->data) fatal_oom();
- *(char**)(n->data) = NULL;
- if (n->parent->type == TPL_TYPE_ARY)
- ((tpl_atyp*)(n->parent->data))->sz += sizeof(void*);
- DL_ADD(parent->children, n);
- break;
- case '#':
- /* apply a 'num' to preceding atom */
- if (!parent->children) goto fail;
- preceding = parent->children->prev; /* first child's prev is 'last child'*/
- t = preceding->type;
- applies_to_struct = (*(c-1) == ')') ? 1 : 0;
- if (!applies_to_struct) {
- if (!(t == TPL_TYPE_BYTE || t == TPL_TYPE_INT32 ||
- t == TPL_TYPE_UINT32 || t == TPL_TYPE_DOUBLE ||
- t == TPL_TYPE_UINT64 || t == TPL_TYPE_INT64 ||
- t == TPL_TYPE_UINT16 || t == TPL_TYPE_INT16 ||
- t == TPL_TYPE_STR)) goto fail;
- }
- /* count up how many contiguous # and form their product */
- pound_prod = 1;
- num_contig_fxlens = 0;
- for (peek = c; *peek == '#'; peek++) {
- pound_num = va_arg(ap, int);
- if (pound_num < 1) {
- tpl_hook.fatal("non-positive iteration count %d\n", pound_num);
- }
- if (num_contig_fxlens >= (sizeof(contig_fxlens)/sizeof(contig_fxlens[0]))) {
- tpl_hook.fatal("contiguous # exceeds hardcoded limit\n");
- }
- contig_fxlens[num_contig_fxlens++] = pound_num;
- pound_prod *= pound_num;
- }
- /* increment c to skip contiguous # so its points to last one */
- c = peek-1;
- /* differentiate atom-# from struct-# by noting preceding rparen */
- if (applies_to_struct) { /* insert # node to induce looping */
- n = tpl_node_new(parent);
- n->type = TPL_TYPE_POUND;
- n->num = pound_prod;
- n->data = tpl_hook.malloc(sizeof(tpl_pound_data));
- if (!n->data) fatal_oom();
- pd = (tpl_pound_data*)n->data;
- pd->inter_elt_len = inter_elt_len;
- pd->iter_start_node = iter_start_node;
- pd->iternum = 0;
- DL_ADD(parent->children, n);
- /* multiply the 'num' and data space on each atom in the structure */
- for (np = iter_start_node; np != n; np = np->next) {
- if (n->parent->type == TPL_TYPE_ARY) {
- ((tpl_atyp*)(n->parent->data))->sz +=
- tpl_types[np->type].sz * (np->num * (n->num - 1));
- }
- np->data = tpl_hook.realloc(np->data, tpl_types[np->type].sz *
- np->num * n->num);
- if (!np->data) fatal_oom();
- memset(np->data, 0, tpl_types[np->type].sz * np->num * n->num);
- }
- } else { /* simple atom-# form does not require a loop */
- preceding->num = pound_prod;
- preceding->data = tpl_hook.realloc(preceding->data,
- tpl_types[t].sz * preceding->num);
- if (!preceding->data) fatal_oom();
- memset(preceding->data, 0, tpl_types[t].sz * preceding->num);
- if (n->parent->type == TPL_TYPE_ARY) {
- ((tpl_atyp*)(n->parent->data))->sz += tpl_types[t].sz *
- (preceding->num-1);
- }
- }
- root->ser_osz += (sizeof(uint32_t) * num_contig_fxlens);
-
- j = ((tpl_root_data*)root->data)->num_fxlens; /* before incrementing */
- (((tpl_root_data*)root->data)->num_fxlens) += num_contig_fxlens;
- num_fxlens = ((tpl_root_data*)root->data)->num_fxlens; /* new value */
- fxlens = ((tpl_root_data*)root->data)->fxlens;
- fxlens = tpl_hook.realloc(fxlens, sizeof(int) * num_fxlens);
- if (!fxlens) fatal_oom();
- ((tpl_root_data*)root->data)->fxlens = fxlens;
- for (i = 0; i < num_contig_fxlens; i++) fxlens[j++] = contig_fxlens[i];
-
- break;
- case 'B':
- if (expect_lparen) goto fail;
- if (in_structure) goto fail;
- n = tpl_node_new(parent);
- n->type = TPL_TYPE_BIN;
- n->addr = (tpl_bin*)va_arg(ap, void*);
- n->data = tpl_hook.malloc(sizeof(tpl_bin*));
- if (!n->data) fatal_oom();
- *((tpl_bin**)n->data) = NULL;
- if (n->parent->type == TPL_TYPE_ARY)
- ((tpl_atyp*)(n->parent->data))->sz += sizeof(tpl_bin);
- DL_ADD(parent->children, n);
- break;
- case 'A':
- if (in_structure) goto fail;
- n = tpl_node_new(parent);
- n->type = TPL_TYPE_ARY;
- DL_ADD(parent->children, n);
- parent = n;
- expect_lparen = 1;
- pidx = (tpl_pidx*)tpl_hook.malloc(sizeof(tpl_pidx));
- if (!pidx) fatal_oom();
- pidx->node = n;
- pidx->next = NULL;
- DL_ADD(((tpl_root_data*)(root->data))->pidx, pidx);
- /* set up the A's tpl_atyp */
- n->data = (tpl_atyp*)tpl_hook.malloc(sizeof(tpl_atyp));
- if (!n->data) fatal_oom();
- ((tpl_atyp*)(n->data))->num = 0;
- ((tpl_atyp*)(n->data))->sz = 0;
- ((tpl_atyp*)(n->data))->bb = NULL;
- ((tpl_atyp*)(n->data))->bbtail = NULL;
- ((tpl_atyp*)(n->data))->cur = NULL;
- if (n->parent->type == TPL_TYPE_ARY)
- ((tpl_atyp*)(n->parent->data))->sz += sizeof(void*);
- break;
- case 'S':
- if (in_structure) goto fail;
- expect_lparen = 1;
- ordinal = 1; /* index upcoming atoms in S(..) */
- in_structure = 1+lparen_level; /* so we can tell where S fmt ends */
- struct_addr = (char*)va_arg(ap, void*);
- break;
- case '$': /* nested structure */
- if (!in_structure) goto fail;
- expect_lparen = 1;
- in_nested_structure++;
- break;
- case ')':
- lparen_level--;
- if (lparen_level < 0) goto fail;
- if (*(c-1) == '(') goto fail;
- if (in_nested_structure) in_nested_structure--;
- else if (in_structure && (in_structure-1 == lparen_level)) {
- /* calculate delta between contiguous structures in array */
- struct_next = calc_field_addr(parent, struct_widest_node->type,
- struct_addr, ordinal++);
- inter_elt_len = struct_next - struct_addr;
- in_structure = 0;
- } else parent = parent->parent; /* rparen ends A() type, not S() type */
- break;
- case '(':
- if (!expect_lparen) goto fail;
- expect_lparen = 0;
- lparen_level++;
- break;
- default:
- tpl_hook.oops("unsupported option %c\n", *c);
- goto fail;
- }
- c++;
- }
- if (lparen_level != 0) goto fail;
-
- /* copy the format string, save for convenience */
- ((tpl_root_data*)(root->data))->fmt = tpl_hook.malloc(EM_SAFE_STRLEN(fmt)+1);
- if (((tpl_root_data*)(root->data))->fmt == NULL)
- fatal_oom();
- memcpy(((tpl_root_data*)(root->data))->fmt, fmt, EM_SAFE_STRLEN(fmt)+1);
-
- return root;
+ int lparen_level = 0, expect_lparen = 0, t = 0, in_structure = 0, ordinal = 0;
+ int in_nested_structure = 0;
+ char *c, *peek, *struct_addr = NULL, *struct_next;
+ tpl_node *root, *parent, *n = NULL, *preceding, *iter_start_node = NULL,
+ *struct_widest_node = NULL, *np; tpl_pidx *pidx;
+ tpl_pound_data *pd;
+ int *fxlens, num_fxlens, pound_num, pound_prod, applies_to_struct;
+ int contig_fxlens[10]; /* temp space for contiguous fxlens */
+ int num_contig_fxlens, i, j;
+ ptrdiff_t inter_elt_len = 0; /* padded element length of contiguous structs in array */
+
+
+ root = tpl_node_new(NULL);
+ root->type = TPL_TYPE_ROOT;
+ root->data = (tpl_root_data*)tpl_hook.malloc(sizeof(tpl_root_data));
+ if (!root->data) fatal_oom();
+ memset((tpl_root_data*)root->data, 0, sizeof(tpl_root_data));
+
+ /* set up root nodes special ser_osz to reflect overhead of preamble */
+ root->ser_osz = sizeof(uint32_t); /* tpl leading length */
+ root->ser_osz += EM_SAFE_STRLEN(fmt) + 1; /* fmt + NUL-terminator */
+ root->ser_osz += 4; /* 'tpl' magic prefix + flags byte */
+
+ parent = root;
+
+ c = fmt;
+ while (*c != '\0') {
+ switch (*c) {
+ case 'c':
+ case 'i':
+ case 'u':
+ case 'j':
+ case 'v':
+ case 'I':
+ case 'U':
+ case 'f':
+ if (*c == 'c') t = TPL_TYPE_BYTE;
+ else if (*c == 'i') t = TPL_TYPE_INT32;
+ else if (*c == 'u') t = TPL_TYPE_UINT32;
+ else if (*c == 'j') t = TPL_TYPE_INT16;
+ else if (*c == 'v') t = TPL_TYPE_UINT16;
+ else if (*c == 'I') t = TPL_TYPE_INT64;
+ else if (*c == 'U') t = TPL_TYPE_UINT64;
+ else if (*c == 'f') t = TPL_TYPE_DOUBLE;
+
+ if (expect_lparen) goto fail;
+ n = tpl_node_new(parent);
+ n->type = t;
+ if (in_structure) {
+ if (ordinal == 1) {
+ /* for S(...)# iteration. Apply any changes to case 's' too!!! */
+ iter_start_node = n;
+ struct_widest_node = n;
+ }
+ if (tpl_types[n->type].sz > tpl_types[struct_widest_node->type].sz)
+ struct_widest_node = n;
+
+ n->addr = calc_field_addr(parent, n->type, struct_addr, ordinal++);
+ } else n->addr = (void*)va_arg(ap, void*);
+ n->data = tpl_hook.malloc(tpl_types[t].sz);
+ if (!n->data) fatal_oom();
+ if (n->parent->type == TPL_TYPE_ARY)
+ ((tpl_atyp*)(n->parent->data))->sz += tpl_types[t].sz;
+ DL_ADD(parent->children, n);
+ break;
+ case 's':
+ if (expect_lparen) goto fail;
+ n = tpl_node_new(parent);
+ n->type = TPL_TYPE_STR;
+ if (in_structure) {
+ if (ordinal == 1) {
+ iter_start_node = n; /* for S(...)# iteration */
+ struct_widest_node = n;
+ }
+ if (tpl_types[n->type].sz > tpl_types[struct_widest_node->type].sz)
+ struct_widest_node = n;
+
+ n->addr = calc_field_addr(parent, n->type, struct_addr, ordinal++);
+ } else n->addr = (void*)va_arg(ap, void*);
+ n->data = tpl_hook.malloc(sizeof(char*));
+ if (!n->data) fatal_oom();
+ *(char**)(n->data) = NULL;
+ if (n->parent->type == TPL_TYPE_ARY)
+ ((tpl_atyp*)(n->parent->data))->sz += sizeof(void*);
+ DL_ADD(parent->children, n);
+ break;
+ case '#':
+ /* apply a 'num' to preceding atom */
+ if (!parent->children) goto fail;
+ preceding = parent->children->prev; /* first child's prev is 'last child'*/
+ t = preceding->type;
+ applies_to_struct = (*(c-1) == ')') ? 1 : 0;
+ if (!applies_to_struct) {
+ if (!(t == TPL_TYPE_BYTE || t == TPL_TYPE_INT32 ||
+ t == TPL_TYPE_UINT32 || t == TPL_TYPE_DOUBLE ||
+ t == TPL_TYPE_UINT64 || t == TPL_TYPE_INT64 ||
+ t == TPL_TYPE_UINT16 || t == TPL_TYPE_INT16 ||
+ t == TPL_TYPE_STR)) goto fail;
+ }
+ /* count up how many contiguous # and form their product */
+ pound_prod = 1;
+ num_contig_fxlens = 0;
+ for (peek = c; *peek == '#'; peek++) {
+ pound_num = va_arg(ap, int);
+ if (pound_num < 1)
+ tpl_hook.fatal("non-positive iteration count %d\n", pound_num);
+
+ if (num_contig_fxlens >= (sizeof(contig_fxlens)/sizeof(contig_fxlens[0])))
+ tpl_hook.fatal("contiguous # exceeds hardcoded limit\n");
+
+ contig_fxlens[num_contig_fxlens++] = pound_num;
+ pound_prod *= pound_num;
+ }
+ /* increment c to skip contiguous # so its points to last one */
+ c = peek-1;
+ /* differentiate atom-# from struct-# by noting preceding rparen */
+ if (applies_to_struct) { /* insert # node to induce looping */
+ n = tpl_node_new(parent);
+ n->type = TPL_TYPE_POUND;
+ n->num = pound_prod;
+ n->data = tpl_hook.malloc(sizeof(tpl_pound_data));
+ if (!n->data) fatal_oom();
+ pd = (tpl_pound_data*)n->data;
+ pd->inter_elt_len = inter_elt_len;
+ pd->iter_start_node = iter_start_node;
+ pd->iternum = 0;
+ DL_ADD(parent->children, n);
+ /* multiply the 'num' and data space on each atom in the structure */
+ for (np = iter_start_node; np != n; np = np->next) {
+ if (n->parent->type == TPL_TYPE_ARY) {
+ ((tpl_atyp*)(n->parent->data))->sz +=
+ tpl_types[np->type].sz * (np->num * (n->num - 1));
+ }
+ np->data = tpl_hook.realloc(np->data, tpl_types[np->type].sz *
+ np->num * n->num);
+ if (!np->data) fatal_oom();
+ memset(np->data, 0, tpl_types[np->type].sz * np->num * n->num);
+ }
+ } else { /* simple atom-# form does not require a loop */
+ preceding->num = pound_prod;
+ preceding->data = tpl_hook.realloc(preceding->data,
+ tpl_types[t].sz * preceding->num);
+ if (!preceding->data) fatal_oom();
+ memset(preceding->data, 0, tpl_types[t].sz * preceding->num);
+ if (n->parent->type == TPL_TYPE_ARY) {
+ ((tpl_atyp*)(n->parent->data))->sz += tpl_types[t].sz *
+ (preceding->num-1);
+ }
+ }
+ root->ser_osz += (sizeof(uint32_t) * num_contig_fxlens);
+
+ j = ((tpl_root_data*)root->data)->num_fxlens; /* before incrementing */
+ (((tpl_root_data*)root->data)->num_fxlens) += num_contig_fxlens;
+ num_fxlens = ((tpl_root_data*)root->data)->num_fxlens; /* new value */
+ fxlens = ((tpl_root_data*)root->data)->fxlens;
+ fxlens = tpl_hook.realloc(fxlens, sizeof(int) * num_fxlens);
+ if (!fxlens) fatal_oom();
+ ((tpl_root_data*)root->data)->fxlens = fxlens;
+ for (i = 0; i < num_contig_fxlens; i++) fxlens[j++] = contig_fxlens[i];
+
+ break;
+ case 'B':
+ if (expect_lparen) goto fail;
+ if (in_structure) goto fail;
+ n = tpl_node_new(parent);
+ n->type = TPL_TYPE_BIN;
+ n->addr = (tpl_bin*)va_arg(ap, void*);
+ n->data = tpl_hook.malloc(sizeof(tpl_bin*));
+ if (!n->data) fatal_oom();
+ *((tpl_bin**)n->data) = NULL;
+ if (n->parent->type == TPL_TYPE_ARY)
+ ((tpl_atyp*)(n->parent->data))->sz += sizeof(tpl_bin);
+ DL_ADD(parent->children, n);
+ break;
+ case 'A':
+ if (in_structure) goto fail;
+ n = tpl_node_new(parent);
+ n->type = TPL_TYPE_ARY;
+ DL_ADD(parent->children, n);
+ parent = n;
+ expect_lparen = 1;
+ pidx = (tpl_pidx*)tpl_hook.malloc(sizeof(tpl_pidx));
+ if (!pidx) fatal_oom();
+ pidx->node = n;
+ pidx->next = NULL;
+ DL_ADD(((tpl_root_data*)(root->data))->pidx, pidx);
+ /* set up the A's tpl_atyp */
+ n->data = (tpl_atyp*)tpl_hook.malloc(sizeof(tpl_atyp));
+ if (!n->data) fatal_oom();
+ ((tpl_atyp*)(n->data))->num = 0;
+ ((tpl_atyp*)(n->data))->sz = 0;
+ ((tpl_atyp*)(n->data))->bb = NULL;
+ ((tpl_atyp*)(n->data))->bbtail = NULL;
+ ((tpl_atyp*)(n->data))->cur = NULL;
+ if (n->parent->type == TPL_TYPE_ARY)
+ ((tpl_atyp*)(n->parent->data))->sz += sizeof(void*);
+ break;
+ case 'S':
+ if (in_structure) goto fail;
+ expect_lparen = 1;
+ ordinal = 1; /* index upcoming atoms in S(..) */
+ in_structure = 1+lparen_level; /* so we can tell where S fmt ends */
+ struct_addr = (char*)va_arg(ap, void*);
+ break;
+ case '$': /* nested structure */
+ if (!in_structure) goto fail;
+ expect_lparen = 1;
+ in_nested_structure++;
+ break;
+ case ')':
+ lparen_level--;
+ if (lparen_level < 0) goto fail;
+ if (*(c-1) == '(') goto fail;
+ if (in_nested_structure) in_nested_structure--;
+ else if (in_structure && (in_structure-1 == lparen_level)) {
+ /* calculate delta between contiguous structures in array */
+ struct_next = calc_field_addr(parent, struct_widest_node->type,
+ struct_addr, ordinal++);
+ inter_elt_len = struct_next - struct_addr;
+ in_structure = 0;
+ } else parent = parent->parent; /* rparen ends A() type, not S() type */
+ break;
+ case '(':
+ if (!expect_lparen) goto fail;
+ expect_lparen = 0;
+ lparen_level++;
+ break;
+ default:
+ tpl_hook.oops("unsupported option %c\n", *c);
+ goto fail;
+ }
+ c++;
+ }
+ if (lparen_level != 0) goto fail;
+
+ /* copy the format string, save for convenience */
+ ((tpl_root_data*)(root->data))->fmt = tpl_hook.malloc(EM_SAFE_STRLEN(fmt)+1);
+ if (((tpl_root_data*)(root->data))->fmt == NULL)
+ fatal_oom();
+ memcpy(((tpl_root_data*)(root->data))->fmt, fmt, EM_SAFE_STRLEN(fmt)+1);
+
+ return root;
fail:
- tpl_hook.oops("failed to parse %s\n", fmt);
- tpl_free(root);
- return NULL;
+ tpl_hook.oops("failed to parse %s\n", fmt);
+ tpl_free(root);
+ return NULL;
}
static int tpl_unmap_file(tpl_mmap_rec *mr)
{
- if (munmap(mr->text, mr->text_sz) == -1) {
- tpl_hook.oops("Failed to munmap: %s\n", strerror(errno));
- }
- close(mr->fd);
- mr->text = NULL;
- mr->text_sz = 0;
- return 0;
+ if (munmap(mr->text, mr->text_sz) == -1)
+ tpl_hook.oops("Failed to munmap: %s\n", strerror(errno));
+
+ close(mr->fd);
+ mr->text = NULL;
+ mr->text_sz = 0;
+ return 0;
}
static void tpl_free_keep_map(tpl_node *r)
{
- int mmap_bits = (TPL_RDONLY|TPL_FILE);
- int ufree_bits = (TPL_MEM|TPL_UFREE);
- tpl_node *nxtc, *c;
- int find_next_node = 0, looking, i;
- size_t sz;
-
- /* For mmap'd files, or for 'ufree' memory images , do appropriate release */
- if ((((tpl_root_data*)(r->data))->flags & mmap_bits) == mmap_bits) {
- tpl_unmap_file(&((tpl_root_data*)(r->data))->mmap);
- } else if ((((tpl_root_data*)(r->data))->flags & ufree_bits) == ufree_bits) {
- tpl_hook.free(((tpl_root_data*)(r->data))->mmap.text);
- }
-
- c = r->children;
- if (c) {
- while (c->type != TPL_TYPE_ROOT) { /* loop until we come back to root node */
- switch (c->type) {
- case TPL_TYPE_BIN:
- /* free any binary buffer hanging from tpl_bin */
- if (*((tpl_bin**)(c->data))) {
- if ((*((tpl_bin**)(c->data)))->addr) {
- tpl_hook.free((*((tpl_bin**)(c->data)))->addr);
- }
- *((tpl_bin**)c->data) = NULL; /* reset tpl_bin */
- }
- find_next_node = 1;
- break;
- case TPL_TYPE_STR:
- /* free any packed (copied) string */
- for (i = 0; i < c->num; i++) {
- char *str = ((char**)c->data)[i];
- if (str) {
- tpl_hook.free(str);
- ((char**)c->data)[i] = NULL;
- }
- }
- find_next_node = 1;
- break;
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- case TPL_TYPE_POUND:
- find_next_node = 1;
- break;
- case TPL_TYPE_ARY:
- c->ser_osz = 0; /* zero out the serialization output size */
-
- sz = ((tpl_atyp*)(c->data))->sz; /* save sz to use below */
- tpl_free_atyp(c, c->data);
-
- /* make new atyp */
- c->data = (tpl_atyp*)tpl_hook.malloc(sizeof(tpl_atyp));
- if (!c->data) fatal_oom();
- ((tpl_atyp*)(c->data))->num = 0;
- ((tpl_atyp*)(c->data))->sz = sz; /* restore bb datum sz */
- ((tpl_atyp*)(c->data))->bb = NULL;
- ((tpl_atyp*)(c->data))->bbtail = NULL;
- ((tpl_atyp*)(c->data))->cur = NULL;
-
- c = c->children;
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
-
- if (find_next_node) {
- find_next_node = 0;
- looking = 1;
- while (looking) {
- if (c->next) {
- nxtc = c->next;
- c = nxtc;
- looking = 0;
- } else {
- if (c->type == TPL_TYPE_ROOT) break; /* root node */
- else {
- nxtc = c->parent;
- c = nxtc;
- }
- }
- }
- }
- }
- }
-
- ((tpl_root_data*)(r->data))->flags = 0; /* reset flags */
+ int mmap_bits = (TPL_RDONLY|TPL_FILE);
+ int ufree_bits = (TPL_MEM|TPL_UFREE);
+ tpl_node *nxtc, *c;
+ int find_next_node = 0, looking, i;
+ size_t sz;
+
+ /* For mmap'd files, or for 'ufree' memory images , do appropriate release */
+ if ((((tpl_root_data*)(r->data))->flags & mmap_bits) == mmap_bits)
+ tpl_unmap_file(&((tpl_root_data*)(r->data))->mmap);
+ else if ((((tpl_root_data*)(r->data))->flags & ufree_bits) == ufree_bits)
+ tpl_hook.free(((tpl_root_data*)(r->data))->mmap.text);
+
+
+ c = r->children;
+ if (c) {
+ while (c->type != TPL_TYPE_ROOT) { /* loop until we come back to root node */
+ switch (c->type) {
+ case TPL_TYPE_BIN:
+ /* free any binary buffer hanging from tpl_bin */
+ if (*((tpl_bin**)(c->data))) {
+ if ((*((tpl_bin**)(c->data)))->addr)
+ tpl_hook.free((*((tpl_bin**)(c->data)))->addr);
+
+ *((tpl_bin**)c->data) = NULL; /* reset tpl_bin */
+ }
+ find_next_node = 1;
+ break;
+ case TPL_TYPE_STR:
+ /* free any packed (copied) string */
+ for (i = 0; i < c->num; i++) {
+ char *str = ((char**)c->data)[i];
+ if (str) {
+ tpl_hook.free(str);
+ ((char**)c->data)[i] = NULL;
+ }
+ }
+ find_next_node = 1;
+ break;
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ case TPL_TYPE_POUND:
+ find_next_node = 1;
+ break;
+ case TPL_TYPE_ARY:
+ c->ser_osz = 0; /* zero out the serialization output size */
+
+ sz = ((tpl_atyp*)(c->data))->sz; /* save sz to use below */
+ tpl_free_atyp(c, c->data);
+
+ /* make new atyp */
+ c->data = (tpl_atyp*)tpl_hook.malloc(sizeof(tpl_atyp));
+ if (!c->data) fatal_oom();
+ ((tpl_atyp*)(c->data))->num = 0;
+ ((tpl_atyp*)(c->data))->sz = sz; /* restore bb datum sz */
+ ((tpl_atyp*)(c->data))->bb = NULL;
+ ((tpl_atyp*)(c->data))->bbtail = NULL;
+ ((tpl_atyp*)(c->data))->cur = NULL;
+
+ c = c->children;
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+
+ if (find_next_node) {
+ find_next_node = 0;
+ looking = 1;
+ while (looking) {
+ if (c->next) {
+ nxtc = c->next;
+ c = nxtc;
+ looking = 0;
+ } else {
+ if (c->type == TPL_TYPE_ROOT) break; /* root node */
+ else {
+ nxtc = c->parent;
+ c = nxtc;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ((tpl_root_data*)(r->data))->flags = 0; /* reset flags */
}
TPL_API void tpl_free(tpl_node *r)
{
- int mmap_bits = (TPL_RDONLY|TPL_FILE);
- int ufree_bits = (TPL_MEM|TPL_UFREE);
- tpl_node *nxtc, *c;
- int find_next_node = 0, looking, i;
- tpl_pidx *pidx, *pidx_nxt;
-
- /* For mmap'd files, or for 'ufree' memory images , do appropriate release */
- if ((((tpl_root_data*)(r->data))->flags & mmap_bits) == mmap_bits) {
- tpl_unmap_file(&((tpl_root_data*)(r->data))->mmap);
- } else if ((((tpl_root_data*)(r->data))->flags & ufree_bits) == ufree_bits) {
- tpl_hook.free(((tpl_root_data*)(r->data))->mmap.text);
- }
-
- c = r->children;
- if (c) {
- while (c->type != TPL_TYPE_ROOT) { /* loop until we come back to root node */
- switch (c->type) {
- case TPL_TYPE_BIN:
- /* free any binary buffer hanging from tpl_bin */
- if (*((tpl_bin**)(c->data))) {
- if ((*((tpl_bin**)(c->data)))->sz != 0) {
- tpl_hook.free((*((tpl_bin**)(c->data)))->addr);
- }
- tpl_hook.free(*((tpl_bin**)c->data)); /* free tpl_bin */
- }
- tpl_hook.free(c->data); /* free tpl_bin* */
- find_next_node = 1;
- break;
- case TPL_TYPE_STR:
- /* free any packed (copied) string */
- for (i = 0; i < c->num; i++) {
- char *str = ((char**)c->data)[i];
- if (str) {
- tpl_hook.free(str);
- ((char**)c->data)[i] = NULL;
- }
- }
- tpl_hook.free(c->data);
- find_next_node = 1;
- break;
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- case TPL_TYPE_POUND:
- tpl_hook.free(c->data);
- find_next_node = 1;
- break;
- case TPL_TYPE_ARY:
- tpl_free_atyp(c, c->data);
- if (c->children) c = c->children; /* normal case */
- else find_next_node = 1; /* edge case, handle bad format A() */
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
-
- if (find_next_node) {
- find_next_node = 0;
- looking = 1;
- while (looking) {
- if (c->next) {
- nxtc = c->next;
- tpl_hook.free(c);
- c = nxtc;
- looking = 0;
- } else {
- if (c->type == TPL_TYPE_ROOT) break; /* root node */
- else {
- nxtc = c->parent;
- tpl_hook.free(c);
- c = nxtc;
- }
- }
- }
- }
- }
- }
-
- /* free root */
- for (pidx = ((tpl_root_data*)(r->data))->pidx; pidx; pidx = pidx_nxt) {
- pidx_nxt = pidx->next;
- tpl_hook.free(pidx);
- }
- tpl_hook.free(((tpl_root_data*)(r->data))->fmt);
- if (((tpl_root_data*)(r->data))->num_fxlens > 0) {
- tpl_hook.free(((tpl_root_data*)(r->data))->fxlens);
- }
- tpl_hook.free(r->data); /* tpl_root_data */
- tpl_hook.free(r);
+ int mmap_bits = (TPL_RDONLY|TPL_FILE);
+ int ufree_bits = (TPL_MEM|TPL_UFREE);
+ tpl_node *nxtc, *c;
+ int find_next_node = 0, looking, i;
+ tpl_pidx *pidx, *pidx_nxt;
+
+ /* For mmap'd files, or for 'ufree' memory images , do appropriate release */
+ if ((((tpl_root_data*)(r->data))->flags & mmap_bits) == mmap_bits)
+ tpl_unmap_file(&((tpl_root_data*)(r->data))->mmap);
+ else if ((((tpl_root_data*)(r->data))->flags & ufree_bits) == ufree_bits)
+ tpl_hook.free(((tpl_root_data*)(r->data))->mmap.text);
+
+ c = r->children;
+ if (c) {
+ while (c->type != TPL_TYPE_ROOT) { /* loop until we come back to root node */
+ switch (c->type) {
+ case TPL_TYPE_BIN:
+ /* free any binary buffer hanging from tpl_bin */
+ if (*((tpl_bin**)(c->data))) {
+ if ((*((tpl_bin**)(c->data)))->sz != 0)
+ tpl_hook.free((*((tpl_bin**)(c->data)))->addr);
+
+ tpl_hook.free(*((tpl_bin**)c->data)); /* free tpl_bin */
+ }
+ tpl_hook.free(c->data); /* free tpl_bin* */
+ find_next_node = 1;
+ break;
+ case TPL_TYPE_STR:
+ /* free any packed (copied) string */
+ for (i = 0; i < c->num; i++) {
+ char *str = ((char**)c->data)[i];
+ if (str) {
+ tpl_hook.free(str);
+ ((char**)c->data)[i] = NULL;
+ }
+ }
+ tpl_hook.free(c->data);
+ find_next_node = 1;
+ break;
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ case TPL_TYPE_POUND:
+ tpl_hook.free(c->data);
+ find_next_node = 1;
+ break;
+ case TPL_TYPE_ARY:
+ tpl_free_atyp(c, c->data);
+ if (c->children) c = c->children; /* normal case */
+ else find_next_node = 1; /* edge case, handle bad format A() */
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+
+ if (find_next_node) {
+ find_next_node = 0;
+ looking = 1;
+ while (looking) {
+ if (c->next) {
+ nxtc = c->next;
+ tpl_hook.free(c);
+ c = nxtc;
+ looking = 0;
+ } else {
+ if (c->type == TPL_TYPE_ROOT) break; /* root node */
+ else {
+ nxtc = c->parent;
+ tpl_hook.free(c);
+ c = nxtc;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* free root */
+ for (pidx = ((tpl_root_data*)(r->data))->pidx; pidx; pidx = pidx_nxt) {
+ pidx_nxt = pidx->next;
+ tpl_hook.free(pidx);
+ }
+ tpl_hook.free(((tpl_root_data*)(r->data))->fmt);
+ if (((tpl_root_data*)(r->data))->num_fxlens > 0)
+ tpl_hook.free(((tpl_root_data*)(r->data))->fxlens);
+
+ tpl_hook.free(r->data); /* tpl_root_data */
+ tpl_hook.free(r);
}
/* Find the i'th packable ('A' node) */
static tpl_node *tpl_find_i(tpl_node *n, int i)
{
- int j = 0;
- tpl_pidx *pidx;
- if (n->type != TPL_TYPE_ROOT) return NULL;
- if (i == 0) return n; /* packable 0 is root */
- for (pidx = ((tpl_root_data*)(n->data))->pidx; pidx; pidx = pidx->next) {
- if (++j == i) return pidx->node;
- }
- return NULL;
+ int j = 0;
+ tpl_pidx *pidx;
+ if (n->type != TPL_TYPE_ROOT) return NULL;
+ if (i == 0) return n; /* packable 0 is root */
+ for (pidx = ((tpl_root_data*)(n->data))->pidx; pidx; pidx = pidx->next) {
+ if (++j == i) return pidx->node;
+ }
+ return NULL;
}
static void *tpl_cpv(void *datav, void *data, size_t sz)
{
- if (sz > 0) memcpy(datav, data, sz);
- return (void*)((uintptr_t)datav + sz);
+ if (sz > 0) memcpy(datav, data, sz);
+ return (void*)((uintptr_t)datav + sz);
}
static void *tpl_extend_backbone(tpl_node *n)
{
- tpl_backbone *bb;
- bb = (tpl_backbone*)tpl_hook.malloc(sizeof(tpl_backbone) +
- ((tpl_atyp*)(n->data))->sz); /* datum hangs on coattails of bb */
- if (!bb) fatal_oom();
+ tpl_backbone *bb;
+ bb = (tpl_backbone*)tpl_hook.malloc(sizeof(tpl_backbone) +
+ ((tpl_atyp*)(n->data))->sz); /* datum hangs on coattails of bb */
+ if (!bb) fatal_oom();
#if __STDC_VERSION__ < 199901
- bb->data = (char*)((uintptr_t)bb + sizeof(tpl_backbone));
+ bb->data = (char*)((uintptr_t)bb + sizeof(tpl_backbone));
#endif
- memset(bb->data, 0, ((tpl_atyp*)(n->data))->sz);
- bb->next = NULL;
- /* Add the new backbone to the tail, also setting head if necessary */
- if (((tpl_atyp*)(n->data))->bb == NULL) {
- ((tpl_atyp*)(n->data))->bb = bb;
- ((tpl_atyp*)(n->data))->bbtail = bb;
- } else {
- ((tpl_atyp*)(n->data))->bbtail->next = bb;
- ((tpl_atyp*)(n->data))->bbtail = bb;
- }
-
- ((tpl_atyp*)(n->data))->num++;
- return bb->data;
+ memset(bb->data, 0, ((tpl_atyp*)(n->data))->sz);
+ bb->next = NULL;
+ /* Add the new backbone to the tail, also setting head if necessary */
+ if (((tpl_atyp*)(n->data))->bb == NULL) {
+ ((tpl_atyp*)(n->data))->bb = bb;
+ ((tpl_atyp*)(n->data))->bbtail = bb;
+ } else {
+ ((tpl_atyp*)(n->data))->bbtail->next = bb;
+ ((tpl_atyp*)(n->data))->bbtail = bb;
+ }
+
+ ((tpl_atyp*)(n->data))->num++;
+ return bb->data;
}
/* Get the format string corresponding to a given tpl (root node) */
static char *tpl_fmt(tpl_node *r)
{
- return ((tpl_root_data*)(r->data))->fmt;
+ return ((tpl_root_data*)(r->data))->fmt;
}
/* Get the fmt # lengths as a contiguous buffer of ints (length num_fxlens) */
static int *tpl_fxlens(tpl_node *r, int *num_fxlens)
{
- *num_fxlens = ((tpl_root_data*)(r->data))->num_fxlens;
- return ((tpl_root_data*)(r->data))->fxlens;
+ *num_fxlens = ((tpl_root_data*)(r->data))->num_fxlens;
+ return ((tpl_root_data*)(r->data))->fxlens;
}
/* called when serializing an 'A' type node into a buffer which has
*/
static void *tpl_dump_atyp(tpl_node *n, tpl_atyp* at, void *dv)
{
- tpl_backbone *bb;
- tpl_node *c;
- void *datav;
- uint32_t slen;
- tpl_bin *binp;
- char *strp;
- tpl_atyp *atypp;
- tpl_pound_data *pd;
- int i;
- size_t itermax;
-
- /* handle 'A' nodes */
- dv = tpl_cpv(dv, &at->num, sizeof(uint32_t)); /* array len */
- for (bb = at->bb; bb; bb = bb->next) {
- datav = bb->data;
- c = n->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- dv = tpl_cpv(dv, datav, tpl_types[c->type].sz * c->num);
- datav = (void*)((uintptr_t)datav + tpl_types[c->type].sz * c->num);
- break;
- case TPL_TYPE_BIN:
- /* dump the buffer length followed by the buffer */
- memcpy(&binp, datav, sizeof(tpl_bin*)); /* cp to aligned */
- slen = binp->sz;
- dv = tpl_cpv(dv, &slen, sizeof(uint32_t));
- dv = tpl_cpv(dv, binp->addr, slen);
- datav = (void*)((uintptr_t)datav + sizeof(tpl_bin*));
- break;
- case TPL_TYPE_STR:
- /* dump the string length followed by the string */
- for (i = 0; i < c->num; i++) {
- memcpy(&strp, datav, sizeof(char*)); /* cp to aligned */
- slen = strp ? (EM_SAFE_STRLEN(strp)+1) : 0;
- dv = tpl_cpv(dv, &slen, sizeof(uint32_t));
- if (slen > 1) dv = tpl_cpv(dv, strp, slen-1);
- datav = (void*)((uintptr_t)datav + sizeof(char*));
- }
- break;
- case TPL_TYPE_ARY:
- memcpy(&atypp, datav, sizeof(tpl_atyp*)); /* cp to aligned */
- dv = tpl_dump_atyp(c, atypp, dv);
- datav = (void*)((uintptr_t)datav + sizeof(void*));
- break;
- case TPL_TYPE_POUND:
- /* iterate over the preceding nodes */
- pd = (tpl_pound_data*)c->data;
- itermax = c->num;
- if (++(pd->iternum) < itermax) {
- c = pd->iter_start_node;
- continue;
- } else { /* loop complete. */
- pd->iternum = 0;
- }
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- c = c->next;
- }
- }
- return dv;
+ tpl_backbone *bb;
+ tpl_node *c;
+ void *datav;
+ uint32_t slen;
+ tpl_bin *binp;
+ char *strp;
+ tpl_atyp *atypp;
+ tpl_pound_data *pd;
+ int i;
+ size_t itermax;
+
+ /* handle 'A' nodes */
+ dv = tpl_cpv(dv, &at->num, sizeof(uint32_t)); /* array len */
+ for (bb = at->bb; bb; bb = bb->next) {
+ datav = bb->data;
+ c = n->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ dv = tpl_cpv(dv, datav, tpl_types[c->type].sz * c->num);
+ datav = (void*)((uintptr_t)datav + tpl_types[c->type].sz * c->num);
+ break;
+ case TPL_TYPE_BIN:
+ /* dump the buffer length followed by the buffer */
+ memcpy(&binp, datav, sizeof(tpl_bin*)); /* cp to aligned */
+ slen = binp->sz;
+ dv = tpl_cpv(dv, &slen, sizeof(uint32_t));
+ dv = tpl_cpv(dv, binp->addr, slen);
+ datav = (void*)((uintptr_t)datav + sizeof(tpl_bin*));
+ break;
+ case TPL_TYPE_STR:
+ /* dump the string length followed by the string */
+ for (i = 0; i < c->num; i++) {
+ memcpy(&strp, datav, sizeof(char*)); /* cp to aligned */
+ slen = strp ? (EM_SAFE_STRLEN(strp)+1) : 0;
+ dv = tpl_cpv(dv, &slen, sizeof(uint32_t));
+ if (slen > 1) dv = tpl_cpv(dv, strp, slen-1);
+ datav = (void*)((uintptr_t)datav + sizeof(char*));
+ }
+ break;
+ case TPL_TYPE_ARY:
+ memcpy(&atypp, datav, sizeof(tpl_atyp*)); /* cp to aligned */
+ dv = tpl_dump_atyp(c, atypp, dv);
+ datav = (void*)((uintptr_t)datav + sizeof(void*));
+ break;
+ case TPL_TYPE_POUND:
+ /* iterate over the preceding nodes */
+ pd = (tpl_pound_data*)c->data;
+ itermax = c->num;
+ if (++(pd->iternum) < itermax) {
+ c = pd->iter_start_node;
+ continue;
+ } else { /* loop complete. */
+ pd->iternum = 0;
+ }
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ c = c->next;
+ }
+ }
+ return dv;
}
/* figure the serialization output size needed for tpl whose root is n*/
static size_t tpl_ser_osz(tpl_node *n)
{
- tpl_node *c, *np;
- size_t sz, itermax;
- tpl_bin *binp;
- char *strp;
- tpl_pound_data *pd;
- int i;
-
- /* handle the root node ONLY (subtree's ser_osz have been bubbled-up) */
- if (n->type != TPL_TYPE_ROOT) {
- tpl_hook.fatal("internal error: tpl_ser_osz on non-root node\n");
- }
-
- sz = n->ser_osz; /* start with fixed overhead, already stored */
- c = n->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- sz += tpl_types[c->type].sz * c->num;
- break;
- case TPL_TYPE_BIN:
- sz += sizeof(uint32_t); /* binary buf len */
- memcpy(&binp, c->data, sizeof(tpl_bin*)); /* cp to aligned */
- sz += binp->sz;
- break;
- case TPL_TYPE_STR:
- for (i = 0; i < c->num; i++) {
- sz += sizeof(uint32_t); /* string len */
- memcpy(&strp, &((char**)c->data)[i], sizeof(char*)); /* cp to aligned */
- sz += strp ? EM_SAFE_STRLEN(strp) : 0;
- }
- break;
- case TPL_TYPE_ARY:
- sz += sizeof(uint32_t); /* array len */
- sz += c->ser_osz; /* bubbled-up child array ser_osz */
- break;
- case TPL_TYPE_POUND:
- /* iterate over the preceding nodes */
- itermax = c->num;
- pd = (tpl_pound_data*)c->data;
- if (++(pd->iternum) < itermax) {
- for (np = pd->iter_start_node; np != c; np = np->next) {
- np->data = (char*)(np->data) +
- (tpl_types[np->type].sz * np->num);
- }
- c = pd->iter_start_node;
- continue;
- } else { /* loop complete. */
- pd->iternum = 0;
- for (np = pd->iter_start_node; np != c; np = np->next) {
- np->data = (char*)(np->data) - ((itermax-1) *
- tpl_types[np->type].sz *
- np->num);
- }
- }
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- c = c->next;
- }
- return sz;
+ tpl_node *c, *np;
+ size_t sz, itermax;
+ tpl_bin *binp;
+ char *strp;
+ tpl_pound_data *pd;
+ int i;
+
+ /* handle the root node ONLY (subtree's ser_osz have been bubbled-up) */
+ if (n->type != TPL_TYPE_ROOT)
+ tpl_hook.fatal("internal error: tpl_ser_osz on non-root node\n");
+
+ sz = n->ser_osz; /* start with fixed overhead, already stored */
+ c = n->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ sz += tpl_types[c->type].sz * c->num;
+ break;
+ case TPL_TYPE_BIN:
+ sz += sizeof(uint32_t); /* binary buf len */
+ memcpy(&binp, c->data, sizeof(tpl_bin*)); /* cp to aligned */
+ sz += binp->sz;
+ break;
+ case TPL_TYPE_STR:
+ for (i = 0; i < c->num; i++) {
+ sz += sizeof(uint32_t); /* string len */
+ memcpy(&strp, &((char**)c->data)[i], sizeof(char*)); /* cp to aligned */
+ sz += strp ? EM_SAFE_STRLEN(strp) : 0;
+ }
+ break;
+ case TPL_TYPE_ARY:
+ sz += sizeof(uint32_t); /* array len */
+ sz += c->ser_osz; /* bubbled-up child array ser_osz */
+ break;
+ case TPL_TYPE_POUND:
+ /* iterate over the preceding nodes */
+ itermax = c->num;
+ pd = (tpl_pound_data*)c->data;
+ if (++(pd->iternum) < itermax) {
+ for (np = pd->iter_start_node; np != c; np = np->next) {
+ np->data = (char*)(np->data) +
+ (tpl_types[np->type].sz * np->num);
+ }
+ c = pd->iter_start_node;
+ continue;
+ } else { /* loop complete. */
+ pd->iternum = 0;
+ for (np = pd->iter_start_node; np != c; np = np->next) {
+ np->data = (char*)(np->data) - ((itermax-1) *
+ tpl_types[np->type].sz *
+ np->num);
+ }
+ }
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ c = c->next;
+ }
+ return sz;
}
TPL_API int tpl_dump(tpl_node *r, int mode, ...)
{
- va_list ap;
- char *filename, *bufv;
- void **addr_out, *buf, *pa_addr;
- int fd, rc = 0;
- size_t sz, *sz_out, pa_sz;
-
- if (((tpl_root_data*)(r->data))->flags & TPL_RDONLY) { /* unusual */
- tpl_hook.oops("error: tpl_dump called for a loaded tpl\n");
- return -1;
- }
-
- sz = tpl_ser_osz(r); /* compute the size needed to serialize */
-
- va_start(ap, mode);
- if (mode & TPL_FILE) {
- filename = va_arg(ap, char*);
- fd = tpl_mmap_output_file(filename, sz, &buf);
- if (fd == -1) rc = -1;
- else {
- rc = tpl_dump_to_mem(r, buf, sz);
- if (msync(buf, sz, MS_SYNC) == -1) {
- tpl_hook.oops("msync failed on fd %d: %s\n", fd, strerror(errno));
- }
- if (munmap(buf, sz) == -1) {
- tpl_hook.oops("munmap failed on fd %d: %s\n", fd, strerror(errno));
- }
- close(fd);
- }
- } else if (mode & TPL_FD) {
- fd = va_arg(ap, int);
- if ((buf = tpl_hook.malloc(sz)) == NULL) fatal_oom();
- tpl_dump_to_mem(r, buf, sz);
- bufv = buf;
- do {
- rc = write(fd, bufv, sz);
- if (rc > 0) {
- sz -= rc;
- bufv += rc;
- } else if (rc == -1) {
- if (errno == EINTR || errno == EAGAIN) continue;
- tpl_hook.oops("error writing to fd %d: %s\n", fd, strerror(errno));
- free(buf);
- va_end(ap);
- return -1;
- }
- } while (sz > 0);
- free(buf);
- rc = 0;
- } else if (mode & TPL_MEM) {
- if (mode & TPL_PREALLOCD) { /* caller allocated */
- pa_addr = (void*)va_arg(ap, void*);
- pa_sz = va_arg(ap, size_t);
- if (pa_sz < sz) {
- tpl_hook.oops("tpl_dump: buffer too small, need %d bytes\n", sz);
- va_end(ap);
- return -1;
- }
- rc = tpl_dump_to_mem(r, pa_addr, sz);
- } else { /* we allocate */
- addr_out = (void**)va_arg(ap, void*);
- sz_out = va_arg(ap, size_t*);
- if ((buf = tpl_hook.malloc(sz)) == NULL) fatal_oom();
- *sz_out = sz;
- *addr_out = buf;
- rc = tpl_dump_to_mem(r, buf, sz);
- }
- } else if (mode & TPL_GETSIZE) {
- sz_out = va_arg(ap, size_t*);
- *sz_out = sz;
- } else {
- tpl_hook.oops("unsupported tpl_dump mode %d\n", mode);
- rc = -1;
- }
- va_end(ap);
- return rc;
+ va_list ap;
+ char *filename, *bufv;
+ void **addr_out, *buf, *pa_addr;
+ int fd, rc = 0;
+ size_t sz, *sz_out, pa_sz;
+
+ if (((tpl_root_data*)(r->data))->flags & TPL_RDONLY) { /* unusual */
+ tpl_hook.oops("error: tpl_dump called for a loaded tpl\n");
+ return -1;
+ }
+
+ sz = tpl_ser_osz(r); /* compute the size needed to serialize */
+
+ va_start(ap, mode);
+ if (mode & TPL_FILE) {
+ filename = va_arg(ap, char*);
+ fd = tpl_mmap_output_file(filename, sz, &buf);
+ if (fd == -1) rc = -1;
+ else {
+ rc = tpl_dump_to_mem(r, buf, sz);
+ if (msync(buf, sz, MS_SYNC) == -1)
+ tpl_hook.oops("msync failed on fd %d: %s\n", fd, strerror(errno));
+
+ if (munmap(buf, sz) == -1)
+ tpl_hook.oops("munmap failed on fd %d: %s\n", fd, strerror(errno));
+
+ close(fd);
+ }
+ } else if (mode & TPL_FD) {
+ fd = va_arg(ap, int);
+ if ((buf = tpl_hook.malloc(sz)) == NULL) fatal_oom();
+ tpl_dump_to_mem(r, buf, sz);
+ bufv = buf;
+ do {
+ rc = write(fd, bufv, sz);
+ if (rc > 0) {
+ sz -= rc;
+ bufv += rc;
+ } else if (rc == -1) {
+ if (errno == EINTR || errno == EAGAIN) continue;
+ tpl_hook.oops("error writing to fd %d: %s\n", fd, strerror(errno));
+ free(buf);
+ va_end(ap);
+ return -1;
+ }
+ } while (sz > 0);
+ free(buf);
+ rc = 0;
+ } else if (mode & TPL_MEM) {
+ if (mode & TPL_PREALLOCD) { /* caller allocated */
+ pa_addr = (void*)va_arg(ap, void*);
+ pa_sz = va_arg(ap, size_t);
+ if (pa_sz < sz) {
+ tpl_hook.oops("tpl_dump: buffer too small, need %d bytes\n", sz);
+ va_end(ap);
+ return -1;
+ }
+ rc = tpl_dump_to_mem(r, pa_addr, sz);
+ } else { /* we allocate */
+ addr_out = (void**)va_arg(ap, void*);
+ sz_out = va_arg(ap, size_t*);
+ if ((buf = tpl_hook.malloc(sz)) == NULL) fatal_oom();
+ *sz_out = sz;
+ *addr_out = buf;
+ rc = tpl_dump_to_mem(r, buf, sz);
+ }
+ } else if (mode & TPL_GETSIZE) {
+ sz_out = va_arg(ap, size_t*);
+ *sz_out = sz;
+ } else {
+ tpl_hook.oops("unsupported tpl_dump mode %d\n", mode);
+ rc = -1;
+ }
+ va_end(ap);
+ return rc;
}
/* This function expects the caller to have set up a memory buffer of
*/
static int tpl_dump_to_mem(tpl_node *r, void *addr, size_t sz)
{
- uint32_t slen, sz32;
- int *fxlens, num_fxlens, i;
- void *dv;
- char *fmt, flags;
- tpl_node *c, *np;
- tpl_pound_data *pd;
- size_t itermax;
-
- fmt = tpl_fmt(r);
- flags = 0;
- if (tpl_cpu_bigendian()) flags |= TPL_FL_BIGENDIAN;
- if (strchr(fmt, 's')) flags |= TPL_FL_NULLSTRINGS;
- sz32 = sz;
-
- dv = addr;
- dv = tpl_cpv(dv, TPL_MAGIC, 3); /* copy tpl magic prefix */
- dv = tpl_cpv(dv, &flags, 1); /* copy flags byte */
- dv = tpl_cpv(dv, &sz32, sizeof(uint32_t));/* overall length (inclusive) */
- dv = tpl_cpv(dv, fmt, EM_SAFE_STRLEN(fmt)+1); /* copy format with NUL-term */
- fxlens = tpl_fxlens(r, &num_fxlens);
- dv = tpl_cpv(dv, fxlens, num_fxlens*sizeof(uint32_t));/* fmt # lengths */
-
- /* serialize the tpl content, iterating over direct children of root */
- c = r->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- dv = tpl_cpv(dv, c->data, tpl_types[c->type].sz * c->num);
- break;
- case TPL_TYPE_BIN:
- slen = (*(tpl_bin**)(c->data))->sz;
- dv = tpl_cpv(dv, &slen, sizeof(uint32_t)); /* buffer len */
- dv = tpl_cpv(dv, (*(tpl_bin**)(c->data))->addr, slen); /* buf */
- break;
- case TPL_TYPE_STR:
- for (i = 0; i < c->num; i++) {
- char *str = ((char**)c->data)[i];
- slen = str ? EM_SAFE_STRLEN(str)+1 : 0;
- dv = tpl_cpv(dv, &slen, sizeof(uint32_t)); /* string len */
- if (slen > 1) dv = tpl_cpv(dv, str, slen-1); /*string*/
- }
- break;
- case TPL_TYPE_ARY:
- dv = tpl_dump_atyp(c, (tpl_atyp*)c->data, dv);
- break;
- case TPL_TYPE_POUND:
- pd = (tpl_pound_data*)c->data;
- itermax = c->num;
- if (++(pd->iternum) < itermax) {
-
- /* in start or midst of loop. advance data pointers. */
- for (np = pd->iter_start_node; np != c; np = np->next) {
- np->data = (char*)(np->data) +
- (tpl_types[np->type].sz * np->num);
- }
- /* do next iteration */
- c = pd->iter_start_node;
- continue;
-
- } else { /* loop complete. */
-
- /* reset iteration index and addr/data pointers. */
- pd->iternum = 0;
- for (np = pd->iter_start_node; np != c; np = np->next) {
- np->data = (char*)(np->data) - ((itermax-1) *
- tpl_types[np->type].sz *
- np->num);
- }
-
- }
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- c = c->next;
- }
-
- return 0;
+ uint32_t slen, sz32;
+ int *fxlens, num_fxlens, i;
+ void *dv;
+ char *fmt, flags;
+ tpl_node *c, *np;
+ tpl_pound_data *pd;
+ size_t itermax;
+
+ fmt = tpl_fmt(r);
+ flags = 0;
+ if (tpl_cpu_bigendian()) flags |= TPL_FL_BIGENDIAN;
+ if (strchr(fmt, 's')) flags |= TPL_FL_NULLSTRINGS;
+ sz32 = sz;
+
+ dv = addr;
+ dv = tpl_cpv(dv, TPL_MAGIC, 3); /* copy tpl magic prefix */
+ dv = tpl_cpv(dv, &flags, 1); /* copy flags byte */
+ dv = tpl_cpv(dv, &sz32, sizeof(uint32_t));/* overall length (inclusive) */
+ dv = tpl_cpv(dv, fmt, EM_SAFE_STRLEN(fmt)+1); /* copy format with NUL-term */
+ fxlens = tpl_fxlens(r, &num_fxlens);
+ dv = tpl_cpv(dv, fxlens, num_fxlens*sizeof(uint32_t));/* fmt # lengths */
+
+ /* serialize the tpl content, iterating over direct children of root */
+ c = r->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ dv = tpl_cpv(dv, c->data, tpl_types[c->type].sz * c->num);
+ break;
+ case TPL_TYPE_BIN:
+ slen = (*(tpl_bin**)(c->data))->sz;
+ dv = tpl_cpv(dv, &slen, sizeof(uint32_t)); /* buffer len */
+ dv = tpl_cpv(dv, (*(tpl_bin**)(c->data))->addr, slen); /* buf */
+ break;
+ case TPL_TYPE_STR:
+ for (i = 0; i < c->num; i++) {
+ char *str = ((char**)c->data)[i];
+ slen = str ? EM_SAFE_STRLEN(str)+1 : 0;
+ dv = tpl_cpv(dv, &slen, sizeof(uint32_t)); /* string len */
+ if (slen > 1) dv = tpl_cpv(dv, str, slen-1); /*string*/
+ }
+ break;
+ case TPL_TYPE_ARY:
+ dv = tpl_dump_atyp(c, (tpl_atyp*)c->data, dv);
+ break;
+ case TPL_TYPE_POUND:
+ pd = (tpl_pound_data*)c->data;
+ itermax = c->num;
+ if (++(pd->iternum) < itermax) {
+
+ /* in start or midst of loop. advance data pointers. */
+ for (np = pd->iter_start_node; np != c; np = np->next) {
+ np->data = (char*)(np->data) +
+ (tpl_types[np->type].sz * np->num);
+ }
+ /* do next iteration */
+ c = pd->iter_start_node;
+ continue;
+
+ } else { /* loop complete. */
+
+ /* reset iteration index and addr/data pointers. */
+ pd->iternum = 0;
+ for (np = pd->iter_start_node; np != c; np = np->next) {
+ np->data = (char*)(np->data) - ((itermax-1) *
+ tpl_types[np->type].sz *
+ np->num);
+ }
+
+ }
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ c = c->next;
+ }
+
+ return 0;
}
static int tpl_cpu_bigendian()
{
- unsigned i = 1;
- char *c;
- c = (char*)&i;
- return (c[0] == 1 ? 0 : 1);
+ unsigned i = 1;
+ char *c;
+ c = (char*)&i;
+ return (c[0] == 1 ? 0 : 1);
}
*/
static int tpl_sanity(tpl_node *r, int excess_ok)
{
- uint32_t intlsz;
- int found_nul = 0, rc, octothorpes = 0, num_fxlens, *fxlens, flen;
- void *d, *dv;
- char intlflags, *fmt, c, *mapfmt;
- size_t bufsz, serlen;
-
- d = ((tpl_root_data*)(r->data))->mmap.text;
- bufsz = ((tpl_root_data*)(r->data))->mmap.text_sz;
-
- dv = d;
- if (bufsz < (4 + sizeof(uint32_t) + 1)) return ERR_NOT_MINSIZE; /* min sz : magic+flags+len+nul */
- if (memcmp(dv, TPL_MAGIC, 3) != 0) return ERR_MAGIC_MISMATCH; /* missing tpl magic prefix */
- if (tpl_needs_endian_swap(dv)) ((tpl_root_data*)(r->data))->flags |= TPL_XENDIAN;
- dv = (void*)((uintptr_t)dv + 3);
- memcpy(&intlflags, dv, sizeof(char)); /* extract flags */
- if (intlflags & ~TPL_SUPPORTED_BITFLAGS) return ERR_UNSUPPORTED_FLAGS;
- /* TPL1.3 stores strings with a "length+1" prefix to discern NULL strings from
- empty strings from non-empty strings; TPL1.2 only handled the latter two.
- So we need to be mindful of which string format we're reading from. */
- if (!(intlflags & TPL_FL_NULLSTRINGS)) {
- ((tpl_root_data*)(r->data))->flags |= TPL_OLD_STRING_FMT;
- }
- dv = (void*)((uintptr_t)dv + 1);
- memcpy(&intlsz, dv, sizeof(uint32_t)); /* extract internal size */
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN) tpl_byteswap(&intlsz, sizeof(uint32_t));
- if (!excess_ok && (intlsz != bufsz)) return ERR_INCONSISTENT_SZ; /* inconsisent buffer/internal size */
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
-
- /* dv points to the start of the format string. Look for nul w/in buf sz */
- fmt = (char*)dv;
- while ((uintptr_t)dv-(uintptr_t)d < bufsz && !found_nul) {
- if ((c = *(char*)dv) != '\0') {
- if (strchr(tpl_fmt_chars, c) == NULL)
- return ERR_FMT_INVALID; /* invalid char in format string */
- if ((c = *(char*)dv) == '#') octothorpes++;
- dv = (void*)((uintptr_t)dv + 1);
- } else found_nul = 1;
- }
- if (!found_nul) return ERR_FMT_MISSING_NUL; /* runaway format string */
- dv = (void*)((uintptr_t)dv + 1); /* advance to octothorpe lengths buffer */
-
- /* compare the map format to the format of this tpl image */
- mapfmt = tpl_fmt(r);
- rc = strcmp(mapfmt, fmt);
- if (rc != 0) return ERR_FMT_MISMATCH;
-
- /* compare octothorpe lengths in image to the mapped values */
- if ((((uintptr_t)dv + (octothorpes * 4)) - (uintptr_t)d) > bufsz) return ERR_INCONSISTENT_SZ4;
- fxlens = tpl_fxlens(r, &num_fxlens); /* mapped fxlens */
- while (num_fxlens--) {
- memcpy(&flen, dv, sizeof(uint32_t)); /* stored flen */
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN) tpl_byteswap(&flen, sizeof(uint32_t));
- if (flen != *fxlens) return ERR_FLEN_MISMATCH;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- fxlens++;
- }
-
- /* dv now points to beginning of data */
- rc = tpl_serlen(r, r, dv, &serlen); /* get computed serlen of data part */
- if (rc == -1) return ERR_INCONSISTENT_SZ2; /* internal inconsistency in tpl image */
- serlen += ((uintptr_t)dv - (uintptr_t)d); /* add back serlen of preamble part */
- if (excess_ok && (bufsz < serlen)) return ERR_INCONSISTENT_SZ3;
- if (!excess_ok && (serlen != bufsz)) return ERR_INCONSISTENT_SZ3; /* buffer/internal sz exceeds serlen */
- return 0;
+ uint32_t intlsz;
+ int found_nul = 0, rc, octothorpes = 0, num_fxlens, *fxlens, flen;
+ void *d, *dv;
+ char intlflags, *fmt, c, *mapfmt;
+ size_t bufsz, serlen;
+
+ d = ((tpl_root_data*)(r->data))->mmap.text;
+ bufsz = ((tpl_root_data*)(r->data))->mmap.text_sz;
+
+ dv = d;
+ if (bufsz < (4 + sizeof(uint32_t) + 1)) return ERR_NOT_MINSIZE; /* min sz : magic+flags+len+nul */
+ if (memcmp(dv, TPL_MAGIC, 3) != 0) return ERR_MAGIC_MISMATCH; /* missing tpl magic prefix */
+ if (tpl_needs_endian_swap(dv)) ((tpl_root_data*)(r->data))->flags |= TPL_XENDIAN;
+ dv = (void*)((uintptr_t)dv + 3);
+ memcpy(&intlflags, dv, sizeof(char)); /* extract flags */
+ if (intlflags & ~TPL_SUPPORTED_BITFLAGS) return ERR_UNSUPPORTED_FLAGS;
+ /* TPL1.3 stores strings with a "length+1" prefix to discern NULL strings from
+ empty strings from non-empty strings; TPL1.2 only handled the latter two.
+ So we need to be mindful of which string format we're reading from. */
+ if (!(intlflags & TPL_FL_NULLSTRINGS))
+ ((tpl_root_data*)(r->data))->flags |= TPL_OLD_STRING_FMT;
+
+ dv = (void*)((uintptr_t)dv + 1);
+ memcpy(&intlsz, dv, sizeof(uint32_t)); /* extract internal size */
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN) tpl_byteswap(&intlsz, sizeof(uint32_t));
+ if (!excess_ok && (intlsz != bufsz)) return ERR_INCONSISTENT_SZ; /* inconsisent buffer/internal size */
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+
+ /* dv points to the start of the format string. Look for nul w/in buf sz */
+ fmt = (char*)dv;
+ while ((uintptr_t)dv-(uintptr_t)d < bufsz && !found_nul) {
+ if ((c = *(char*)dv) != '\0') {
+ if (strchr(tpl_fmt_chars, c) == NULL)
+ return ERR_FMT_INVALID; /* invalid char in format string */
+ if ((c = *(char*)dv) == '#') octothorpes++;
+ dv = (void*)((uintptr_t)dv + 1);
+ } else found_nul = 1;
+ }
+ if (!found_nul) return ERR_FMT_MISSING_NUL; /* runaway format string */
+ dv = (void*)((uintptr_t)dv + 1); /* advance to octothorpe lengths buffer */
+
+ /* compare the map format to the format of this tpl image */
+ mapfmt = tpl_fmt(r);
+ rc = strcmp(mapfmt, fmt);
+ if (rc != 0) return ERR_FMT_MISMATCH;
+
+ /* compare octothorpe lengths in image to the mapped values */
+ if ((((uintptr_t)dv + (octothorpes * 4)) - (uintptr_t)d) > bufsz) return ERR_INCONSISTENT_SZ4;
+ fxlens = tpl_fxlens(r, &num_fxlens); /* mapped fxlens */
+ while (num_fxlens--) {
+ memcpy(&flen, dv, sizeof(uint32_t)); /* stored flen */
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN) tpl_byteswap(&flen, sizeof(uint32_t));
+ if (flen != *fxlens) return ERR_FLEN_MISMATCH;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ fxlens++;
+ }
+
+ /* dv now points to beginning of data */
+ rc = tpl_serlen(r, r, dv, &serlen); /* get computed serlen of data part */
+ if (rc == -1) return ERR_INCONSISTENT_SZ2; /* internal inconsistency in tpl image */
+ serlen += ((uintptr_t)dv - (uintptr_t)d); /* add back serlen of preamble part */
+ if (excess_ok && (bufsz < serlen)) return ERR_INCONSISTENT_SZ3;
+ if (!excess_ok && (serlen != bufsz)) return ERR_INCONSISTENT_SZ3; /* buffer/internal sz exceeds serlen */
+ return 0;
}
static void *tpl_find_data_start(void *d)
{
- int octothorpes = 0;
- d = (void*)((uintptr_t)d + 4); /* skip TPL_MAGIC and flags byte */
- d = (void*)((uintptr_t)d + 4); /* skip int32 overall len */
- while (*(char*)d != '\0') {
- if (*(char*)d == '#') octothorpes++;
- d = (void*)((uintptr_t)d + 1);
- }
- d = (void*)((uintptr_t)d + 1); /* skip NUL */
- d = (void*)((uintptr_t)d + (octothorpes * sizeof(uint32_t))); /* skip # array lens */
- return d;
+ int octothorpes = 0;
+ d = (void*)((uintptr_t)d + 4); /* skip TPL_MAGIC and flags byte */
+ d = (void*)((uintptr_t)d + 4); /* skip int32 overall len */
+ while (*(char*)d != '\0') {
+ if (*(char*)d == '#') octothorpes++;
+ d = (void*)((uintptr_t)d + 1);
+ }
+ d = (void*)((uintptr_t)d + 1); /* skip NUL */
+ d = (void*)((uintptr_t)d + (octothorpes * sizeof(uint32_t))); /* skip # array lens */
+ return d;
}
static int tpl_needs_endian_swap(void *d)
{
- char *c;
- int cpu_is_bigendian;
- c = (char*)d;
- cpu_is_bigendian = tpl_cpu_bigendian();
- return ((c[3] & TPL_FL_BIGENDIAN) == cpu_is_bigendian) ? 0 : 1;
+ char *c;
+ int cpu_is_bigendian;
+ c = (char*)d;
+ cpu_is_bigendian = tpl_cpu_bigendian();
+ return ((c[3] & TPL_FL_BIGENDIAN) == cpu_is_bigendian) ? 0 : 1;
}
static size_t tpl_size_for(char c)
{
- int i;
- for (i = 0; i < sizeof(tpl_types)/sizeof(tpl_types[0]); i++) {
- if (tpl_types[i].c == c) return tpl_types[i].sz;
- }
- return 0;
+ int i;
+ for (i = 0; i < sizeof(tpl_types)/sizeof(tpl_types[0]); i++) {
+ if (tpl_types[i].c == c) return tpl_types[i].sz;
+ }
+ return 0;
}
TPL_API char* tpl_peek(int mode, ...)
{
- va_list ap;
- int xendian = 0, found_nul = 0, old_string_format = 0;
- char *filename = NULL, *datapeek_f = NULL, *datapeek_c, *datapeek_s;
- void *addr = NULL, *dv, *datapeek_p = NULL;
- size_t sz = 0, fmt_len, first_atom, num_fxlens = 0;
- uint32_t datapeek_ssz, datapeek_csz, datapeek_flen;
- tpl_mmap_rec mr = {0, NULL, 0};
- char *fmt, *fmt_cpy = NULL, c;
- uint32_t intlsz, **fxlens = NULL, *num_fxlens_out = NULL, *fxlensv;
-
- va_start(ap, mode);
- if ((mode & TPL_FXLENS) && (mode & TPL_DATAPEEK)) {
- tpl_hook.oops("TPL_FXLENS and TPL_DATAPEEK mutually exclusive\n");
- goto fail;
- }
- if (mode & TPL_FILE) filename = va_arg(ap, char *);
- else if (mode & TPL_MEM) {
- addr = va_arg(ap, void *);
- sz = va_arg(ap, size_t);
- } else {
- tpl_hook.oops("unsupported tpl_peek mode %d\n", mode);
- goto fail;
- }
- if (mode & TPL_DATAPEEK) {
- datapeek_f = va_arg(ap, char*);
- }
- if (mode & TPL_FXLENS) {
- num_fxlens_out = va_arg(ap, uint32_t *);
- fxlens = va_arg(ap, uint32_t **);
- *num_fxlens_out = 0;
- *fxlens = NULL;
- }
-
- if (mode & TPL_FILE) {
- if (tpl_mmap_file(filename, &mr) != 0) {
- tpl_hook.oops("tpl_peek failed for file %s\n", filename);
- goto fail;
- }
- addr = mr.text;
- sz = mr.text_sz;
- }
-
- dv = addr;
- if (sz < (4 + sizeof(uint32_t) + 1)) goto fail; /* min sz */
- if (memcmp(dv, TPL_MAGIC, 3) != 0) goto fail; /* missing tpl magic prefix */
- if (tpl_needs_endian_swap(dv)) xendian = 1;
- if ((((char*)dv)[3] & TPL_FL_NULLSTRINGS) == 0) old_string_format = 1;
- dv = (void*)((uintptr_t)dv + 4);
- memcpy(&intlsz, dv, sizeof(uint32_t)); /* extract internal size */
- if (xendian) tpl_byteswap(&intlsz, sizeof(uint32_t));
- if (intlsz != sz) goto fail; /* inconsisent buffer/internal size */
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
-
- /* dv points to the start of the format string. Look for nul w/in buf sz */
- fmt = (char*)dv;
- while ((uintptr_t)dv-(uintptr_t)addr < sz && !found_nul) {
- if ((c = *(char*)dv) == '\0') {
- found_nul = 1;
- } else if (c == '#') {
- num_fxlens++;
- }
- dv = (void*)((uintptr_t)dv + 1);
- }
- if (!found_nul) goto fail; /* runaway format string */
- fmt_len = (char*)dv - fmt; /* include space for \0 */
- fmt_cpy = tpl_hook.malloc(fmt_len);
- if (fmt_cpy == NULL) {
- fatal_oom();
- }
- memcpy(fmt_cpy, fmt, fmt_len);
-
- /* retrieve the octothorpic lengths if requested */
- if (num_fxlens > 0) {
- if (sz < ((uintptr_t)dv + (num_fxlens * sizeof(uint32_t)) - (uintptr_t)addr)) {
- goto fail;
- }
- }
- if ((mode & TPL_FXLENS) && (num_fxlens > 0)) {
- *fxlens = tpl_hook.malloc(num_fxlens * sizeof(uint32_t));
- if (*fxlens == NULL) tpl_hook.fatal("out of memory");
- *num_fxlens_out = num_fxlens;
- fxlensv = *fxlens;
- while (num_fxlens--) {
- memcpy(fxlensv, dv, sizeof(uint32_t));
- if (xendian) tpl_byteswap(fxlensv, sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- fxlensv++;
- }
- }
- /* if caller requested, peek into the specified data elements */
- if (mode & TPL_DATAPEEK) {
-
- first_atom = strspn(fmt, "S()"); /* skip any leading S() */
-
- datapeek_flen = EM_SAFE_STRLEN(datapeek_f);
- if (strspn(datapeek_f, tpl_datapeek_ok_chars) < datapeek_flen) {
- tpl_hook.oops("invalid TPL_DATAPEEK format: %s\n", datapeek_f);
- tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
- goto fail;
- }
-
- if (strncmp(&fmt[first_atom], datapeek_f, datapeek_flen) != 0) {
- tpl_hook.oops("TPL_DATAPEEK format mismatches tpl iamge\n");
- tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
- goto fail;
- }
-
- /* advance to data start, then copy out requested elements */
- dv = (void*)((uintptr_t)dv + (num_fxlens * sizeof(uint32_t)));
- for (datapeek_c = datapeek_f; *datapeek_c != '\0'; datapeek_c++) {
- datapeek_p = va_arg(ap, void*);
- if (*datapeek_c == 's') { /* special handling for strings */
- if ((uintptr_t)dv-(uintptr_t)addr + sizeof(uint32_t) > sz) {
- tpl_hook.oops("tpl_peek: tpl has insufficient length\n");
- tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
- goto fail;
- }
- memcpy(&datapeek_ssz, dv, sizeof(uint32_t)); /* get slen */
- if (xendian) tpl_byteswap(&datapeek_ssz, sizeof(uint32_t));
- if (old_string_format) datapeek_ssz++;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t)); /* adv. to str */
- if (datapeek_ssz == 0) datapeek_s = NULL;
- else {
- if ((uintptr_t)dv-(uintptr_t)addr + datapeek_ssz-1 > sz) {
- tpl_hook.oops("tpl_peek: tpl has insufficient length\n");
- tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
- goto fail;
- }
- datapeek_s = tpl_hook.malloc(datapeek_ssz);
- if (datapeek_s == NULL) fatal_oom();
- memcpy(datapeek_s, dv, datapeek_ssz-1);
- datapeek_s[datapeek_ssz-1] = '\0';
- dv = (void*)((uintptr_t)dv + datapeek_ssz-1);
- }
- *(char**)datapeek_p = datapeek_s;
- } else {
- datapeek_csz = tpl_size_for(*datapeek_c);
- if ((uintptr_t)dv-(uintptr_t)addr + datapeek_csz > sz) {
- tpl_hook.oops("tpl_peek: tpl has insufficient length\n");
- tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
- goto fail;
- }
- memcpy(datapeek_p, dv, datapeek_csz);
- if (xendian) tpl_byteswap(datapeek_p, datapeek_csz);
- dv = (void*)((uintptr_t)dv + datapeek_csz);
- }
- }
- }
+ va_list ap;
+ int xendian = 0, found_nul = 0, old_string_format = 0;
+ char *filename = NULL, *datapeek_f = NULL, *datapeek_c, *datapeek_s;
+ void *addr = NULL, *dv, *datapeek_p = NULL;
+ size_t sz = 0, fmt_len, first_atom, num_fxlens = 0;
+ uint32_t datapeek_ssz, datapeek_csz, datapeek_flen;
+ tpl_mmap_rec mr = {0, NULL, 0};
+ char *fmt, *fmt_cpy = NULL, c;
+ uint32_t intlsz, **fxlens = NULL, *num_fxlens_out = NULL, *fxlensv;
+
+ va_start(ap, mode);
+ if ((mode & TPL_FXLENS) && (mode & TPL_DATAPEEK)) {
+ tpl_hook.oops("TPL_FXLENS and TPL_DATAPEEK mutually exclusive\n");
+ goto fail;
+ }
+ if (mode & TPL_FILE) filename = va_arg(ap, char *);
+ else if (mode & TPL_MEM) {
+ addr = va_arg(ap, void *);
+ sz = va_arg(ap, size_t);
+ } else {
+ tpl_hook.oops("unsupported tpl_peek mode %d\n", mode);
+ goto fail;
+ }
+ if (mode & TPL_DATAPEEK)
+ datapeek_f = va_arg(ap, char*);
+
+ if (mode & TPL_FXLENS) {
+ num_fxlens_out = va_arg(ap, uint32_t *);
+ fxlens = va_arg(ap, uint32_t **);
+ *num_fxlens_out = 0;
+ *fxlens = NULL;
+ }
+
+ if (mode & TPL_FILE) {
+ if (tpl_mmap_file(filename, &mr) != 0) {
+ tpl_hook.oops("tpl_peek failed for file %s\n", filename);
+ goto fail;
+ }
+ addr = mr.text;
+ sz = mr.text_sz;
+ }
+
+ dv = addr;
+ if (sz < (4 + sizeof(uint32_t) + 1)) goto fail; /* min sz */
+ if (memcmp(dv, TPL_MAGIC, 3) != 0) goto fail; /* missing tpl magic prefix */
+ if (tpl_needs_endian_swap(dv)) xendian = 1;
+ if ((((char*)dv)[3] & TPL_FL_NULLSTRINGS) == 0) old_string_format = 1;
+ dv = (void*)((uintptr_t)dv + 4);
+ memcpy(&intlsz, dv, sizeof(uint32_t)); /* extract internal size */
+ if (xendian) tpl_byteswap(&intlsz, sizeof(uint32_t));
+ if (intlsz != sz) goto fail; /* inconsisent buffer/internal size */
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+
+ /* dv points to the start of the format string. Look for nul w/in buf sz */
+ fmt = (char*)dv;
+ while ((uintptr_t)dv-(uintptr_t)addr < sz && !found_nul) {
+ if ((c = *(char*)dv) == '\0')
+ found_nul = 1;
+ else if (c == '#')
+ num_fxlens++;
+
+ dv = (void*)((uintptr_t)dv + 1);
+ }
+ if (!found_nul) goto fail; /* runaway format string */
+ fmt_len = (char*)dv - fmt; /* include space for \0 */
+ fmt_cpy = tpl_hook.malloc(fmt_len);
+ if (fmt_cpy == NULL)
+ fatal_oom();
+
+ memcpy(fmt_cpy, fmt, fmt_len);
+
+ /* retrieve the octothorpic lengths if requested */
+ if (num_fxlens > 0) {
+ if (sz < ((uintptr_t)dv + (num_fxlens * sizeof(uint32_t)) - (uintptr_t)addr))
+ goto fail;
+ }
+ if ((mode & TPL_FXLENS) && (num_fxlens > 0)) {
+ *fxlens = tpl_hook.malloc(num_fxlens * sizeof(uint32_t));
+ if (*fxlens == NULL) tpl_hook.fatal("out of memory");
+ *num_fxlens_out = num_fxlens;
+ fxlensv = *fxlens;
+ while (num_fxlens--) {
+ memcpy(fxlensv, dv, sizeof(uint32_t));
+ if (xendian) tpl_byteswap(fxlensv, sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ fxlensv++;
+ }
+ }
+ /* if caller requested, peek into the specified data elements */
+ if (mode & TPL_DATAPEEK) {
+
+ first_atom = strspn(fmt, "S()"); /* skip any leading S() */
+
+ datapeek_flen = EM_SAFE_STRLEN(datapeek_f);
+ if (strspn(datapeek_f, tpl_datapeek_ok_chars) < datapeek_flen) {
+ tpl_hook.oops("invalid TPL_DATAPEEK format: %s\n", datapeek_f);
+ tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
+ goto fail;
+ }
+
+ if (strncmp(&fmt[first_atom], datapeek_f, datapeek_flen) != 0) {
+ tpl_hook.oops("TPL_DATAPEEK format mismatches tpl iamge\n");
+ tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
+ goto fail;
+ }
+
+ /* advance to data start, then copy out requested elements */
+ dv = (void*)((uintptr_t)dv + (num_fxlens * sizeof(uint32_t)));
+ for (datapeek_c = datapeek_f; *datapeek_c != '\0'; datapeek_c++) {
+ datapeek_p = va_arg(ap, void*);
+ if (*datapeek_c == 's') { /* special handling for strings */
+ if ((uintptr_t)dv-(uintptr_t)addr + sizeof(uint32_t) > sz) {
+ tpl_hook.oops("tpl_peek: tpl has insufficient length\n");
+ tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
+ goto fail;
+ }
+ memcpy(&datapeek_ssz, dv, sizeof(uint32_t)); /* get slen */
+ if (xendian) tpl_byteswap(&datapeek_ssz, sizeof(uint32_t));
+ if (old_string_format) datapeek_ssz++;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t)); /* adv. to str */
+ if (datapeek_ssz == 0) datapeek_s = NULL;
+ else {
+ if ((uintptr_t)dv-(uintptr_t)addr + datapeek_ssz-1 > sz) {
+ tpl_hook.oops("tpl_peek: tpl has insufficient length\n");
+ tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
+ goto fail;
+ }
+ datapeek_s = tpl_hook.malloc(datapeek_ssz);
+ if (datapeek_s == NULL) fatal_oom();
+ memcpy(datapeek_s, dv, datapeek_ssz-1);
+ datapeek_s[datapeek_ssz-1] = '\0';
+ dv = (void*)((uintptr_t)dv + datapeek_ssz-1);
+ }
+ *(char**)datapeek_p = datapeek_s;
+ } else {
+ datapeek_csz = tpl_size_for(*datapeek_c);
+ if ((uintptr_t)dv-(uintptr_t)addr + datapeek_csz > sz) {
+ tpl_hook.oops("tpl_peek: tpl has insufficient length\n");
+ tpl_hook.free(fmt_cpy); fmt_cpy = NULL; /* fail */
+ goto fail;
+ }
+ memcpy(datapeek_p, dv, datapeek_csz);
+ if (xendian) tpl_byteswap(datapeek_p, datapeek_csz);
+ dv = (void*)((uintptr_t)dv + datapeek_csz);
+ }
+ }
+ }
fail:
- va_end(ap);
- if ((mode & TPL_FILE) && mr.text != NULL) tpl_unmap_file(&mr);
- return fmt_cpy;
+ va_end(ap);
+ if ((mode & TPL_FILE) && mr.text != NULL) tpl_unmap_file(&mr);
+ return fmt_cpy;
}
/* tpl_jot(TPL_FILE, "file.tpl", "si", &s, &i); */
/* tpl_jot(TPL_FD, fd, "si", &s, &i); */
TPL_API int tpl_jot(int mode, ...)
{
- va_list ap;
- char *filename, *fmt;
- size_t *sz;
- int fd, rc = 0;
- void **buf;
- tpl_node *tn;
-
- va_start(ap, mode);
- if (mode & TPL_FILE) {
- filename = va_arg(ap, char*);
- fmt = va_arg(ap, char*);
- tn = tpl_map_va(fmt, ap);
- if (tn == NULL) {rc = -1; goto fail; }
- tpl_pack(tn, 0);
- rc = tpl_dump(tn, TPL_FILE, filename);
- tpl_free(tn);
- } else if (mode & TPL_MEM) {
- buf = va_arg(ap, void*);
- sz = va_arg(ap, size_t*);
- fmt = va_arg(ap, char*);
- tn = tpl_map_va(fmt, ap);
- if (tn == NULL) {rc = -1; goto fail; }
- tpl_pack(tn, 0);
- rc = tpl_dump(tn, TPL_MEM, buf, sz);
- tpl_free(tn);
- } else if (mode & TPL_FD) {
- fd = va_arg(ap, int);
- fmt = va_arg(ap, char*);
- tn = tpl_map_va(fmt, ap);
- if (tn == NULL) {rc = -1; goto fail; }
- tpl_pack(tn, 0);
- rc = tpl_dump(tn, TPL_FD, fd);
- tpl_free(tn);
- } else {
- tpl_hook.fatal("invalid tpl_jot mode\n");
- }
+ va_list ap;
+ char *filename, *fmt;
+ size_t *sz;
+ int fd, rc = 0;
+ void **buf;
+ tpl_node *tn;
+
+ va_start(ap, mode);
+ if (mode & TPL_FILE) {
+ filename = va_arg(ap, char*);
+ fmt = va_arg(ap, char*);
+ tn = tpl_map_va(fmt, ap);
+ if (tn == NULL) {rc = -1; goto fail; }
+ tpl_pack(tn, 0);
+ rc = tpl_dump(tn, TPL_FILE, filename);
+ tpl_free(tn);
+ } else if (mode & TPL_MEM) {
+ buf = va_arg(ap, void*);
+ sz = va_arg(ap, size_t*);
+ fmt = va_arg(ap, char*);
+ tn = tpl_map_va(fmt, ap);
+ if (tn == NULL) {rc = -1; goto fail; }
+ tpl_pack(tn, 0);
+ rc = tpl_dump(tn, TPL_MEM, buf, sz);
+ tpl_free(tn);
+ } else if (mode & TPL_FD) {
+ fd = va_arg(ap, int);
+ fmt = va_arg(ap, char*);
+ tn = tpl_map_va(fmt, ap);
+ if (tn == NULL) {rc = -1; goto fail; }
+ tpl_pack(tn, 0);
+ rc = tpl_dump(tn, TPL_FD, fd);
+ tpl_free(tn);
+ } else {
+ tpl_hook.fatal("invalid tpl_jot mode\n");
+ }
fail:
- va_end(ap);
- return rc;
+ va_end(ap);
+ return rc;
}
TPL_API int tpl_load(tpl_node *r, int mode, ...)
{
- va_list ap;
- int rc = 0, fd = 0;
- char *filename = NULL;
- void *addr;
- size_t sz;
-
- va_start(ap, mode);
- if (mode & TPL_FILE) filename = va_arg(ap, char *);
- else if (mode & TPL_MEM) {
- addr = va_arg(ap, void *);
- sz = va_arg(ap, size_t);
- } else if (mode & TPL_FD) {
- fd = va_arg(ap, int);
- } else {
- tpl_hook.oops("unsupported tpl_load mode %d\n", mode);
- va_end(ap);
- return -1;
- }
- va_end(ap);
-
- if (r->type != TPL_TYPE_ROOT) {
- tpl_hook.oops("error: tpl_load to non-root node\n");
- return -1;
- }
- if (((tpl_root_data*)(r->data))->flags & (TPL_WRONLY|TPL_RDONLY)) {
- /* already packed or loaded, so reset it as if newly mapped */
- tpl_free_keep_map(r);
- }
- if (mode & TPL_FILE) {
- if (tpl_mmap_file(filename, &((tpl_root_data*)(r->data))->mmap) != 0) {
- tpl_hook.oops("tpl_load failed for file %s\n", filename);
- return -1;
- }
- if ((rc = tpl_sanity(r, (mode & TPL_EXCESS_OK))) != 0) {
- if (rc == ERR_FMT_MISMATCH) {
- tpl_hook.oops("%s: format signature mismatch\n", filename);
- } else if (rc == ERR_FLEN_MISMATCH) {
- tpl_hook.oops("%s: array lengths mismatch\n", filename);
- } else {
- tpl_hook.oops("%s: not a valid tpl file\n", filename);
- }
- tpl_unmap_file(&((tpl_root_data*)(r->data))->mmap);
- return -1;
- }
- ((tpl_root_data*)(r->data))->flags = (TPL_FILE | TPL_RDONLY);
- } else if (mode & TPL_MEM) {
- ((tpl_root_data*)(r->data))->mmap.text = addr;
- ((tpl_root_data*)(r->data))->mmap.text_sz = sz;
- if ((rc = tpl_sanity(r, (mode & TPL_EXCESS_OK))) != 0) {
- if (rc == ERR_FMT_MISMATCH) {
- tpl_hook.oops("format signature mismatch\n");
- } else {
- tpl_hook.oops("not a valid tpl file\n");
- }
- return -1;
- }
- ((tpl_root_data*)(r->data))->flags = (TPL_MEM | TPL_RDONLY);
- if (mode & TPL_UFREE) ((tpl_root_data*)(r->data))->flags |= TPL_UFREE;
- } else if (mode & TPL_FD) {
- /* if fd read succeeds, resulting mem img is used for load */
- if (tpl_gather(TPL_GATHER_BLOCKING, fd, &addr, &sz) > 0) {
- return tpl_load(r, TPL_MEM|TPL_UFREE, addr, sz);
- } else return -1;
- } else {
- tpl_hook.oops("invalid tpl_load mode %d\n", mode);
- return -1;
- }
- /* this applies to TPL_MEM or TPL_FILE */
- if (tpl_needs_endian_swap(((tpl_root_data*)(r->data))->mmap.text))
- ((tpl_root_data*)(r->data))->flags |= TPL_XENDIAN;
- tpl_unpackA0(r); /* prepare root A nodes for use */
- return 0;
+ va_list ap;
+ int rc = 0, fd = 0;
+ char *filename = NULL;
+ void *addr;
+ size_t sz;
+
+ va_start(ap, mode);
+ if (mode & TPL_FILE) filename = va_arg(ap, char *);
+ else if (mode & TPL_MEM) {
+ addr = va_arg(ap, void *);
+ sz = va_arg(ap, size_t);
+ } else if (mode & TPL_FD) {
+ fd = va_arg(ap, int);
+ } else {
+ tpl_hook.oops("unsupported tpl_load mode %d\n", mode);
+ va_end(ap);
+ return -1;
+ }
+ va_end(ap);
+
+ if (r->type != TPL_TYPE_ROOT) {
+ tpl_hook.oops("error: tpl_load to non-root node\n");
+ return -1;
+ }
+ if (((tpl_root_data*)(r->data))->flags & (TPL_WRONLY|TPL_RDONLY)) {
+ /* already packed or loaded, so reset it as if newly mapped */
+ tpl_free_keep_map(r);
+ }
+ if (mode & TPL_FILE) {
+ if (tpl_mmap_file(filename, &((tpl_root_data*)(r->data))->mmap) != 0) {
+ tpl_hook.oops("tpl_load failed for file %s\n", filename);
+ return -1;
+ }
+ if ((rc = tpl_sanity(r, (mode & TPL_EXCESS_OK))) != 0) {
+ if (rc == ERR_FMT_MISMATCH)
+ tpl_hook.oops("%s: format signature mismatch\n", filename);
+ else if (rc == ERR_FLEN_MISMATCH)
+ tpl_hook.oops("%s: array lengths mismatch\n", filename);
+ else
+ tpl_hook.oops("%s: not a valid tpl file\n", filename);
+
+ tpl_unmap_file(&((tpl_root_data*)(r->data))->mmap);
+ return -1;
+ }
+ ((tpl_root_data*)(r->data))->flags = (TPL_FILE | TPL_RDONLY);
+ } else if (mode & TPL_MEM) {
+ ((tpl_root_data*)(r->data))->mmap.text = addr;
+ ((tpl_root_data*)(r->data))->mmap.text_sz = sz;
+ if ((rc = tpl_sanity(r, (mode & TPL_EXCESS_OK))) != 0) {
+ if (rc == ERR_FMT_MISMATCH)
+ tpl_hook.oops("format signature mismatch\n");
+ else
+ tpl_hook.oops("not a valid tpl file\n");
+
+ return -1;
+ }
+ ((tpl_root_data*)(r->data))->flags = (TPL_MEM | TPL_RDONLY);
+ if (mode & TPL_UFREE) ((tpl_root_data*)(r->data))->flags |= TPL_UFREE;
+ } else if (mode & TPL_FD) {
+ /* if fd read succeeds, resulting mem img is used for load */
+ if (tpl_gather(TPL_GATHER_BLOCKING, fd, &addr, &sz) > 0)
+ return tpl_load(r, TPL_MEM|TPL_UFREE, addr, sz);
+ else
+ return -1;
+ } else {
+ tpl_hook.oops("invalid tpl_load mode %d\n", mode);
+ return -1;
+ }
+ /* this applies to TPL_MEM or TPL_FILE */
+ if (tpl_needs_endian_swap(((tpl_root_data*)(r->data))->mmap.text))
+ ((tpl_root_data*)(r->data))->flags |= TPL_XENDIAN;
+ tpl_unpackA0(r); /* prepare root A nodes for use */
+ return 0;
}
TPL_API int tpl_Alen(tpl_node *r, int i)
{
- tpl_node *n;
-
- n = tpl_find_i(r, i);
- if (n == NULL) {
- tpl_hook.oops("invalid index %d to tpl_unpack\n", i);
- return -1;
- }
- if (n->type != TPL_TYPE_ARY) return -1;
- return ((tpl_atyp*)(n->data))->num;
+ tpl_node *n;
+
+ n = tpl_find_i(r, i);
+ if (n == NULL) {
+ tpl_hook.oops("invalid index %d to tpl_unpack\n", i);
+ return -1;
+ }
+ if (n->type != TPL_TYPE_ARY) return -1;
+ return ((tpl_atyp*)(n->data))->num;
}
static void tpl_free_atyp(tpl_node *n, tpl_atyp *atyp)
{
- tpl_backbone *bb, *bbnxt;
- tpl_node *c;
- void *dv;
- tpl_bin *binp;
- tpl_atyp *atypp;
- char *strp;
- size_t itermax;
- tpl_pound_data *pd;
- int i;
-
- bb = atyp->bb;
- while (bb) {
- bbnxt = bb->next;
- dv = bb->data;
- c = n->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz*c->num);
- break;
- case TPL_TYPE_BIN:
- memcpy(&binp, dv, sizeof(tpl_bin*)); /* cp to aligned */
- if (binp->addr) tpl_hook.free(binp->addr); /* free buf */
- tpl_hook.free(binp); /* free tpl_bin */
- dv = (void*)((uintptr_t)dv + sizeof(tpl_bin*));
- break;
- case TPL_TYPE_STR:
- for (i = 0; i < c->num; i++) {
- memcpy(&strp, dv, sizeof(char*)); /* cp to aligned */
- if (strp) tpl_hook.free(strp); /* free string */
- dv = (void*)((uintptr_t)dv + sizeof(char*));
- }
- break;
- case TPL_TYPE_POUND:
- /* iterate over the preceding nodes */
- itermax = c->num;
- pd = (tpl_pound_data*)c->data;
- if (++(pd->iternum) < itermax) {
- c = pd->iter_start_node;
- continue;
- } else { /* loop complete. */
- pd->iternum = 0;
- }
- break;
- case TPL_TYPE_ARY:
- memcpy(&atypp, dv, sizeof(tpl_atyp*)); /* cp to aligned */
- tpl_free_atyp(c, atypp); /* free atyp */
- dv = (void*)((uintptr_t)dv + sizeof(void*));
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- c = c->next;
- }
- tpl_hook.free(bb);
- bb = bbnxt;
- }
- tpl_hook.free(atyp);
+ tpl_backbone *bb, *bbnxt;
+ tpl_node *c;
+ void *dv;
+ tpl_bin *binp;
+ tpl_atyp *atypp;
+ char *strp;
+ size_t itermax;
+ tpl_pound_data *pd;
+ int i;
+
+ bb = atyp->bb;
+ while (bb) {
+ bbnxt = bb->next;
+ dv = bb->data;
+ c = n->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz*c->num);
+ break;
+ case TPL_TYPE_BIN:
+ memcpy(&binp, dv, sizeof(tpl_bin*)); /* cp to aligned */
+ if (binp->addr) tpl_hook.free(binp->addr); /* free buf */
+ tpl_hook.free(binp); /* free tpl_bin */
+ dv = (void*)((uintptr_t)dv + sizeof(tpl_bin*));
+ break;
+ case TPL_TYPE_STR:
+ for (i = 0; i < c->num; i++) {
+ memcpy(&strp, dv, sizeof(char*)); /* cp to aligned */
+ if (strp) tpl_hook.free(strp); /* free string */
+ dv = (void*)((uintptr_t)dv + sizeof(char*));
+ }
+ break;
+ case TPL_TYPE_POUND:
+ /* iterate over the preceding nodes */
+ itermax = c->num;
+ pd = (tpl_pound_data*)c->data;
+ if (++(pd->iternum) < itermax) {
+ c = pd->iter_start_node;
+ continue;
+ } else { /* loop complete. */
+ pd->iternum = 0;
+ }
+ break;
+ case TPL_TYPE_ARY:
+ memcpy(&atypp, dv, sizeof(tpl_atyp*)); /* cp to aligned */
+ tpl_free_atyp(c, atypp); /* free atyp */
+ dv = (void*)((uintptr_t)dv + sizeof(void*));
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ c = c->next;
+ }
+ tpl_hook.free(bb);
+ bb = bbnxt;
+ }
+ tpl_hook.free(atyp);
}
/* determine (by walking) byte length of serialized r/A node at address dv
*/
static int tpl_serlen(tpl_node *r, tpl_node *n, void *dv, size_t *serlen)
{
- uint32_t slen;
- int num = 0, fidx;
- tpl_node *c;
- size_t len = 0, alen, buf_past, itermax;
- tpl_pound_data *pd;
-
- buf_past = ((uintptr_t)((tpl_root_data*)(r->data))->mmap.text +
- ((tpl_root_data*)(r->data))->mmap.text_sz);
-
- if (n->type == TPL_TYPE_ROOT) num = 1;
- else if (n->type == TPL_TYPE_ARY) {
- if ((uintptr_t)dv + sizeof(uint32_t) > buf_past) return -1;
- memcpy(&num, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&num, sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- len += sizeof(uint32_t);
- } else tpl_hook.fatal("internal error in tpl_serlen\n");
-
- while (num-- > 0) {
- c = n->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- for (fidx = 0; fidx < c->num; fidx++) { /* octothorpe support */
- if ((uintptr_t)dv + tpl_types[c->type].sz > buf_past) return -1;
- dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz);
- len += tpl_types[c->type].sz;
- }
- break;
- case TPL_TYPE_BIN:
- len += sizeof(uint32_t);
- if ((uintptr_t)dv + sizeof(uint32_t) > buf_past) return -1;
- memcpy(&slen, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&slen, sizeof(uint32_t));
- len += slen;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- if ((uintptr_t)dv + slen > buf_past) return -1;
- dv = (void*)((uintptr_t)dv + slen);
- break;
- case TPL_TYPE_STR:
- for (fidx = 0; fidx < c->num; fidx++) { /* octothorpe support */
- len += sizeof(uint32_t);
- if ((uintptr_t)dv + sizeof(uint32_t) > buf_past) return -1;
- memcpy(&slen, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&slen, sizeof(uint32_t));
- if (!(((tpl_root_data*)(r->data))->flags & TPL_OLD_STRING_FMT))
- slen = (slen > 1) ? (slen-1) : 0;
- len += slen;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- if ((uintptr_t)dv + slen > buf_past) return -1;
- dv = (void*)((uintptr_t)dv + slen);
- }
- break;
- case TPL_TYPE_ARY:
- if (tpl_serlen(r, c, dv, &alen) == -1) return -1;
- dv = (void*)((uintptr_t)dv + alen);
- len += alen;
- break;
- case TPL_TYPE_POUND:
- /* iterate over the preceding nodes */
- itermax = c->num;
- pd = (tpl_pound_data*)c->data;
- if (++(pd->iternum) < itermax) {
- c = pd->iter_start_node;
- continue;
- } else { /* loop complete. */
- pd->iternum = 0;
- }
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- c = c->next;
- }
- }
- *serlen = len;
- return 0;
+ uint32_t slen;
+ int num = 0, fidx;
+ tpl_node *c;
+ size_t len = 0, alen, buf_past, itermax;
+ tpl_pound_data *pd;
+
+ buf_past = ((uintptr_t)((tpl_root_data*)(r->data))->mmap.text +
+ ((tpl_root_data*)(r->data))->mmap.text_sz);
+
+ if (n->type == TPL_TYPE_ROOT) num = 1;
+ else if (n->type == TPL_TYPE_ARY) {
+ if ((uintptr_t)dv + sizeof(uint32_t) > buf_past) return -1;
+ memcpy(&num, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&num, sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ len += sizeof(uint32_t);
+ } else tpl_hook.fatal("internal error in tpl_serlen\n");
+
+ while (num-- > 0) {
+ c = n->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ for (fidx = 0; fidx < c->num; fidx++) { /* octothorpe support */
+ if ((uintptr_t)dv + tpl_types[c->type].sz > buf_past) return -1;
+ dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz);
+ len += tpl_types[c->type].sz;
+ }
+ break;
+ case TPL_TYPE_BIN:
+ len += sizeof(uint32_t);
+ if ((uintptr_t)dv + sizeof(uint32_t) > buf_past) return -1;
+ memcpy(&slen, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&slen, sizeof(uint32_t));
+ len += slen;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ if ((uintptr_t)dv + slen > buf_past) return -1;
+ dv = (void*)((uintptr_t)dv + slen);
+ break;
+ case TPL_TYPE_STR:
+ for (fidx = 0; fidx < c->num; fidx++) { /* octothorpe support */
+ len += sizeof(uint32_t);
+ if ((uintptr_t)dv + sizeof(uint32_t) > buf_past) return -1;
+ memcpy(&slen, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&slen, sizeof(uint32_t));
+ if (!(((tpl_root_data*)(r->data))->flags & TPL_OLD_STRING_FMT))
+ slen = (slen > 1) ? (slen-1) : 0;
+ len += slen;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ if ((uintptr_t)dv + slen > buf_past) return -1;
+ dv = (void*)((uintptr_t)dv + slen);
+ }
+ break;
+ case TPL_TYPE_ARY:
+ if (tpl_serlen(r, c, dv, &alen) == -1) return -1;
+ dv = (void*)((uintptr_t)dv + alen);
+ len += alen;
+ break;
+ case TPL_TYPE_POUND:
+ /* iterate over the preceding nodes */
+ itermax = c->num;
+ pd = (tpl_pound_data*)c->data;
+ if (++(pd->iternum) < itermax) {
+ c = pd->iter_start_node;
+ continue;
+ } else { /* loop complete. */
+ pd->iternum = 0;
+ }
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ c = c->next;
+ }
+ }
+ *serlen = len;
+ return 0;
}
static int tpl_mmap_output_file(char *filename, size_t sz, void **text_out)
{
- void *text;
- int fd, perms;
+ void *text;
+ int fd, perms;
#ifndef _WIN32
- perms = S_IRUSR|S_IWUSR|S_IWGRP|S_IRGRP|S_IROTH; /* ug+w o+r */
- fd = open(filename, O_CREAT|O_TRUNC|O_RDWR, perms);
+ perms = S_IRUSR|S_IWUSR|S_IWGRP|S_IRGRP|S_IROTH; /* ug+w o+r */
+ fd = open(filename, O_CREAT|O_TRUNC|O_RDWR, perms);
#else
perms = _S_IWRITE;
- fd = _open(filename, _O_CREAT|_O_TRUNC|_O_RDWR, perms);
+ fd = _open(filename, _O_CREAT|_O_TRUNC|_O_RDWR, perms);
#endif
- if (fd == -1) {
- tpl_hook.oops("Couldn't open file %s: %s\n", filename, strerror(errno));
- return -1;
- }
-
- text = mmap(0, sz, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- if (text == MAP_FAILED) {
- tpl_hook.oops("Failed to mmap %s: %s\n", filename, strerror(errno));
- close(fd);
- return -1;
- }
- if (ftruncate(fd, sz) == -1) {
- tpl_hook.oops("ftruncate failed: %s\n", strerror(errno));
- munmap(text, sz);
- close(fd);
- return -1;
- }
- *text_out = text;
- return fd;
+ if (fd == -1) {
+ tpl_hook.oops("Couldn't open file %s: %s\n", filename, strerror(errno));
+ return -1;
+ }
+
+ text = mmap(0, sz, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ if (text == MAP_FAILED) {
+ tpl_hook.oops("Failed to mmap %s: %s\n", filename, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ if (ftruncate(fd, sz) == -1) {
+ tpl_hook.oops("ftruncate failed: %s\n", strerror(errno));
+ munmap(text, sz);
+ close(fd);
+ return -1;
+ }
+ *text_out = text;
+ return fd;
}
static int tpl_mmap_file(char *filename, tpl_mmap_rec *mr)
{
- struct stat stat_buf;
-
- if ((mr->fd = open(filename, O_RDONLY)) == -1) {
- tpl_hook.oops("Couldn't open file %s: %s\n", filename, strerror(errno));
- return -1;
- }
-
- if (fstat(mr->fd, &stat_buf) == -1) {
- close(mr->fd);
- tpl_hook.oops("Couldn't stat file %s: %s\n", filename, strerror(errno));
- return -1;
- }
-
- mr->text_sz = (size_t)stat_buf.st_size;
- mr->text = mmap(0, stat_buf.st_size, PROT_READ, MAP_PRIVATE, mr->fd, 0);
- if (mr->text == MAP_FAILED) {
- close(mr->fd);
- tpl_hook.oops("Failed to mmap %s: %s\n", filename, strerror(errno));
- return -1;
- }
-
- return 0;
+ struct stat stat_buf;
+
+ if ((mr->fd = open(filename, O_RDONLY)) == -1) {
+ tpl_hook.oops("Couldn't open file %s: %s\n", filename, strerror(errno));
+ return -1;
+ }
+
+ if (fstat(mr->fd, &stat_buf) == -1) {
+ close(mr->fd);
+ tpl_hook.oops("Couldn't stat file %s: %s\n", filename, strerror(errno));
+ return -1;
+ }
+
+ mr->text_sz = (size_t)stat_buf.st_size;
+ mr->text = mmap(0, stat_buf.st_size, PROT_READ, MAP_PRIVATE, mr->fd, 0);
+ if (mr->text == MAP_FAILED) {
+ close(mr->fd);
+ tpl_hook.oops("Failed to mmap %s: %s\n", filename, strerror(errno));
+ return -1;
+ }
+
+ return 0;
}
TPL_API int tpl_pack(tpl_node *r, int i)
{
- tpl_node *n, *child, *np;
- void *datav = NULL;
- size_t sz, itermax;
- uint32_t slen;
- char *str;
- tpl_bin *bin;
- tpl_pound_data *pd;
- int fidx;
-
- n = tpl_find_i(r, i);
- if (n == NULL) {
- tpl_hook.oops("invalid index %d to tpl_pack\n", i);
- return -1;
- }
-
- if (((tpl_root_data*)(r->data))->flags & TPL_RDONLY) {
- /* convert to an writeable tpl, initially empty */
- tpl_free_keep_map(r);
- }
-
- ((tpl_root_data*)(r->data))->flags |= TPL_WRONLY;
-
- if (n->type == TPL_TYPE_ARY) datav = tpl_extend_backbone(n);
- child = n->children;
- while (child) {
- switch (child->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- /* no need to use fidx iteration here; we can copy multiple values in one memcpy */
- memcpy(child->data, child->addr, tpl_types[child->type].sz * child->num);
- if (datav) datav = tpl_cpv(datav, child->data, tpl_types[child->type].sz * child->num);
- if (n->type == TPL_TYPE_ARY) n->ser_osz += tpl_types[child->type].sz * child->num;
- break;
- case TPL_TYPE_BIN:
- /* copy the buffer to be packed */
- slen = ((tpl_bin*)child->addr)->sz;
- if (slen > 0) {
- str = tpl_hook.malloc(slen);
- if (!str) fatal_oom();
- memcpy(str, ((tpl_bin*)child->addr)->addr, slen);
- } else str = NULL;
- /* and make a tpl_bin to point to it */
- bin = tpl_hook.malloc(sizeof(tpl_bin));
- if (!bin) fatal_oom();
- bin->addr = str;
- bin->sz = slen;
- /* now pack its pointer, first deep freeing any pre-existing bin */
- if (*(tpl_bin**)(child->data) != NULL) {
- if ((*(tpl_bin**)(child->data))->sz != 0) {
- tpl_hook.free((*(tpl_bin**)(child->data))->addr);
- }
- tpl_hook.free(*(tpl_bin**)(child->data));
- }
- memcpy(child->data, &bin, sizeof(tpl_bin*));
- if (datav) {
- datav = tpl_cpv(datav, &bin, sizeof(tpl_bin*));
- *(tpl_bin**)(child->data) = NULL;
- }
- if (n->type == TPL_TYPE_ARY) {
- n->ser_osz += sizeof(uint32_t); /* binary buf len word */
- n->ser_osz += bin->sz; /* binary buf */
- }
- break;
- case TPL_TYPE_STR:
- for (fidx = 0; fidx < child->num; fidx++) {
- /* copy the string to be packed. slen includes \0. this
- block also works if the string pointer is NULL. */
- char *caddr = ((char**)child->addr)[fidx];
- char **cdata = &((char**)child->data)[fidx];
- slen = caddr ? (EM_SAFE_STRLEN(caddr) + 1) : 0;
- if (slen) {
- str = tpl_hook.malloc(slen);
- if (!str) fatal_oom();
- memcpy(str, caddr, slen); /* include \0 */
- } else {
- str = NULL;
- }
- /* now pack its pointer, first freeing any pre-existing string */
- if (*cdata != NULL) {
- tpl_hook.free(*cdata);
- }
- memcpy(cdata, &str, sizeof(char*));
- if (datav) {
- datav = tpl_cpv(datav, &str, sizeof(char*));
- *cdata = NULL;
- }
- if (n->type == TPL_TYPE_ARY) {
- n->ser_osz += sizeof(uint32_t); /* string len word */
- if (slen > 1) n->ser_osz += slen-1;/* string (without nul) */
- }
- }
- break;
- case TPL_TYPE_ARY:
- /* copy the child's tpl_atype* and reset it to empty */
- if (datav) {
- sz = ((tpl_atyp*)(child->data))->sz;
- datav = tpl_cpv(datav, &child->data, sizeof(void*));
- child->data = tpl_hook.malloc(sizeof(tpl_atyp));
- if (!child->data) fatal_oom();
- ((tpl_atyp*)(child->data))->num = 0;
- ((tpl_atyp*)(child->data))->sz = sz;
- ((tpl_atyp*)(child->data))->bb = NULL;
- ((tpl_atyp*)(child->data))->bbtail = NULL;
- }
- /* parent is array? then bubble up child array's ser_osz */
- if (n->type == TPL_TYPE_ARY) {
- n->ser_osz += sizeof(uint32_t); /* array len word */
- n->ser_osz += child->ser_osz; /* child array ser_osz */
- child->ser_osz = 0; /* reset child array ser_osz */
- }
- break;
-
- case TPL_TYPE_POUND:
- /* we need to iterate n times over preceding nodes in S(...).
- * we may be in the midst of an iteration each time or starting. */
- pd = (tpl_pound_data*)child->data;
- itermax = child->num;
-
- /* itermax is total num of iterations needed */
- /* pd->iternum is current iteration index */
- /* pd->inter_elt_len is element-to-element len of contiguous structs */
- /* pd->iter_start_node is where we jump to at each iteration. */
-
- if (++(pd->iternum) < itermax) {
-
- /* in start or midst of loop. advance addr/data pointers. */
- for (np = pd->iter_start_node; np != child; np = np->next) {
- np->data = (char*)(np->data) +
- (tpl_types[np->type].sz * np->num);
- np->addr = (char*)(np->addr) + pd->inter_elt_len;
- }
- /* do next iteration */
- child = pd->iter_start_node;
- continue;
-
- } else { /* loop complete. */
-
- /* reset iteration index and addr/data pointers. */
- pd->iternum = 0;
- for (np = pd->iter_start_node; np != child; np = np->next) {
- np->data = (char*)(np->data) - ((itermax-1) *
- tpl_types[np->type].sz *
- np->num);
- np->addr = (char*)(np->addr) - ((itermax-1) * pd->inter_elt_len);
- }
-
- }
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- child = child->next;
- }
- return 0;
+ tpl_node *n, *child, *np;
+ void *datav = NULL;
+ size_t sz, itermax;
+ uint32_t slen;
+ char *str;
+ tpl_bin *bin;
+ tpl_pound_data *pd;
+ int fidx;
+
+ n = tpl_find_i(r, i);
+ if (n == NULL) {
+ tpl_hook.oops("invalid index %d to tpl_pack\n", i);
+ return -1;
+ }
+
+ if (((tpl_root_data*)(r->data))->flags & TPL_RDONLY) {
+ /* convert to an writeable tpl, initially empty */
+ tpl_free_keep_map(r);
+ }
+
+ ((tpl_root_data*)(r->data))->flags |= TPL_WRONLY;
+
+ if (n->type == TPL_TYPE_ARY) datav = tpl_extend_backbone(n);
+ child = n->children;
+ while (child) {
+ switch (child->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ /* no need to use fidx iteration here; we can copy multiple values in one memcpy */
+ memcpy(child->data, child->addr, tpl_types[child->type].sz * child->num);
+ if (datav) datav = tpl_cpv(datav, child->data, tpl_types[child->type].sz * child->num);
+ if (n->type == TPL_TYPE_ARY) n->ser_osz += tpl_types[child->type].sz * child->num;
+ break;
+ case TPL_TYPE_BIN:
+ /* copy the buffer to be packed */
+ slen = ((tpl_bin*)child->addr)->sz;
+ if (slen > 0) {
+ str = tpl_hook.malloc(slen);
+ if (!str) fatal_oom();
+ memcpy(str, ((tpl_bin*)child->addr)->addr, slen);
+ } else str = NULL;
+ /* and make a tpl_bin to point to it */
+ bin = tpl_hook.malloc(sizeof(tpl_bin));
+ if (!bin) fatal_oom();
+ bin->addr = str;
+ bin->sz = slen;
+ /* now pack its pointer, first deep freeing any pre-existing bin */
+ if (*(tpl_bin**)(child->data) != NULL) {
+ if ((*(tpl_bin**)(child->data))->sz != 0)
+ tpl_hook.free((*(tpl_bin**)(child->data))->addr);
+
+ tpl_hook.free(*(tpl_bin**)(child->data));
+ }
+ memcpy(child->data, &bin, sizeof(tpl_bin*));
+ if (datav) {
+ datav = tpl_cpv(datav, &bin, sizeof(tpl_bin*));
+ *(tpl_bin**)(child->data) = NULL;
+ }
+ if (n->type == TPL_TYPE_ARY) {
+ n->ser_osz += sizeof(uint32_t); /* binary buf len word */
+ n->ser_osz += bin->sz; /* binary buf */
+ }
+ break;
+ case TPL_TYPE_STR:
+ for (fidx = 0; fidx < child->num; fidx++) {
+ /* copy the string to be packed. slen includes \0. this
+ block also works if the string pointer is NULL. */
+ char *caddr = ((char**)child->addr)[fidx];
+ char **cdata = &((char**)child->data)[fidx];
+ slen = caddr ? (EM_SAFE_STRLEN(caddr) + 1) : 0;
+ if (slen) {
+ str = tpl_hook.malloc(slen);
+ if (!str) fatal_oom();
+ memcpy(str, caddr, slen); /* include \0 */
+ } else {
+ str = NULL;
+ }
+ /* now pack its pointer, first freeing any pre-existing string */
+ if (*cdata != NULL)
+ tpl_hook.free(*cdata);
+
+ memcpy(cdata, &str, sizeof(char*));
+ if (datav) {
+ datav = tpl_cpv(datav, &str, sizeof(char*));
+ *cdata = NULL;
+ }
+ if (n->type == TPL_TYPE_ARY) {
+ n->ser_osz += sizeof(uint32_t); /* string len word */
+ if (slen > 1) n->ser_osz += slen-1;/* string (without nul) */
+ }
+ }
+ break;
+ case TPL_TYPE_ARY:
+ /* copy the child's tpl_atype* and reset it to empty */
+ if (datav) {
+ sz = ((tpl_atyp*)(child->data))->sz;
+ datav = tpl_cpv(datav, &child->data, sizeof(void*));
+ child->data = tpl_hook.malloc(sizeof(tpl_atyp));
+ if (!child->data) fatal_oom();
+ ((tpl_atyp*)(child->data))->num = 0;
+ ((tpl_atyp*)(child->data))->sz = sz;
+ ((tpl_atyp*)(child->data))->bb = NULL;
+ ((tpl_atyp*)(child->data))->bbtail = NULL;
+ }
+ /* parent is array? then bubble up child array's ser_osz */
+ if (n->type == TPL_TYPE_ARY) {
+ n->ser_osz += sizeof(uint32_t); /* array len word */
+ n->ser_osz += child->ser_osz; /* child array ser_osz */
+ child->ser_osz = 0; /* reset child array ser_osz */
+ }
+ break;
+
+ case TPL_TYPE_POUND:
+ /* we need to iterate n times over preceding nodes in S(...).
+ * we may be in the midst of an iteration each time or starting. */
+ pd = (tpl_pound_data*)child->data;
+ itermax = child->num;
+
+ /* itermax is total num of iterations needed */
+ /* pd->iternum is current iteration index */
+ /* pd->inter_elt_len is element-to-element len of contiguous structs */
+ /* pd->iter_start_node is where we jump to at each iteration. */
+
+ if (++(pd->iternum) < itermax) {
+
+ /* in start or midst of loop. advance addr/data pointers. */
+ for (np = pd->iter_start_node; np != child; np = np->next) {
+ np->data = (char*)(np->data) +
+ (tpl_types[np->type].sz * np->num);
+ np->addr = (char*)(np->addr) + pd->inter_elt_len;
+ }
+ /* do next iteration */
+ child = pd->iter_start_node;
+ continue;
+
+ } else { /* loop complete. */
+
+ /* reset iteration index and addr/data pointers. */
+ pd->iternum = 0;
+ for (np = pd->iter_start_node; np != child; np = np->next) {
+ np->data = (char*)(np->data) - ((itermax-1) *
+ tpl_types[np->type].sz *
+ np->num);
+ np->addr = (char*)(np->addr) - ((itermax-1) * pd->inter_elt_len);
+ }
+
+ }
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ child = child->next;
+ }
+ return 0;
}
TPL_API int tpl_unpack(tpl_node *r, int i)
{
- tpl_node *n, *c, *np;
- uint32_t slen;
- int rc = 1, fidx;
- char *str;
- void *dv = NULL, *caddr;
- size_t A_bytes, itermax;
- tpl_pound_data *pd;
- void *img;
- size_t sz;
-
-
- /* handle unusual case of tpl_pack, tpl_unpack without an
- * intervening tpl_dump. do a dump/load implicitly. */
- if (((tpl_root_data*)(r->data))->flags & TPL_WRONLY) {
- if (tpl_dump(r, TPL_MEM, &img, &sz) != 0) return -1;
- if (tpl_load(r, TPL_MEM|TPL_UFREE, img, sz) != 0) {
- tpl_hook.free(img);
- return -1;
- };
- }
-
- n = tpl_find_i(r, i);
- if (n == NULL) {
- tpl_hook.oops("invalid index %d to tpl_unpack\n", i);
- return -1;
- }
-
- /* either root node or an A node */
- if (n->type == TPL_TYPE_ROOT) {
- dv = tpl_find_data_start(((tpl_root_data*)(n->data))->mmap.text);
- } else if (n->type == TPL_TYPE_ARY) {
- if (((tpl_atyp*)(n->data))->num <= 0) return 0; /* array consumed */
- else rc = ((tpl_atyp*)(n->data))->num--;
- dv = ((tpl_atyp*)(n->data))->cur;
- if (!dv) tpl_hook.fatal("must unpack parent of node before node itself\n");
- }
-
- c = n->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- /* unpack elements of cross-endian octothorpic array individually */
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN) {
- for (fidx = 0; fidx < c->num; fidx++) {
- caddr = (void*)((uintptr_t)c->addr + (fidx * tpl_types[c->type].sz));
- memcpy(caddr, dv, tpl_types[c->type].sz);
- tpl_byteswap(caddr, tpl_types[c->type].sz);
- dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz);
- }
- } else {
- /* bulk unpack ok if not cross-endian */
- memcpy(c->addr, dv, tpl_types[c->type].sz * c->num);
- dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz * c->num);
- }
- break;
- case TPL_TYPE_BIN:
- memcpy(&slen, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&slen, sizeof(uint32_t));
- if (slen > 0) {
- str = (char*)tpl_hook.malloc(slen);
- if (!str) fatal_oom();
- } else str = NULL;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- if (slen > 0) memcpy(str, dv, slen);
- memcpy(&(((tpl_bin*)c->addr)->addr), &str, sizeof(void*));
- memcpy(&(((tpl_bin*)c->addr)->sz), &slen, sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + slen);
- break;
- case TPL_TYPE_STR:
- for (fidx = 0; fidx < c->num; fidx++) {
- memcpy(&slen, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&slen, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_OLD_STRING_FMT)
- slen += 1;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- if (slen) { /* slen includes \0 */
- str = (char*)tpl_hook.malloc(slen);
- if (!str) fatal_oom();
- if (slen > 1) memcpy(str, dv, slen-1);
- str[slen-1] = '\0'; /* nul terminate */
- dv = (void*)((uintptr_t)dv + slen-1);
- } else str = NULL;
- memcpy(&((char**)c->addr)[fidx], &str, sizeof(char*));
- }
- break;
- case TPL_TYPE_POUND:
- /* iterate over preceding nodes */
- pd = (tpl_pound_data*)c->data;
- itermax = c->num;
- if (++(pd->iternum) < itermax) {
- /* in start or midst of loop. advance addr/data pointers. */
- for (np = pd->iter_start_node; np != c; np = np->next) {
- np->addr = (char*)(np->addr) + pd->inter_elt_len;
- }
- /* do next iteration */
- c = pd->iter_start_node;
- continue;
-
- } else { /* loop complete. */
-
- /* reset iteration index and addr/data pointers. */
- pd->iternum = 0;
- for (np = pd->iter_start_node; np != c; np = np->next) {
- np->addr = (char*)(np->addr) - ((itermax-1) * pd->inter_elt_len);
- }
-
- }
- break;
- case TPL_TYPE_ARY:
- if (tpl_serlen(r, c, dv, &A_bytes) == -1)
- tpl_hook.fatal("internal error in unpack\n");
- memcpy(&((tpl_atyp*)(c->data))->num, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&((tpl_atyp*)(c->data))->num, sizeof(uint32_t));
- ((tpl_atyp*)(c->data))->cur = (void*)((uintptr_t)dv+sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + A_bytes);
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
-
- c = c->next;
- }
- if (n->type == TPL_TYPE_ARY) ((tpl_atyp*)(n->data))->cur = dv; /* next element */
- return rc;
+ tpl_node *n, *c, *np;
+ uint32_t slen;
+ int rc = 1, fidx;
+ char *str;
+ void *dv = NULL, *caddr;
+ size_t A_bytes, itermax;
+ tpl_pound_data *pd;
+ void *img;
+ size_t sz;
+
+
+ /* handle unusual case of tpl_pack, tpl_unpack without an
+ * intervening tpl_dump. do a dump/load implicitly. */
+ if (((tpl_root_data*)(r->data))->flags & TPL_WRONLY) {
+ if (tpl_dump(r, TPL_MEM, &img, &sz) != 0) return -1;
+ if (tpl_load(r, TPL_MEM|TPL_UFREE, img, sz) != 0) {
+ tpl_hook.free(img);
+ return -1;
+ };
+ }
+
+ n = tpl_find_i(r, i);
+ if (n == NULL) {
+ tpl_hook.oops("invalid index %d to tpl_unpack\n", i);
+ return -1;
+ }
+
+ /* either root node or an A node */
+ if (n->type == TPL_TYPE_ROOT) {
+ dv = tpl_find_data_start(((tpl_root_data*)(n->data))->mmap.text);
+ } else if (n->type == TPL_TYPE_ARY) {
+ if (((tpl_atyp*)(n->data))->num <= 0) return 0; /* array consumed */
+ else rc = ((tpl_atyp*)(n->data))->num--;
+ dv = ((tpl_atyp*)(n->data))->cur;
+ if (!dv) tpl_hook.fatal("must unpack parent of node before node itself\n");
+ }
+
+ c = n->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ /* unpack elements of cross-endian octothorpic array individually */
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN) {
+ for (fidx = 0; fidx < c->num; fidx++) {
+ caddr = (void*)((uintptr_t)c->addr + (fidx * tpl_types[c->type].sz));
+ memcpy(caddr, dv, tpl_types[c->type].sz);
+ tpl_byteswap(caddr, tpl_types[c->type].sz);
+ dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz);
+ }
+ } else {
+ /* bulk unpack ok if not cross-endian */
+ memcpy(c->addr, dv, tpl_types[c->type].sz * c->num);
+ dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz * c->num);
+ }
+ break;
+ case TPL_TYPE_BIN:
+ memcpy(&slen, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&slen, sizeof(uint32_t));
+ if (slen > 0) {
+ str = (char*)tpl_hook.malloc(slen);
+ if (!str) fatal_oom();
+ } else str = NULL;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ if (slen > 0) memcpy(str, dv, slen);
+ memcpy(&(((tpl_bin*)c->addr)->addr), &str, sizeof(void*));
+ memcpy(&(((tpl_bin*)c->addr)->sz), &slen, sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + slen);
+ break;
+ case TPL_TYPE_STR:
+ for (fidx = 0; fidx < c->num; fidx++) {
+ memcpy(&slen, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&slen, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_OLD_STRING_FMT)
+ slen += 1;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ if (slen) { /* slen includes \0 */
+ str = (char*)tpl_hook.malloc(slen);
+ if (!str) fatal_oom();
+ if (slen > 1) memcpy(str, dv, slen-1);
+ str[slen-1] = '\0'; /* nul terminate */
+ dv = (void*)((uintptr_t)dv + slen-1);
+ } else str = NULL;
+ memcpy(&((char**)c->addr)[fidx], &str, sizeof(char*));
+ }
+ break;
+ case TPL_TYPE_POUND:
+ /* iterate over preceding nodes */
+ pd = (tpl_pound_data*)c->data;
+ itermax = c->num;
+ if (++(pd->iternum) < itermax) {
+ /* in start or midst of loop. advance addr/data pointers. */
+ for (np = pd->iter_start_node; np != c; np = np->next)
+ np->addr = (char*)(np->addr) + pd->inter_elt_len;
+
+ /* do next iteration */
+ c = pd->iter_start_node;
+ continue;
+
+ } else { /* loop complete. */
+
+ /* reset iteration index and addr/data pointers. */
+ pd->iternum = 0;
+ for (np = pd->iter_start_node; np != c; np = np->next)
+ np->addr = (char*)(np->addr) - ((itermax-1) * pd->inter_elt_len);
+ }
+ break;
+ case TPL_TYPE_ARY:
+ if (tpl_serlen(r, c, dv, &A_bytes) == -1)
+ tpl_hook.fatal("internal error in unpack\n");
+ memcpy(&((tpl_atyp*)(c->data))->num, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&((tpl_atyp*)(c->data))->num, sizeof(uint32_t));
+ ((tpl_atyp*)(c->data))->cur = (void*)((uintptr_t)dv+sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + A_bytes);
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+
+ c = c->next;
+ }
+ if (n->type == TPL_TYPE_ARY) ((tpl_atyp*)(n->data))->cur = dv; /* next element */
+ return rc;
}
/* Specialized function that unpacks only the root's A nodes, after tpl_load */
static int tpl_unpackA0(tpl_node *r)
{
- tpl_node *n, *c;
- uint32_t slen;
- int rc = 1, fidx, i;
- void *dv;
- size_t A_bytes, itermax;
- tpl_pound_data *pd;
-
- n = r;
- dv = tpl_find_data_start(((tpl_root_data*)(r->data))->mmap.text);
-
- c = n->children;
- while (c) {
- switch (c->type) {
- case TPL_TYPE_BYTE:
- case TPL_TYPE_DOUBLE:
- case TPL_TYPE_INT32:
- case TPL_TYPE_UINT32:
- case TPL_TYPE_INT64:
- case TPL_TYPE_UINT64:
- case TPL_TYPE_INT16:
- case TPL_TYPE_UINT16:
- for (fidx = 0; fidx < c->num; fidx++) {
- dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz);
- }
- break;
- case TPL_TYPE_BIN:
- memcpy(&slen, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&slen, sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + slen);
- break;
- case TPL_TYPE_STR:
- for (i = 0; i < c->num; i++) {
- memcpy(&slen, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&slen, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_OLD_STRING_FMT)
- slen += 1;
- dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
- if (slen > 1) dv = (void*)((uintptr_t)dv + slen-1);
- }
- break;
- case TPL_TYPE_POUND:
- /* iterate over the preceding nodes */
- itermax = c->num;
- pd = (tpl_pound_data*)c->data;
- if (++(pd->iternum) < itermax) {
- c = pd->iter_start_node;
- continue;
- } else { /* loop complete. */
- pd->iternum = 0;
- }
- break;
- case TPL_TYPE_ARY:
- if (tpl_serlen(r, c, dv, &A_bytes) == -1)
- tpl_hook.fatal("internal error in unpackA0\n");
- memcpy(&((tpl_atyp*)(c->data))->num, dv, sizeof(uint32_t));
- if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
- tpl_byteswap(&((tpl_atyp*)(c->data))->num, sizeof(uint32_t));
- ((tpl_atyp*)(c->data))->cur = (void*)((uintptr_t)dv+sizeof(uint32_t));
- dv = (void*)((uintptr_t)dv + A_bytes);
- break;
- default:
- tpl_hook.fatal("unsupported format character\n");
- break;
- }
- c = c->next;
- }
- return rc;
+ tpl_node *n, *c;
+ uint32_t slen;
+ int rc = 1, fidx, i;
+ void *dv;
+ size_t A_bytes, itermax;
+ tpl_pound_data *pd;
+
+ n = r;
+ dv = tpl_find_data_start(((tpl_root_data*)(r->data))->mmap.text);
+
+ c = n->children;
+ while (c) {
+ switch (c->type) {
+ case TPL_TYPE_BYTE:
+ case TPL_TYPE_DOUBLE:
+ case TPL_TYPE_INT32:
+ case TPL_TYPE_UINT32:
+ case TPL_TYPE_INT64:
+ case TPL_TYPE_UINT64:
+ case TPL_TYPE_INT16:
+ case TPL_TYPE_UINT16:
+ for (fidx = 0; fidx < c->num; fidx++)
+ dv = (void*)((uintptr_t)dv + tpl_types[c->type].sz);
+
+ break;
+ case TPL_TYPE_BIN:
+ memcpy(&slen, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&slen, sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + slen);
+ break;
+ case TPL_TYPE_STR:
+ for (i = 0; i < c->num; i++) {
+ memcpy(&slen, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&slen, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_OLD_STRING_FMT)
+ slen += 1;
+ dv = (void*)((uintptr_t)dv + sizeof(uint32_t));
+ if (slen > 1) dv = (void*)((uintptr_t)dv + slen-1);
+ }
+ break;
+ case TPL_TYPE_POUND:
+ /* iterate over the preceding nodes */
+ itermax = c->num;
+ pd = (tpl_pound_data*)c->data;
+ if (++(pd->iternum) < itermax) {
+ c = pd->iter_start_node;
+ continue;
+ } else { /* loop complete. */
+ pd->iternum = 0;
+ }
+ break;
+ case TPL_TYPE_ARY:
+ if (tpl_serlen(r, c, dv, &A_bytes) == -1)
+ tpl_hook.fatal("internal error in unpackA0\n");
+ memcpy(&((tpl_atyp*)(c->data))->num, dv, sizeof(uint32_t));
+ if (((tpl_root_data*)(r->data))->flags & TPL_XENDIAN)
+ tpl_byteswap(&((tpl_atyp*)(c->data))->num, sizeof(uint32_t));
+ ((tpl_atyp*)(c->data))->cur = (void*)((uintptr_t)dv+sizeof(uint32_t));
+ dv = (void*)((uintptr_t)dv + A_bytes);
+ break;
+ default:
+ tpl_hook.fatal("unsupported format character\n");
+ break;
+ }
+ c = c->next;
+ }
+ return rc;
}
/* In-place byte order swapping of a word of length "len" bytes */
static void tpl_byteswap(void *word, int len)
{
- int i;
- char c, *w;
- w = (char*)word;
- for (i = 0; i < len/2; i++) {
- c = w[i];
- w[i] = w[len-1-i];
- w[len-1-i] = c;
- }
+ int i;
+ char c, *w;
+ w = (char*)word;
+ for (i = 0; i < len/2; i++) {
+ c = w[i];
+ w[i] = w[len-1-i];
+ w[len-1-i] = c;
+ }
}
static void tpl_fatal(char *fmt, ...)
{
- va_list ap;
- char exit_msg[100];
+ va_list ap;
+ char exit_msg[100];
- va_start(ap, fmt);
- vsnprintf(exit_msg, 100, fmt, ap);
- va_end(ap);
+ va_start(ap, fmt);
+ vsnprintf(exit_msg, 100, fmt, ap);
+ va_end(ap);
- tpl_hook.oops("%s", exit_msg);
- exit(-1);
+ tpl_hook.oops("%s", exit_msg);
+ exit(-1);
}
TPL_API int tpl_gather(int mode, ...)
{
- va_list ap;
- int fd, rc = 0;
- size_t *szp, sz;
- void **img, *addr, *data;
- tpl_gather_t **gs;
- tpl_gather_cb *cb;
-
- va_start(ap, mode);
- switch (mode) {
- case TPL_GATHER_BLOCKING:
- fd = va_arg(ap, int);
- img = va_arg(ap, void*);
- szp = va_arg(ap, size_t*);
- rc = tpl_gather_blocking(fd, img, szp);
- break;
- case TPL_GATHER_NONBLOCKING:
- fd = va_arg(ap, int);
- gs = (tpl_gather_t**)va_arg(ap, void*);
- cb = (tpl_gather_cb*)va_arg(ap, tpl_gather_cb*);
- data = va_arg(ap, void*);
- rc = tpl_gather_nonblocking(fd, gs, cb, data);
- break;
- case TPL_GATHER_MEM:
- addr = va_arg(ap, void*);
- sz = va_arg(ap, size_t);
- gs = (tpl_gather_t**)va_arg(ap, void*);
- cb = (tpl_gather_cb*)va_arg(ap, tpl_gather_cb*);
- data = va_arg(ap, void*);
- rc = tpl_gather_mem(addr, sz, gs, cb, data);
- break;
- default:
- tpl_hook.fatal("unsupported tpl_gather mode %d\n", mode);
- break;
- }
- va_end(ap);
- return rc;
+ va_list ap;
+ int fd, rc = 0;
+ size_t *szp, sz;
+ void **img, *addr, *data;
+ tpl_gather_t **gs;
+ tpl_gather_cb *cb;
+
+ va_start(ap, mode);
+ switch (mode) {
+ case TPL_GATHER_BLOCKING:
+ fd = va_arg(ap, int);
+ img = va_arg(ap, void*);
+ szp = va_arg(ap, size_t*);
+ rc = tpl_gather_blocking(fd, img, szp);
+ break;
+ case TPL_GATHER_NONBLOCKING:
+ fd = va_arg(ap, int);
+ gs = (tpl_gather_t**)va_arg(ap, void*);
+ cb = (tpl_gather_cb*)va_arg(ap, tpl_gather_cb*);
+ data = va_arg(ap, void*);
+ rc = tpl_gather_nonblocking(fd, gs, cb, data);
+ break;
+ case TPL_GATHER_MEM:
+ addr = va_arg(ap, void*);
+ sz = va_arg(ap, size_t);
+ gs = (tpl_gather_t**)va_arg(ap, void*);
+ cb = (tpl_gather_cb*)va_arg(ap, tpl_gather_cb*);
+ data = va_arg(ap, void*);
+ rc = tpl_gather_mem(addr, sz, gs, cb, data);
+ break;
+ default:
+ tpl_hook.fatal("unsupported tpl_gather mode %d\n", mode);
+ break;
+ }
+ va_end(ap);
+ return rc;
}
/* dequeue a tpl by reading until one full tpl image is obtained.
*/
static int tpl_gather_blocking(int fd, void **img, size_t *sz)
{
- char preamble[8];
- int i = 0, rc;
- uint32_t tpllen;
-
- do {
- rc = read(fd, &preamble[i], 8-i);
- i += (rc > 0) ? rc : 0;
- } while ((rc == -1 && (errno == EINTR || errno == EAGAIN)) || (rc > 0 && i < 8));
-
- if (rc < 0) {
- tpl_hook.oops("tpl_gather_fd_blocking failed: %s\n", strerror(errno));
- return -1;
- } else if (rc == 0) {
- /* tpl_hook.oops("tpl_gather_fd_blocking: eof\n"); */
- return 0;
- } else if (i != 8) {
- tpl_hook.oops("internal error\n");
- return -1;
- }
-
- if (preamble[0] == 't' && preamble[1] == 'p' && preamble[2] == 'l') {
- memcpy(&tpllen, &preamble[4], 4);
- if (tpl_needs_endian_swap(preamble)) tpl_byteswap(&tpllen, 4);
- } else {
- tpl_hook.oops("tpl_gather_fd_blocking: non-tpl input\n");
- return -1;
- }
-
- /* malloc space for remainder of tpl image (overall length tpllen)
- * and read it in
- */
- if (tpl_hook.gather_max > 0 &&
- tpllen > tpl_hook.gather_max) {
- tpl_hook.oops("tpl exceeds max length %d\n",
- tpl_hook.gather_max);
- return -2;
- }
- *sz = tpllen;
- if ((*img = tpl_hook.malloc(tpllen)) == NULL) {
- fatal_oom();
- }
-
- memcpy(*img, preamble, 8); /* copy preamble to output buffer */
- i = 8;
- do {
- rc = read(fd, &((*(char**)img)[i]), tpllen-i);
- i += (rc > 0) ? rc : 0;
- } while ((rc == -1 && (errno == EINTR || errno == EAGAIN)) || (rc > 0 && i < tpllen));
-
- if (rc < 0) {
- tpl_hook.oops("tpl_gather_fd_blocking failed: %s\n", strerror(errno));
- tpl_hook.free(*img);
- return -1;
- } else if (rc == 0) {
- /* tpl_hook.oops("tpl_gather_fd_blocking: eof\n"); */
- tpl_hook.free(*img);
- return 0;
- } else if (i != tpllen) {
- tpl_hook.oops("internal error\n");
- tpl_hook.free(*img);
- return -1;
- }
-
- return 1;
+ char preamble[8];
+ int i = 0, rc;
+ uint32_t tpllen;
+
+ do {
+ rc = read(fd, &preamble[i], 8-i);
+ i += (rc > 0) ? rc : 0;
+ } while ((rc == -1 && (errno == EINTR || errno == EAGAIN)) || (rc > 0 && i < 8));
+
+ if (rc < 0) {
+ tpl_hook.oops("tpl_gather_fd_blocking failed: %s\n", strerror(errno));
+ return -1;
+ } else if (rc == 0) {
+ /* tpl_hook.oops("tpl_gather_fd_blocking: eof\n"); */
+ return 0;
+ } else if (i != 8) {
+ tpl_hook.oops("internal error\n");
+ return -1;
+ }
+
+ if (preamble[0] == 't' && preamble[1] == 'p' && preamble[2] == 'l') {
+ memcpy(&tpllen, &preamble[4], 4);
+ if (tpl_needs_endian_swap(preamble)) tpl_byteswap(&tpllen, 4);
+ } else {
+ tpl_hook.oops("tpl_gather_fd_blocking: non-tpl input\n");
+ return -1;
+ }
+
+ /* malloc space for remainder of tpl image (overall length tpllen)
+ * and read it in
+ */
+ if (tpl_hook.gather_max > 0 &&
+ tpllen > tpl_hook.gather_max) {
+ tpl_hook.oops("tpl exceeds max length %d\n",
+ tpl_hook.gather_max);
+ return -2;
+ }
+ *sz = tpllen;
+ if ((*img = tpl_hook.malloc(tpllen)) == NULL)
+ fatal_oom();
+
+ memcpy(*img, preamble, 8); /* copy preamble to output buffer */
+ i = 8;
+ do {
+ rc = read(fd, &((*(char**)img)[i]), tpllen-i);
+ i += (rc > 0) ? rc : 0;
+ } while ((rc == -1 && (errno == EINTR || errno == EAGAIN)) || (rc > 0 && i < tpllen));
+
+ if (rc < 0) {
+ tpl_hook.oops("tpl_gather_fd_blocking failed: %s\n", strerror(errno));
+ tpl_hook.free(*img);
+ return -1;
+ } else if (rc == 0) {
+ /* tpl_hook.oops("tpl_gather_fd_blocking: eof\n"); */
+ tpl_hook.free(*img);
+ return 0;
+ } else if (i != tpllen) {
+ tpl_hook.oops("internal error\n");
+ tpl_hook.free(*img);
+ return -1;
+ }
+
+ return 1;
}
/* Used by select()-driven apps which want to gather tpl images piecemeal */
/* the file descriptor must be non-blocking for this functino to work. */
static int tpl_gather_nonblocking(int fd, tpl_gather_t **gs, tpl_gather_cb *cb, void *data)
{
- char buf[TPL_GATHER_BUFLEN], *img, *tpl;
- int rc, keep_looping, cbrc = 0;
- size_t catlen;
- uint32_t tpllen;
-
- while (1) {
- rc = read(fd, buf, TPL_GATHER_BUFLEN);
- if (rc == -1) {
- if (errno == EINTR) continue; /* got signal during read, ignore */
- if (errno == EAGAIN) return 1; /* nothing to read right now */
- else {
- tpl_hook.oops("tpl_gather failed: %s\n", strerror(errno));
- if (*gs) {
- tpl_hook.free((*gs)->img);
- tpl_hook.free(*gs);
- *gs = NULL;
- }
- return -1; /* error, caller should close fd */
- }
- } else if (rc == 0) {
- if (*gs) {
- tpl_hook.oops("tpl_gather: partial tpl image precedes EOF\n");
- tpl_hook.free((*gs)->img);
- tpl_hook.free(*gs);
- *gs = NULL;
- }
- return 0; /* EOF, caller should close fd */
- } else {
- /* concatenate any partial tpl from last read with new buffer */
- if (*gs) {
- catlen = (*gs)->len + rc;
- if (tpl_hook.gather_max > 0 &&
- catlen > tpl_hook.gather_max) {
- tpl_hook.free((*gs)->img);
- tpl_hook.free((*gs));
- *gs = NULL;
- tpl_hook.oops("tpl exceeds max length %d\n",
- tpl_hook.gather_max);
- return -2; /* error, caller should close fd */
- }
- if ((img = tpl_hook.realloc((*gs)->img, catlen)) == NULL) {
- fatal_oom();
- }
- memcpy(img + (*gs)->len, buf, rc);
- tpl_hook.free(*gs);
- *gs = NULL;
- } else {
- img = buf;
- catlen = rc;
- }
- /* isolate any full tpl(s) in img and invoke cb for each */
- tpl = img;
- keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
- while (keep_looping) {
- if (strncmp("tpl", tpl, 3) != 0) {
- tpl_hook.oops("tpl prefix invalid\n");
- if (img != buf) tpl_hook.free(img);
- tpl_hook.free(*gs);
- *gs = NULL;
- return -3; /* error, caller should close fd */
- }
- memcpy(&tpllen, &tpl[4], 4);
- if (tpl_needs_endian_swap(tpl)) tpl_byteswap(&tpllen, 4);
- if (tpl+tpllen <= img+catlen) {
- cbrc = (cb)(tpl, tpllen, data); /* invoke cb for tpl image */
- tpl += tpllen; /* point to next tpl image */
- if (cbrc < 0) keep_looping = 0;
- else keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
- } else keep_looping = 0;
- }
- /* check if app callback requested closure of tpl source */
- if (cbrc < 0) {
- tpl_hook.oops("tpl_fd_gather aborted by app callback\n");
- if (img != buf) tpl_hook.free(img);
- if (*gs) tpl_hook.free(*gs);
- *gs = NULL;
- return -4;
- }
- /* store any leftover, partial tpl fragment for next read */
- if (tpl == img && img != buf) {
- /* consumed nothing from img!= buf */
- if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL) {
- fatal_oom();
- }
- (*gs)->img = tpl;
- (*gs)->len = catlen;
- } else if (tpl < img+catlen) {
- /* consumed 1+ tpl(s) from img!= buf or 0 from img == buf */
- if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL) {
- fatal_oom();
- }
- if (((*gs)->img = tpl_hook.malloc(img+catlen - tpl)) == NULL) {
- fatal_oom();
- }
- (*gs)->len = img+catlen - tpl;
- memcpy((*gs)->img, tpl, img+catlen - tpl);
- /* free partially consumed concat buffer if used */
- if (img != buf) tpl_hook.free(img);
- } else { /* tpl(s) fully consumed */
- /* free consumed concat buffer if used */
- if (img != buf) tpl_hook.free(img);
- }
- }
- }
+ char buf[TPL_GATHER_BUFLEN], *img, *tpl;
+ int rc, keep_looping, cbrc = 0;
+ size_t catlen;
+ uint32_t tpllen;
+
+ while (1) {
+ rc = read(fd, buf, TPL_GATHER_BUFLEN);
+ if (rc == -1) {
+ if (errno == EINTR) continue; /* got signal during read, ignore */
+ if (errno == EAGAIN) return 1; /* nothing to read right now */
+ else {
+ tpl_hook.oops("tpl_gather failed: %s\n", strerror(errno));
+ if (*gs) {
+ tpl_hook.free((*gs)->img);
+ tpl_hook.free(*gs);
+ *gs = NULL;
+ }
+ return -1; /* error, caller should close fd */
+ }
+ } else if (rc == 0) {
+ if (*gs) {
+ tpl_hook.oops("tpl_gather: partial tpl image precedes EOF\n");
+ tpl_hook.free((*gs)->img);
+ tpl_hook.free(*gs);
+ *gs = NULL;
+ }
+ return 0; /* EOF, caller should close fd */
+ } else {
+ /* concatenate any partial tpl from last read with new buffer */
+ if (*gs) {
+ catlen = (*gs)->len + rc;
+ if (tpl_hook.gather_max > 0 &&
+ catlen > tpl_hook.gather_max) {
+ tpl_hook.free((*gs)->img);
+ tpl_hook.free((*gs));
+ *gs = NULL;
+ tpl_hook.oops("tpl exceeds max length %d\n",
+ tpl_hook.gather_max);
+ return -2; /* error, caller should close fd */
+ }
+ if ((img = tpl_hook.realloc((*gs)->img, catlen)) == NULL)
+ fatal_oom();
+
+ memcpy(img + (*gs)->len, buf, rc);
+ tpl_hook.free(*gs);
+ *gs = NULL;
+ } else {
+ img = buf;
+ catlen = rc;
+ }
+ /* isolate any full tpl(s) in img and invoke cb for each */
+ tpl = img;
+ keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
+ while (keep_looping) {
+ if (strncmp("tpl", tpl, 3) != 0) {
+ tpl_hook.oops("tpl prefix invalid\n");
+ if (img != buf) tpl_hook.free(img);
+ tpl_hook.free(*gs);
+ *gs = NULL;
+ return -3; /* error, caller should close fd */
+ }
+ memcpy(&tpllen, &tpl[4], 4);
+ if (tpl_needs_endian_swap(tpl)) tpl_byteswap(&tpllen, 4);
+ if (tpl+tpllen <= img+catlen) {
+ cbrc = (cb)(tpl, tpllen, data); /* invoke cb for tpl image */
+ tpl += tpllen; /* point to next tpl image */
+ if (cbrc < 0) keep_looping = 0;
+ else keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
+ } else keep_looping = 0;
+ }
+ /* check if app callback requested closure of tpl source */
+ if (cbrc < 0) {
+ tpl_hook.oops("tpl_fd_gather aborted by app callback\n");
+ if (img != buf) tpl_hook.free(img);
+ if (*gs) tpl_hook.free(*gs);
+ *gs = NULL;
+ return -4;
+ }
+ /* store any leftover, partial tpl fragment for next read */
+ if (tpl == img && img != buf) {
+ /* consumed nothing from img!= buf */
+ if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL)
+ fatal_oom();
+
+ (*gs)->img = tpl;
+ (*gs)->len = catlen;
+ } else if (tpl < img+catlen) {
+ /* consumed 1+ tpl(s) from img!= buf or 0 from img == buf */
+ if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL)
+ fatal_oom();
+
+ if (((*gs)->img = tpl_hook.malloc(img+catlen - tpl)) == NULL)
+ fatal_oom();
+
+ (*gs)->len = img+catlen - tpl;
+ memcpy((*gs)->img, tpl, img+catlen - tpl);
+ /* free partially consumed concat buffer if used */
+ if (img != buf) tpl_hook.free(img);
+ } else { /* tpl(s) fully consumed */
+ /* free consumed concat buffer if used */
+ if (img != buf) tpl_hook.free(img);
+ }
+ }
+ }
}
/* gather tpl piecemeal from memory buffer (not fd) e.g., from a lower-level api */
static int tpl_gather_mem(char *buf, size_t len, tpl_gather_t **gs, tpl_gather_cb *cb, void *data)
{
- char *img, *tpl;
- int keep_looping, cbrc = 0;
- size_t catlen;
- uint32_t tpllen;
-
- /* concatenate any partial tpl from last read with new buffer */
- if (*gs) {
- catlen = (*gs)->len + len;
- if (tpl_hook.gather_max > 0 &&
- catlen > tpl_hook.gather_max) {
- tpl_hook.free((*gs)->img);
- tpl_hook.free((*gs));
- *gs = NULL;
- tpl_hook.oops("tpl exceeds max length %d\n",
- tpl_hook.gather_max);
- return -2; /* error, caller should stop accepting input from source*/
- }
- if ((img = tpl_hook.realloc((*gs)->img, catlen)) == NULL) {
- fatal_oom();
- }
- memcpy(img + (*gs)->len, buf, len);
- tpl_hook.free(*gs);
- *gs = NULL;
- } else {
- img = buf;
- catlen = len;
- }
- /* isolate any full tpl(s) in img and invoke cb for each */
- tpl = img;
- keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
- while (keep_looping) {
- if (strncmp("tpl", tpl, 3) != 0) {
- tpl_hook.oops("tpl prefix invalid\n");
- if (img != buf) tpl_hook.free(img);
- tpl_hook.free(*gs);
- *gs = NULL;
- return -3; /* error, caller should stop accepting input from source*/
- }
- memcpy(&tpllen, &tpl[4], 4);
- if (tpl_needs_endian_swap(tpl)) tpl_byteswap(&tpllen, 4);
- if (tpl+tpllen <= img+catlen) {
- cbrc = (cb)(tpl, tpllen, data); /* invoke cb for tpl image */
- tpl += tpllen; /* point to next tpl image */
- if (cbrc < 0) keep_looping = 0;
- else keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
- } else keep_looping = 0;
- }
- /* check if app callback requested closure of tpl source */
- if (cbrc < 0) {
- tpl_hook.oops("tpl_mem_gather aborted by app callback\n");
- if (img != buf) tpl_hook.free(img);
- if (*gs) tpl_hook.free(*gs);
- *gs = NULL;
- return -4;
- }
- /* store any leftover, partial tpl fragment for next read */
- if (tpl == img && img != buf) {
- /* consumed nothing from img!= buf */
- if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL) {
- fatal_oom();
- }
- (*gs)->img = tpl;
- (*gs)->len = catlen;
- } else if (tpl < img+catlen) {
- /* consumed 1+ tpl(s) from img!= buf or 0 from img == buf */
- if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL) {
- fatal_oom();
- }
- if (((*gs)->img = tpl_hook.malloc(img+catlen - tpl)) == NULL) {
- fatal_oom();
- }
- (*gs)->len = img+catlen - tpl;
- memcpy((*gs)->img, tpl, img+catlen - tpl);
- /* free partially consumed concat buffer if used */
- if (img != buf) tpl_hook.free(img);
- } else { /* tpl(s) fully consumed */
- /* free consumed concat buffer if used */
- if (img != buf) tpl_hook.free(img);
- }
- return 1;
+ char *img, *tpl;
+ int keep_looping, cbrc = 0;
+ size_t catlen;
+ uint32_t tpllen;
+
+ /* concatenate any partial tpl from last read with new buffer */
+ if (*gs) {
+ catlen = (*gs)->len + len;
+ if (tpl_hook.gather_max > 0 &&
+ catlen > tpl_hook.gather_max) {
+ tpl_hook.free((*gs)->img);
+ tpl_hook.free((*gs));
+ *gs = NULL;
+ tpl_hook.oops("tpl exceeds max length %d\n",
+ tpl_hook.gather_max);
+ return -2; /* error, caller should stop accepting input from source*/
+ }
+ if ((img = tpl_hook.realloc((*gs)->img, catlen)) == NULL)
+ fatal_oom();
+
+ memcpy(img + (*gs)->len, buf, len);
+ tpl_hook.free(*gs);
+ *gs = NULL;
+ } else {
+ img = buf;
+ catlen = len;
+ }
+ /* isolate any full tpl(s) in img and invoke cb for each */
+ tpl = img;
+ keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
+ while (keep_looping) {
+ if (strncmp("tpl", tpl, 3) != 0) {
+ tpl_hook.oops("tpl prefix invalid\n");
+ if (img != buf) tpl_hook.free(img);
+ tpl_hook.free(*gs);
+ *gs = NULL;
+ return -3; /* error, caller should stop accepting input from source*/
+ }
+ memcpy(&tpllen, &tpl[4], 4);
+ if (tpl_needs_endian_swap(tpl)) tpl_byteswap(&tpllen, 4);
+ if (tpl+tpllen <= img+catlen) {
+ cbrc = (cb)(tpl, tpllen, data); /* invoke cb for tpl image */
+ tpl += tpllen; /* point to next tpl image */
+ if (cbrc < 0) keep_looping = 0;
+ else keep_looping = (tpl+8 < img+catlen) ? 1 : 0;
+ } else keep_looping = 0;
+ }
+ /* check if app callback requested closure of tpl source */
+ if (cbrc < 0) {
+ tpl_hook.oops("tpl_mem_gather aborted by app callback\n");
+ if (img != buf) tpl_hook.free(img);
+ if (*gs) tpl_hook.free(*gs);
+ *gs = NULL;
+ return -4;
+ }
+ /* store any leftover, partial tpl fragment for next read */
+ if (tpl == img && img != buf) {
+ /* consumed nothing from img!= buf */
+ if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL)
+ fatal_oom();
+
+ (*gs)->img = tpl;
+ (*gs)->len = catlen;
+ } else if (tpl < img+catlen) {
+ /* consumed 1+ tpl(s) from img!= buf or 0 from img == buf */
+ if ((*gs = tpl_hook.malloc(sizeof(tpl_gather_t))) == NULL)
+ fatal_oom();
+
+ if (((*gs)->img = tpl_hook.malloc(img+catlen - tpl)) == NULL)
+ fatal_oom();
+
+ (*gs)->len = img+catlen - tpl;
+ memcpy((*gs)->img, tpl, img+catlen - tpl);
+ /* free partially consumed concat buffer if used */
+ if (img != buf) tpl_hook.free(img);
+ } else { /* tpl(s) fully consumed */
+ /* free consumed concat buffer if used */
+ if (img != buf) tpl_hook.free(img);
+ }
+ return 1;
}
/*
-* email-service
-*
-* Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-*/
+ * email-service
+ *
+ * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Kyuho Jo <kyuho.jo@samsung.com>, Sunghyun Kwon <sh0701.kwon@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
/******************************************************************************
if (_db_handle_list[i].thread_id == 0) {
_db_handle_list[i].thread_id = current_thread_id;
_db_handle_list[i].db_handle = db_handle;
- /* Only distinguished container and host */
+ /* Only distinguished container and host */
_db_handle_list[i].user_name = EM_SAFE_STRDUP(multi_user_name);
EM_DEBUG_LOG("current_thread_id [%d], index [%d]", current_thread_id, i);
error_code = EMAIL_ERROR_NONE;
}
LEAVE_CRITICAL_SECTION(_db_handle_lock)
- EM_DEBUG_FUNC_END();
+ EM_DEBUG_FUNC_END();
return EMAIL_ERROR_NONE;
}
#else /* __FEATURE_USE_SHARED_MUTEX_FOR_PROTECTED_FUNC_CALL__ */
#define EMSTORAGE_PROTECTED_FUNC_CALL(function_call, return_value) \
- { return_value = function_call; }
+{ return_value = function_call; }
#endif /* __FEATURE_USE_SHARED_MUTEX_FOR_PROTECTED_FUNC_CALL__ */
static int emstorage_exec_query_by_prepare_v2(sqlite3 *local_db_handle, char *query_string)
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, query_string, EM_SAFE_STRLEN(query_string), &db_statement, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_prepare failed [%d] [%s]", rc, query_string));
+ ("sqlite3_prepare failed [%d] [%s]", rc, query_string));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(db_statement), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step failed [%d] [%s]", rc, query_string));
+ ("sqlite3_step failed [%d] [%s]", rc, query_string));
FINISH_OFF:
}
}
- fchmod((*param_shm_fd), 0666);
- EM_DEBUG_LOG("** Create SHM FILE **");
- if (ftruncate((*param_shm_fd), sizeof(mmapped_t)) != 0) {
- EM_DEBUG_EXCEPTION("ftruncate errno [%d]", errno);
- return EMAIL_ERROR_SYSTEM_FAILURE;
- }
+ fchmod((*param_shm_fd), 0666);
+ EM_DEBUG_LOG("** Create SHM FILE **");
+ if (ftruncate((*param_shm_fd), sizeof(mmapped_t)) != 0) {
+ EM_DEBUG_EXCEPTION("ftruncate errno [%d]", errno);
+ return EMAIL_ERROR_SYSTEM_FAILURE;
+ }
- mmapped_t *tmp = (mmapped_t *)mmap(NULL, sizeof(mmapped_t), PROT_READ|PROT_WRITE, MAP_SHARED, (*param_shm_fd), 0);
- if (tmp == MAP_FAILED) {
- EM_DEBUG_EXCEPTION("mmap failed: %s", EM_STRERROR(errno_buf));
- return EMAIL_ERROR_SYSTEM_FAILURE;
- }
+ mmapped_t *tmp = (mmapped_t *)mmap(NULL, sizeof(mmapped_t), PROT_READ|PROT_WRITE, MAP_SHARED, (*param_shm_fd), 0);
+ if (tmp == MAP_FAILED) {
+ EM_DEBUG_EXCEPTION("mmap failed: %s", EM_STRERROR(errno_buf));
+ return EMAIL_ERROR_SYSTEM_FAILURE;
+ }
- tmp->data = 0;
+ tmp->data = 0;
- pthread_mutexattr_t mattr;
- pthread_mutexattr_init(&mattr);
- pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
- pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST_NP);
- pthread_mutex_init(&(tmp->mutex), &mattr);
- pthread_mutexattr_destroy(&mattr);
+ pthread_mutexattr_t mattr;
+ pthread_mutexattr_init(&mattr);
+ pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
+ pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST_NP);
+ pthread_mutex_init(&(tmp->mutex), &mattr);
+ pthread_mutexattr_destroy(&mattr);
- *param_mapped = tmp;
+ *param_mapped = tmp;
}
EM_DEBUG_FUNC_END();
} em_mail_id_list;
static char *g_test_query[] = {
- /* 1. select mail_account_tbl */
- "SELECT"
+ /* 1. select mail_account_tbl */
+ "SELECT"
" account_name, "
" incoming_server_type, "
" incoming_server_address, "
", cipher_type"
", digest_type"
" FROM mail_account_tbl",
- /* 2. select mail_box_tbl */
- "SELECT "
+ /* 2. select mail_box_tbl */
+ "SELECT "
" mailbox_id, "
" account_id, "
" local_yn, "
" no_select, "
" last_sync_time "
" FROM mail_box_tbl ",
- /* 3. select mail_read_mail_uid_tbl */
- "SELECT "
+ /* 3. select mail_read_mail_uid_tbl */
+ "SELECT "
" account_id, "
" mailbox_id, "
" mailbox_name, "
" flags_seen_field, "
" idx_num "
" FROM mail_read_mail_uid_tbl ",
- /* 4. select mail_rule_tbl */
- "SELECT "
+ /* 4. select mail_rule_tbl */
+ "SELECT "
" account_id, "
" rule_id, "
" filter_name, "
" flag1, "
" flag2 "
" FROM mail_rule_tbl ",
- /* 5. select mail_tbl */
- "SELECT"
+ /* 5. select mail_tbl */
+ "SELECT"
" mail_id, "
" account_id, "
" mailbox_id, "
" digest_type, "
" smime_type "
" FROM mail_tbl",
- /* 6. select mail_attachment_tbl */
- "SELECT "
+ /* 6. select mail_attachment_tbl */
+ "SELECT "
" attachment_id, "
" attachment_name, "
" attachment_path, "
" FROM mail_attachment_tbl ",
#ifdef __FEATURE_PARTIAL_BODY_DOWNLOAD__
- "SELECT "
+ "SELECT "
" account_id, "
" mail_id, "
" server_mail_id, "
" FROM mail_partial_body_activity_tbl ",
#endif
- "SELECT "
+ "SELECT "
" mail_id, "
" account_id, "
" mailbox_id, "
" FROM mail_meeting_tbl ",
#ifdef __FEATURE_LOCAL_ACTIVITY__
- "SELECT "
+ "SELECT "
" activity_id, "
" account_id, "
" mail_id, "
" dest_mbox "
" FROM mail_local_activity_tbl ",
#endif
- "SELECT "
+ "SELECT "
" certificate_id, "
" issue_year, "
" issue_month, "
" filepath, "
" password "
" FROM mail_certificate_tbl ",
- "SELECT "
+ "SELECT "
" task_id, "
" task_type, "
" task_status, "
" date_time "
" FROM mail_task_tbl ",
#ifdef __FEATURE_BODY_SEARCH__
- "SELECT "
+ "SELECT "
" mail_id, "
" account_id, "
" mailbox_id, "
" FROM mail_text_tbl ",
#endif
#ifdef __FEATURE_WIFI_AUTO_DOWNLOAD__
- "SELECT "
+ "SELECT "
" activity_id, "
" status, "
" account_id, "
" multi_user_name, "
" FROM mail_auto_download_activity_tbl ",
#endif
- NULL,
+ NULL,
};
int _field_count_of_table[CREATE_TABLE_MAX] = { 0, };
{
if ((table == NULL) || (buf == NULL) || (index < 0)) {
EM_DEBUG_EXCEPTION(" table[%p], buf[%p], index[%d]", table, buf, index);
- return false;
+ return false;
}
char *pTemp = table[index];
if (sqlite3_column_text(hStmt, index) != NULL) {
*buf = (char)sqlite3_column_int(hStmt, index);
#ifdef _PRINT_STORAGE_LOG_
- EM_DEBUG_LOG("_get_stmt_field_data_int [%d]", *buf);
+ EM_DEBUG_LOG("_get_stmt_field_data_int [%d]", *buf);
#endif
return true;
}
if (sqlite3_column_text(hStmt, index) != NULL) {
*buf = sqlite3_column_int(hStmt, index);
#ifdef _PRINT_STORAGE_LOG_
- EM_DEBUG_LOG("_get_stmt_field_data_int [%d]", *buf);
+ EM_DEBUG_LOG("_get_stmt_field_data_int [%d]", *buf);
#endif
return true;
}
sLen = sqlite3_column_bytes(hStmt, index);
#ifdef _PRINT_STORAGE_LOG_
- EM_DEBUG_LOG("_get_stmt_field_data_string sqlite3_column_bytes sLen[%d]", sLen);
+ EM_DEBUG_LOG("_get_stmt_field_data_string sqlite3_column_bytes sLen[%d]", sLen);
#endif
if (sLen > 0) {
if (!emstorage_db_close(NULL, &error))
- if (--_open_counter == 0)
- _emstorage_close_once();
+ if (--_open_counter == 0)
+ _emstorage_close_once();
ret = true;
return NULL;
}
- /* pData : a parameter which is registered when busy handler is registerd */
- /* count : retry count */
+/* pData : a parameter which is registered when busy handler is registerd */
+/* count : retry count */
static int _callback_sqlite_busy_handler(void *pData, int count)
{
if (10 - count > 0) {
}
static int _callback_collation_utf7_sort(void *data, int length_text_a, const void *text_a,
- int length_text_b, const void *text_b)
+ int length_text_b, const void *text_b)
{
EM_DEBUG_FUNC_BEGIN();
int result = 0;
chmod(EMAIL_SERVICE_DB_JOURNAL_FILE_PATH, 0660);
chmod(EMAIL_SQL_PATH, 0660);
- chown(EMAIL_SERVICE_DB_FILE_PATH, email_uid, email_gid);
- chown(EMAIL_SERVICE_DB_JOURNAL_FILE_PATH, email_uid, email_gid);
- chown(EMAIL_SQL_PATH, email_uid, email_gid);
+ ret = chown(EMAIL_SERVICE_DB_FILE_PATH, email_uid, email_gid);
+ if (0 != ret)
+ EM_DEBUG_EXCEPTION("chown() Fail[errno=%d]", errno);
+ ret = chown(EMAIL_SERVICE_DB_JOURNAL_FILE_PATH, email_uid, email_gid);
+ if (0 != ret)
+ EM_DEBUG_EXCEPTION("chown() Fail[errno=%d]", errno);
+ ret = chown(EMAIL_SQL_PATH, email_uid, email_gid);
+ if (0 != ret)
+ EM_DEBUG_EXCEPTION("chown() Fail[errno=%d]", errno);
}
return true;
}
- EM_DEBUG_LOG("DB file path : [%s]", db_file_path);
+ EM_DEBUG_LOG("DB file path : [%s]", db_file_path);
/* db open */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_open(db_file_path, sqlite_handle), rc);
if (SQLITE_OK != rc) {
EM_DEBUG_EXCEPTION("sqlite3_open fail:%d -%s", rc, sqlite3_errmsg(*sqlite_handle));
- if (SQLITE_PERM == rc || SQLITE_CANTOPEN == rc) {
+ if (SQLITE_PERM == rc || SQLITE_CANTOPEN == rc)
error = EMAIL_ERROR_PERMISSION_DENIED;
- } else {
+ else
error = EMAIL_ERROR_DB_FAILURE;
- }
+
sqlite3_close(*sqlite_handle);
*sqlite_handle = NULL;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_open(db_file_path, sqlite_handle), rc);
if (SQLITE_OK != rc) {
EM_DEBUG_EXCEPTION("sqlite3_open fail:%d -%s", rc, sqlite3_errmsg(*sqlite_handle));
- if (SQLITE_PERM == rc) {
+ if (SQLITE_PERM == rc)
error = EMAIL_ERROR_PERMISSION_DENIED;
- } else {
+ else
error = EMAIL_ERROR_DB_FAILURE;
- }
+
sqlite3_close(*sqlite_handle);
*sqlite_handle = NULL;
goto FINISH_OFF; /*prevent 33351*/
if (_db_handle == NULL) {
char *output_file_path = NULL;
- char temp_file_path[MAX_PATH] = {0};
+ char temp_file_path[MAX_PATH] = {0};
- if (EM_SAFE_STRLEN(multi_user_name) > 0) {
- error = emcore_get_container_path(multi_user_name, &prefix_path);
- if (error != EMAIL_ERROR_CONTAINER_NOT_INITIALIZATION && error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emcore_get_container_path failed :[%d]", error);
- goto FINISH_OFF;
- }
- } else {
- prefix_path = strdup("");
- }
+ if (EM_SAFE_STRLEN(multi_user_name) > 0) {
+ error = emcore_get_container_path(multi_user_name, &prefix_path);
+ if (error != EMAIL_ERROR_CONTAINER_NOT_INITIALIZATION && error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emcore_get_container_path failed :[%d]", error);
+ goto FINISH_OFF;
+ }
+ } else {
+ prefix_path = strdup("");
+ }
if (error == EMAIL_ERROR_CONTAINER_NOT_INITIALIZATION) {
if ((error = emcore_get_canonicalize_path((char *)EMAIL_SERVICE_DB_FILE_PATH, &output_file_path)) != EMAIL_ERROR_NONE) {
}
if (!g_file_test(buf, G_FILE_TEST_EXISTS)) {
- retValue = mkdir(buf, DIRECTORY_PERMISSION);
+ retValue = mkdir(buf, DIRECTORY_PERMISSION);
EM_DEBUG_LOG("mkdir return- %d", retValue);
- EM_DEBUG_LOG("emstorage_open - before sqlite3_open - pid = %d", getpid());
+ EM_DEBUG_LOG("emstorage_open - before sqlite3_open - pid = %d", getpid());
}
if (emstorage_db_open(multi_user_name, &error) == NULL) {
goto FINISH_OFF;
}
- if (_open_counter++ == 0) {
+ if (_open_counter++ == 0)
_emstorage_open_once(multi_user_name, &error);
- }
ret = true;
if (create_table_query) {
int i = 0;
for (i = 0; i < query_len; i++) {
- if (create_table_query[i]) {
+ if (create_table_query[i])
EM_SAFE_FREE(create_table_query[i]);
- }
}
EM_SAFE_FREE(create_table_query);
}
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_account_tbl';";
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("emstorage_create_table - result[1] = %s %c", result[1], result[1]);
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_account_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_ACCOUNT_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_box_tbl");
else if (type == EMAIL_CREATE_DB_CHECK) {
rc = sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_BOX_TBL], NULL, NULL, NULL);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_BOX_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_BOX_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_read_mail_uid_tbl';";
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_read_mail_uid_tbl");
else if (type == EMAIL_CREATE_DB_CHECK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_READ_MAIL_UID_TBL], NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_READ_MAIL_UID_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_READ_MAIL_UID_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_rule_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_RULE_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} /* mail_rule_tbl */
else if (type == EMAIL_CREATE_DB_CHECK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_RULE_TBL], NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_RULE_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_RULE_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_tbl';";
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
/* create mail_tbl unique index */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "%s", create_table_query[CREATE_TABLE_MAIL_IDX]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
/* create mail_tbl index for date_time */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "%s", create_table_query[CREATE_TABLE_MAIL_DATETIME_IDX]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
/* create mail_tbl index for thread_item_count */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "%s", create_table_query[CREATE_TABLE_MAIL_THREAD_IDX]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
/* just one time call */
-/* EFTSInitFTSIndex(FTS_EMAIL_IDX); */
- } /* mail_tbl */
+ /* EFTSInitFTSIndex(FTS_EMAIL_IDX); */
+ } /* mail_tbl */
else if (type == EMAIL_CREATE_DB_CHECK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_TBL], NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_attachment_tbl';";
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_attachment_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_ATTACHMENT_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
/* create mail_attachment_tbl unique index */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "%s", create_table_query[CREATE_TABLE_MAIL_ATTACHMENT_IDX]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} /* mail_attachment_tbl */
else if (type == EMAIL_CREATE_DB_CHECK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_ATTACHMENT_TBL], NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_ATTACHMENT_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_ATTACHMENT_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_partial_body_activity_tbl';";
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_partial_body_activity_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_PARTIAL_BODY_ACTIVITY_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} /* mail_rule_tbl */
else if (type == EMAIL_CREATE_DB_CHECK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_PARTIAL_BODY_ACTIVITY_TBL], NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_PARTIAL_BODY_ACTIVITY_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_PARTIAL_BODY_ACTIVITY_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_meeting_tbl';";
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (atoi(result[1]) < 1) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
- ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("CREATE TABLE mail_meeting_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_MEETING_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
SNPRINTF(sql_query_string, sizeof(sql_query_string), "%s", create_table_query[CREATE_TABLE_MAIL_MEETING_IDX]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} /* mail_contact_sync_tbl */
else if (type == EMAIL_CREATE_DB_CHECK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_MEETING_TBL], NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_MEETING_TBL], rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_MEETING_TBL], rc, sqlite3_errmsg(local_db_handle)));
}
sqlite3_free_table(result);
result = NULL;
#ifdef __FEATURE_LOCAL_ACTIVITY__
- sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_local_activity_tbl';";
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
- EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
+ sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_local_activity_tbl';";
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
+ EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
- if (atoi(result[1]) < 1) {
+ if (atoi(result[1]) < 1) {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
- EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN;", NULL, NULL, NULL), rc);
+ EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {goto FINISH_OFF; },
("SQL(BEGIN EXCLUSIVE) exec fail:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
- EM_DEBUG_LOG(" CREATE TABLE mail_local_activity_tbl");
+ EM_DEBUG_LOG(" CREATE TABLE mail_local_activity_tbl");
- SNPRINTF(sql_query_string, sizeof(sql_query_string), create_table_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ SNPRINTF(sql_query_string, sizeof(sql_query_string), create_table_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL]);
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
- } /* mail_rule_tbl */
- else if (type == EMAIL_CREATE_DB_CHECK) {
- rc = sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL], NULL, NULL, NULL);
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL], NULL, NULL, NULL), rc);
- EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
+ } /* mail_rule_tbl */
+ else if (type == EMAIL_CREATE_DB_CHECK) {
+ rc = sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL], NULL, NULL, NULL);
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, g_test_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL], NULL, NULL, NULL), rc);
+ EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
("SQL(%s) exec fail:%d -%s", g_test_query[CREATE_TABLE_MAIL_LOCAL_ACTIVITY_TBL], rc, sqlite3_errmsg(local_db_handle)));
- }
- sqlite3_free_table(result);
- result = NULL;
+ }
+ sqlite3_free_table(result);
+ result = NULL;
#endif /* __FEATURE_LOCAL_ACTIVITY__ */
/* create mail_certificate_tbl */
sql = "SELECT count(name) FROM sqlite_master WHERE name='mail_certificate_tbl';";
EM_DEBUG_LOG("CREATE TABLE mail_certificate_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_CERTIFICATE_TBL], sizeof(sql_query_string)-1); /*prevent 21984*/
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} /* mail_contact_sync_tbl */
EM_DEBUG_LOG("CREATE TABLE mail_task_tbl");
EM_SAFE_STRNCPY(sql_query_string, create_table_query[CREATE_TABLE_MAIL_TASK_TBL], sizeof(sql_query_string)-1); /*prevent 21984 */
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
SNPRINTF(sql_query_string, sizeof(sql_query_string), "%s", create_table_query[CREATE_TABLE_MAIL_TASK_IDX]);
- error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
- if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
- }
+ error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
+ if (error != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
+ }
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} /* mail_task_tbl */
if (result) sqlite3_free_table(result);
if (ret == true) {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} else {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
}
FINISH_OFF2:
if (create_table_query) {
int i = 0;
for (i = 0; i < query_len; i++) {
- if (create_table_query[i]) {
+ if (create_table_query[i])
EM_SAFE_FREE(create_table_query[i]);
- }
}
EM_SAFE_FREE(create_table_query);
}
if (output_total_mail_count) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_prepare failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_prepare failed [%d] [%s]", rc, sql_query_string));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_step failed [%d] [%s]", rc, sql_query_string));
_get_stmt_field_data_int(hStmt, output_total_mail_count, 0);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string));
*output_unseen_mail_count = atoi(result[1]);
sqlite3_free_table(result);
/* Performing query */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
col_index = 1;
EM_PROFILE_BEGIN(emstorage_query_mail_list_performing_query);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string));
EM_PROFILE_END(emstorage_query_mail_list_performing_query);
if (!base_count)
EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
EM_SAFE_FREE(sql_query_string);
EM_SAFE_FREE(date_time_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string));
if (!count) {
EM_DEBUG_LOG("No mail found...");
EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
if (err_code != NULL)
*err_code = error;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
if (!count) {
EM_DEBUG_LOG("No mail found...");
EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
if (err_code != NULL)
*err_code = error;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string))
+ ("sqlite3_get_table failed [%d] [%s]", rc, sql_query_string))
- EM_DEBUG_LOG_DEV("result count [%d]", count);
+ EM_DEBUG_LOG_DEV("result count [%d]", count);
if (count == 0) {
EM_DEBUG_LOG_SEC("Can't find mailbox query[%s]", sql_query_string);
EMSTORAGE_FINISH_READ_TRANSACTION(input_transaction);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
EM_DEBUG_FUNC_END("error [%d]", error);
return error;
sqlite3 *local_db_handle = NULL;
if (account == NULL || account->user_email_address == NULL || account->incoming_server_user_name == NULL || account->incoming_server_address == NULL ||
- account->outgoing_server_user_name == NULL || account->outgoing_server_address == NULL) {
+ account->outgoing_server_user_name == NULL || account->outgoing_server_address == NULL) {
if (err_code != NULL)
*err_code = EMAIL_ERROR_INVALID_PARAM;
return false;
EMSTORAGE_START_READ_TRANSACTION(transaction);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "SELECT COUNT(*) FROM mail_account_tbl "
- " WHERE "
- " user_email_address = '%s' AND "
- " incoming_server_user_name = '%s' AND "
- " incoming_server_type = %d AND "
- " incoming_server_address = '%s' AND "
- " outgoing_server_user_name = '%s' AND "
- " outgoing_server_type = %d AND "
- " outgoing_server_address = '%s'; ",
- account->user_email_address,
- account->incoming_server_user_name, account->incoming_server_type, account->incoming_server_address,
- account->outgoing_server_user_name, account->outgoing_server_type, account->outgoing_server_address
- );
+ "SELECT COUNT(*) FROM mail_account_tbl "
+ " WHERE "
+ " user_email_address = '%s' AND "
+ " incoming_server_user_name = '%s' AND "
+ " incoming_server_type = %d AND "
+ " incoming_server_address = '%s' AND "
+ " outgoing_server_user_name = '%s' AND "
+ " outgoing_server_type = %d AND "
+ " outgoing_server_address = '%s'; ",
+ account->user_email_address,
+ account->incoming_server_user_name, account->incoming_server_type, account->incoming_server_address,
+ account->outgoing_server_user_name, account->outgoing_server_type, account->outgoing_server_address
+ );
EM_DEBUG_LOG_SEC("Query[%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
count = atoi(result[1]);
sqlite3_free_table(result);
SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT COUNT(*) FROM mail_account_tbl");
EM_DEBUG_LOG_SEC("SQL STMT [%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string,
- EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("Before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
*count = sqlite3_column_int(hStmt, 0);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
count = atoi(result[1]);
sqlite3_free_table(result);
sql_len = EM_SAFE_STRLEN(sql_query_string);
SNPRINTF(sql_query_string + sql_len, sizeof(sql_query_string) - sql_len,
- "account_id, "
- "account_name, "
- "logo_icon_path, "
- "user_data, "
- "user_data_length, "
- "account_svc_id, "
- "sync_status, "
- "sync_disabled, "
- "default_mail_slot_size, "
- "roaming_option, "
- "color_label, "
- "user_display_name, "
- "user_email_address, "
- "reply_to_address, "
- "return_address, "
- "incoming_server_type, "
- "incoming_server_address, "
- "incoming_server_port_number, "
- "incoming_server_user_name, "
- "incoming_server_password, "
- "incoming_server_secure_connection, "
- "incoming_server_authentication_method, "
- "retrieval_mode, "
- "keep_mails_on_pop_server_after_download, "
- "check_interval, "
- "auto_download_size, "
- "peak_interval, "
- "peak_days, "
- "peak_start_time, "
- "peak_end_time, "
- "outgoing_server_type, "
- "outgoing_server_address, "
- "outgoing_server_port_number, "
- "outgoing_server_user_name, "
- "outgoing_server_password, "
- "outgoing_server_secure_connection, "
- "outgoing_server_need_authentication, "
- "outgoing_server_use_same_authenticator, "
- "priority, "
- "keep_local_copy, "
- "req_delivery_receipt, "
- "req_read_receipt, "
- "download_limit, "
- "block_address, "
- "block_subject, "
- "display_name_from, "
- "reply_with_body, "
- "forward_with_files, "
- "add_myname_card, "
- "add_signature, "
- "signature, "
- "add_my_address_to_bcc, "
- "notification_status, "
- "vibrate_status, "
- "display_content_status, "
- "default_ringtone_status, "
- "alert_ringtone_path, "
- "auto_resend_times, "
- "outgoing_server_size_limit, "
- "wifi_auto_download, "
- "pop_before_smtp, "
- "incoming_server_requires_apop, "
- "smime_type, "
- "certificate_path, "
- "cipher_type, "
- "digest_type"
- );
+ "account_id, "
+ "account_name, "
+ "logo_icon_path, "
+ "user_data, "
+ "user_data_length, "
+ "account_svc_id, "
+ "sync_status, "
+ "sync_disabled, "
+ "default_mail_slot_size, "
+ "roaming_option, "
+ "color_label, "
+ "user_display_name, "
+ "user_email_address, "
+ "reply_to_address, "
+ "return_address, "
+ "incoming_server_type, "
+ "incoming_server_address, "
+ "incoming_server_port_number, "
+ "incoming_server_user_name, "
+ "incoming_server_password, "
+ "incoming_server_secure_connection, "
+ "incoming_server_authentication_method, "
+ "retrieval_mode, "
+ "keep_mails_on_pop_server_after_download, "
+ "check_interval, "
+ "auto_download_size, "
+ "peak_interval, "
+ "peak_days, "
+ "peak_start_time, "
+ "peak_end_time, "
+ "outgoing_server_type, "
+ "outgoing_server_address, "
+ "outgoing_server_port_number, "
+ "outgoing_server_user_name, "
+ "outgoing_server_password, "
+ "outgoing_server_secure_connection, "
+ "outgoing_server_need_authentication, "
+ "outgoing_server_use_same_authenticator, "
+ "priority, "
+ "keep_local_copy, "
+ "req_delivery_receipt, "
+ "req_read_receipt, "
+ "download_limit, "
+ "block_address, "
+ "block_subject, "
+ "display_name_from, "
+ "reply_with_body, "
+ "forward_with_files, "
+ "add_myname_card, "
+ "add_signature, "
+ "signature, "
+ "add_my_address_to_bcc, "
+ "notification_status, "
+ "vibrate_status, "
+ "display_content_status, "
+ "default_ringtone_status, "
+ "alert_ringtone_path, "
+ "auto_resend_times, "
+ "outgoing_server_size_limit, "
+ "wifi_auto_download, "
+ "pop_before_smtp, "
+ "incoming_server_requires_apop, "
+ "smime_type, "
+ "certificate_path, "
+ "cipher_type, "
+ "digest_type"
+ );
sql_len = EM_SAFE_STRLEN(sql_query_string);
EM_DEBUG_LOG_DEV("After sqlite3_prepare_v2 hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION("no account found...");
/* get password file name */
error = _get_password_file_name(multi_user_name, p_data_tbl[i].account_id,
- recv_password_file_name,
- send_password_file_name);
+ recv_password_file_name,
+ send_password_file_name);
if (error != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("_get_password_file_name error [%d]", error);
error = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
/* read password from secure storage */
error = _read_password_from_secure_storage(recv_password_file_name,
- &(p_data_tbl[i].incoming_server_password));
+ &(p_data_tbl[i].incoming_server_password));
if (error < 0) {
EM_DEBUG_EXCEPTION("_read_password_from_secure_storage()[%s] error [%d]",
- recv_password_file_name, error);
+ recv_password_file_name, error);
error = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
goto FINISH_OFF;
}
error = _read_password_from_secure_storage(send_password_file_name,
- &(p_data_tbl[i].outgoing_server_password));
+ &(p_data_tbl[i].outgoing_server_password));
if (error < 0) {
EM_DEBUG_EXCEPTION("_read_password_from_secure_storage()[%s] error [%d]",
- send_password_file_name, error);
+ send_password_file_name, error);
error = EMAIL_ERROR_SECURED_STORAGE_FAILURE;
goto FINISH_OFF;
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_LOG_DEV("after sqlite3_step(), i = %d, rc = %d.", i, rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
}
ret = true;
}
INTERNAL_FUNC int emstorage_get_maildata_by_servermailid(char *multi_user_name,
- char *server_mail_id,
- int mailbox_id,
- emstorage_mail_tbl_t **mail,
- int transaction,
- int *err_code)
+ char *server_mail_id,
+ int mailbox_id,
+ emstorage_mail_tbl_t **mail,
+ int transaction,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN_SEC("mailbox_id [%d], server_mail_id[%s], mail[%p], transaction[%d], err_code[%p]",
- mailbox_id, server_mail_id, mail, transaction, err_code);
+ mailbox_id, server_mail_id, mail, transaction, err_code);
int ret = false, error = EMAIL_ERROR_NONE, result_count;
char conditional_clause[QUERY_SIZE] = {0, };
if (mailbox_id > 0) {
SNPRINTF(conditional_clause + strlen(conditional_clause),
- QUERY_SIZE - strlen(conditional_clause),
- " AND mailbox_id = %d",
- mailbox_id);
+ QUERY_SIZE - strlen(conditional_clause),
+ " AND mailbox_id = %d",
+ mailbox_id);
}
EM_DEBUG_LOG("conditional_clause [%s]", conditional_clause);
if (!emstorage_query_mail_tbl(multi_user_name,
- conditional_clause,
- transaction,
- &p_data_tbl,
- &result_count,
- &error)) {
+ conditional_clause,
+ transaction,
+ &p_data_tbl,
+ &result_count,
+ &error)) {
EM_DEBUG_EXCEPTION("emstorage_query_mail_tbl failed [%d]", error);
goto FINISH_OFF;
}
if (search_value) {
switch (search_type) {
- case EMAIL_SEARCH_FILTER_SUBJECT:
- cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
+ case EMAIL_SEARCH_FILTER_SUBJECT:
+ cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
" %s (UPPER(subject) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') ", conditional_clause_count++ ? "AND" : "WHERE", search_value);
- break;
- case EMAIL_SEARCH_FILTER_SENDER:
- cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
+ break;
+ case EMAIL_SEARCH_FILTER_SENDER:
+ cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
" %s ((UPPER(full_address_from) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
") ", conditional_clause_count++ ? "AND" : "WHERE", search_value);
- break;
- case EMAIL_SEARCH_FILTER_RECIPIENT:
- cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
+ break;
+ case EMAIL_SEARCH_FILTER_RECIPIENT:
+ cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
" %s ((UPPER(full_address_to) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
" OR (UPPER(full_address_cc) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
" OR (UPPER(full_address_bcc) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
") ", conditional_clause_count++ ? "AND" : "WHERE", search_value, search_value, search_value);
- break;
- case EMAIL_SEARCH_FILTER_ALL:
- cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
+ break;
+ case EMAIL_SEARCH_FILTER_ALL:
+ cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size - cur_clause,
" %s (UPPER(subject) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\' "
- " OR (((UPPER(full_address_from) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
+ " OR (((UPPER(full_address_from) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
" OR (UPPER(full_address_to) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
" OR (UPPER(full_address_cc) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
" OR (UPPER(full_address_bcc) LIKE UPPER(\'%%%%%s%%%%\') ESCAPE '\\') "
" ) "
" )"
")", conditional_clause_count++ ? "AND" : "WHERE", search_value, search_value, search_value, search_value, search_value);
- break;
+ break;
}
}
/* EM_DEBUG_LOG("where clause [%s]", conditional_clause_string); */
static char sorting_str[][50] = {
- " ORDER BY date_time DESC", /* case EMAIL_SORT_DATETIME_HIGH: */
- " ORDER BY date_time ASC", /* case EMAIL_SORT_DATETIME_LOW: */
- " ORDER BY full_address_from DESC, date_time DESC", /* case EMAIL_SORT_SENDER_HIGH: */
- " ORDER BY full_address_from ASC, date_time DESC", /* case EMAIL_SORT_SENDER_LOW: */
- " ORDER BY full_address_to DESC, date_time DESC", /* case EMAIL_SORT_RCPT_HIGH: */
- " ORDER BY full_address_to ASC, date_time DESC", /* case EMAIL_SORT_RCPT_LOW: */
- " ORDER BY subject DESC, date_time DESC", /* case EMAIL_SORT_SUBJECT_HIGH: */
- " ORDER BY subject ASC, date_time DESC", /* case EMAIL_SORT_SUBJECT_LOW: */
- " ORDER BY priority DESC, date_time DESC", /* case EMAIL_SORT_PRIORITY_HIGH: */
- " ORDER BY priority ASC, date_time DESC", /* case EMAIL_SORT_PRIORITY_LOW: */
- " ORDER BY attachment_count DESC, date_time DESC", /* case EMAIL_SORT_ATTACHMENT_HIGH: */
- " ORDER BY attachment_count ASC, date_time DESC", /* case EMAIL_SORT_ATTACHMENT_LOW: */
- " ORDER BY lock_status DESC, date_time DESC", /* case EMAIL_SORT_FAVORITE_HIGH: */
- " ORDER BY lock_status ASC, date_time DESC", /* case EMAIL_SORT_FAVORITE_LOW: */
- " ORDER BY mailbox_id DESC, date_time DESC", /* case EMAIL_SORT_MAILBOX_ID_HIGH: */
- " ORDER BY mailbox_id ASC, date_time DESC", /* case EMAIL_SORT_MAILBOX_ID_LOW: */
- " ORDER BY flags_flagged_field DESC, date_time DESC", /* case EMAIL_SORT_FLAGGED_FLAG_HIGH: */
- " ORDER BY flags_flagged_field ASC, date_time DESC", /* case EMAIL_SORT_FLAGGED_FLAG_LOW: */
- " ORDER BY flags_seen_field DESC, date_time DESC", /* case EMAIL_SORT_SEEN_FLAG_HIGH: */
- " ORDER BY flags_seen_field ASC, date_time DESC" /* case EMAIL_SORT_SEEN_FLAG_LOW: */
- };
+ " ORDER BY date_time DESC", /* case EMAIL_SORT_DATETIME_HIGH: */
+ " ORDER BY date_time ASC", /* case EMAIL_SORT_DATETIME_LOW: */
+ " ORDER BY full_address_from DESC, date_time DESC", /* case EMAIL_SORT_SENDER_HIGH: */
+ " ORDER BY full_address_from ASC, date_time DESC", /* case EMAIL_SORT_SENDER_LOW: */
+ " ORDER BY full_address_to DESC, date_time DESC", /* case EMAIL_SORT_RCPT_HIGH: */
+ " ORDER BY full_address_to ASC, date_time DESC", /* case EMAIL_SORT_RCPT_LOW: */
+ " ORDER BY subject DESC, date_time DESC", /* case EMAIL_SORT_SUBJECT_HIGH: */
+ " ORDER BY subject ASC, date_time DESC", /* case EMAIL_SORT_SUBJECT_LOW: */
+ " ORDER BY priority DESC, date_time DESC", /* case EMAIL_SORT_PRIORITY_HIGH: */
+ " ORDER BY priority ASC, date_time DESC", /* case EMAIL_SORT_PRIORITY_LOW: */
+ " ORDER BY attachment_count DESC, date_time DESC", /* case EMAIL_SORT_ATTACHMENT_HIGH: */
+ " ORDER BY attachment_count ASC, date_time DESC", /* case EMAIL_SORT_ATTACHMENT_LOW: */
+ " ORDER BY lock_status DESC, date_time DESC", /* case EMAIL_SORT_FAVORITE_HIGH: */
+ " ORDER BY lock_status ASC, date_time DESC", /* case EMAIL_SORT_FAVORITE_LOW: */
+ " ORDER BY mailbox_id DESC, date_time DESC", /* case EMAIL_SORT_MAILBOX_ID_HIGH: */
+ " ORDER BY mailbox_id ASC, date_time DESC", /* case EMAIL_SORT_MAILBOX_ID_LOW: */
+ " ORDER BY flags_flagged_field DESC, date_time DESC", /* case EMAIL_SORT_FLAGGED_FLAG_HIGH: */
+ " ORDER BY flags_flagged_field ASC, date_time DESC", /* case EMAIL_SORT_FLAGGED_FLAG_LOW: */
+ " ORDER BY flags_seen_field DESC, date_time DESC", /* case EMAIL_SORT_SEEN_FLAG_HIGH: */
+ " ORDER BY flags_seen_field ASC, date_time DESC" /* case EMAIL_SORT_SEEN_FLAG_LOW: */
+ };
if (sorting < EMAIL_SORT_END)
cur_clause += SNPRINTF_OFFSET(conditional_clause_string, cur_clause, buffer_size, " %s", sorting_str[sorting]);
/**
- * emstorage_get_mail_list - Get the mail list information.
- *
- *
- */
+ * emstorage_get_mail_list - Get the mail list information.
+ *
+ *
+ */
INTERNAL_FUNC int emstorage_get_mail_list(char *multi_user_name, int account_id, int mailbox_id, email_email_address_list_t* addr_list, int thread_id, int start_index, int limit_count, int search_type, const char *search_value, email_sort_type_t sorting, int transaction, email_mail_list_item_t** mail_list, int *result_count, int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
/**
- * emstorage_get_mails - Get the Mail list information based on mailbox_name name
- *
- *
- */
+ * emstorage_get_mails - Get the Mail list information based on mailbox_name name
+ *
+ *
+ */
INTERNAL_FUNC int emstorage_get_mails(char *multi_user_name, int account_id, int mailbox_id, email_email_address_list_t* addr_list, int thread_id, int start_index, int limit_count, email_sort_type_t sorting, int transaction, emstorage_mail_tbl_t** mail_list, int *result_count, int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
/**
- * emstorage_get_searched_mail_list - Get the mail list information after filtering
- *
- *
- */
+ * emstorage_get_searched_mail_list - Get the mail list information after filtering
+ *
+ *
+ */
INTERNAL_FUNC int emstorage_get_searched_mail_list(char *multi_user_name, int account_id, int mailbox_id, int thread_id, int search_type, const char *search_value, int start_index, int limit_count, email_sort_type_t sorting, int transaction, email_mail_list_item_t **mail_list, int *result_count, int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
return EMAIL_ERROR_INVALID_PARAM;
}
- EM_DEBUG_LOG("MULTI_USER_NAME : [%s]", multi_user_name);
+ EM_DEBUG_LOG("MULTI_USER_NAME : [%s]", multi_user_name);
if (EM_SAFE_STRLEN(multi_user_name) > 0) {
snprintf(recv_password_file_name, MAX_PW_FILE_NAME_LENGTH, ".email_account_%d_recv_%s", account_id, multi_user_name);
if (pulloption & EMAIL_ACC_GET_OPT_DEFAULT) {
SNPRINTF(sql_query_string + sql_len, sizeof(sql_query_string) - sql_len,
- "incoming_server_type,"
- "incoming_server_address,"
- "user_email_address,"
- "incoming_server_user_name,"
- "retrieval_mode,"
- "incoming_server_port_number,"
- "incoming_server_secure_connection,"
- "incoming_server_authentication_method,"
- "outgoing_server_type,"
- "outgoing_server_address,"
- "outgoing_server_port_number,"
- "outgoing_server_need_authentication,"
- "outgoing_server_secure_connection,"
- "outgoing_server_user_name,"
- "user_display_name,"
- "reply_to_address,"
- "return_address,"
- "account_id,"
- "keep_mails_on_pop_server_after_download,"
- "auto_download_size,"
- "peak_interval,"
- "peak_days,"
- "peak_start_time,"
- "peak_end_time,"
- "outgoing_server_use_same_authenticator,"
- "auto_resend_times,"
- "outgoing_server_size_limit,"
- "wifi_auto_download,"
- "pop_before_smtp,"
- "incoming_server_requires_apop,"
- "logo_icon_path,"
- "user_data,"
- "user_data_length,"
- "color_label,"
- "check_interval,"
- "sync_status,");
+ "incoming_server_type,"
+ "incoming_server_address,"
+ "user_email_address,"
+ "incoming_server_user_name,"
+ "retrieval_mode,"
+ "incoming_server_port_number,"
+ "incoming_server_secure_connection,"
+ "incoming_server_authentication_method,"
+ "outgoing_server_type,"
+ "outgoing_server_address,"
+ "outgoing_server_port_number,"
+ "outgoing_server_need_authentication,"
+ "outgoing_server_secure_connection,"
+ "outgoing_server_user_name,"
+ "user_display_name,"
+ "reply_to_address,"
+ "return_address,"
+ "account_id,"
+ "keep_mails_on_pop_server_after_download,"
+ "auto_download_size,"
+ "peak_interval,"
+ "peak_days,"
+ "peak_start_time,"
+ "peak_end_time,"
+ "outgoing_server_use_same_authenticator,"
+ "auto_resend_times,"
+ "outgoing_server_size_limit,"
+ "wifi_auto_download,"
+ "pop_before_smtp,"
+ "incoming_server_requires_apop,"
+ "logo_icon_path,"
+ "user_data,"
+ "user_data_length,"
+ "color_label,"
+ "check_interval,"
+ "sync_status,");
sql_len = EM_SAFE_STRLEN(sql_query_string);
}
/* get from secure storage, not from db */
if (pulloption & EMAIL_ACC_GET_OPT_OPTIONS) {
SNPRINTF(sql_query_string + sql_len, sizeof(sql_query_string) - sql_len,
- "priority,"
- "keep_local_copy,"
- "req_delivery_receipt,"
- "req_read_receipt,"
- "download_limit,"
- "block_address,"
- "block_subject,"
- "display_name_from,"
- "reply_with_body,"
- "forward_with_files,"
- "add_myname_card,"
- "add_signature,"
- "signature,"
- "add_my_address_to_bcc,"
- "notification_status,"
- "vibrate_status,"
- "display_content_status,"
- "default_ringtone_status,"
- "alert_ringtone_path,"
- "account_svc_id,"
- "sync_disabled,"
- "default_mail_slot_size,"
- "roaming_option,"
- "smime_type,"
- "certificate_path,"
- "cipher_type,"
- "digest_type,");
+ "priority,"
+ "keep_local_copy,"
+ "req_delivery_receipt,"
+ "req_read_receipt,"
+ "download_limit,"
+ "block_address,"
+ "block_subject,"
+ "display_name_from,"
+ "reply_with_body,"
+ "forward_with_files,"
+ "add_myname_card,"
+ "add_signature,"
+ "signature,"
+ "add_my_address_to_bcc,"
+ "notification_status,"
+ "vibrate_status,"
+ "display_content_status,"
+ "default_ringtone_status,"
+ "alert_ringtone_path,"
+ "account_svc_id,"
+ "sync_disabled,"
+ "default_mail_slot_size,"
+ "roaming_option,"
+ "smime_type,"
+ "certificate_path,"
+ "cipher_type,"
+ "digest_type,");
sql_len = EM_SAFE_STRLEN(sql_query_string);
}
/* execute a sql and count rows */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION("no matched account found...");
/* get password file name */
if ((err = _get_password_file_name(multi_user_name,
- input_account_id,
- recv_password_file_name,
- send_password_file_name)) != EMAIL_ERROR_NONE) {
+ input_account_id,
+ recv_password_file_name,
+ send_password_file_name)) != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("_get_password_file_name failed.");
goto FINISH_OFF;
}
EM_DEBUG_LOG_SEC("recv_password_file_name [%s] input_incoming_server_password [%s]",
- recv_password_file_name, input_incoming_server_password);
+ recv_password_file_name, input_incoming_server_password);
EM_DEBUG_LOG_SEC("send_password_file_name [%s] input_outgoing_server_password [%s]",
- send_password_file_name, input_outgoing_server_password);
+ send_password_file_name, input_outgoing_server_password);
if (input_incoming_server_password) {
err = emcore_remove_password_in_key_manager(recv_password_file_name);
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_account_tbl SET"
- " account_name = ?"
- ", logo_icon_path = ?"
- ", user_data = ?"
- ", user_data_length = ?"
- ", account_svc_id = ?"
- ", sync_status = ?"
- ", sync_disabled = ?"
- ", default_mail_slot_size = ?"
- ", roaming_option = ?"
- ", color_label = ?"
- ", user_display_name = ?"
- ", user_email_address = ?"
- ", reply_to_address = ?"
- ", return_address = ?"
- ", incoming_server_type = ?"
- ", incoming_server_address = ?"
- ", incoming_server_port_number = ?"
- ", incoming_server_user_name = ?"
- ", incoming_server_secure_connection = ?"
- ", incoming_server_authentication_method = ?"
- ", retrieval_mode = ?"
- ", keep_mails_on_pop_server_after_download = ?"
- ", check_interval = ?"
- ", auto_download_size = ?"
- ", peak_interval = ?"
- ", peak_days = ?"
- ", peak_start_time = ?"
- ", peak_end_time = ?"
- ", outgoing_server_type = ?"
- ", outgoing_server_address = ?"
- ", outgoing_server_port_number = ?"
- ", outgoing_server_user_name = ?"
- ", outgoing_server_secure_connection = ?"
- ", outgoing_server_need_authentication = ?"
- ", outgoing_server_use_same_authenticator = ?"
- ", priority = ?"
- ", keep_local_copy = ?"
- ", req_delivery_receipt = ?"
- ", req_read_receipt = ?"
- ", download_limit = ?"
- ", block_address = ?"
- ", block_subject = ?"
- ", display_name_from = ?"
- ", reply_with_body = ?"
- ", forward_with_files = ?"
- ", add_myname_card = ?"
- ", add_signature = ?"
- ", signature = ?"
- ", add_my_address_to_bcc = ?"
- ", notification_status = ?"
- ", vibrate_status = ?"
- ", display_content_status = ?"
- ", default_ringtone_status = ?"
- ", alert_ringtone_path = ?"
- ", auto_resend_times = ?"
- ", outgoing_server_size_limit = ?"
- ", wifi_auto_download = ?"
- ", pop_before_smtp = ?"
- ", incoming_server_requires_apop = ?"
- ", smime_type = ?"
- ", certificate_path = ?"
- ", cipher_type = ?"
- ", digest_type = ?"
- ", user_name = ?"
- " WHERE account_id = ?");
+ "UPDATE mail_account_tbl SET"
+ " account_name = ?"
+ ", logo_icon_path = ?"
+ ", user_data = ?"
+ ", user_data_length = ?"
+ ", account_svc_id = ?"
+ ", sync_status = ?"
+ ", sync_disabled = ?"
+ ", default_mail_slot_size = ?"
+ ", roaming_option = ?"
+ ", color_label = ?"
+ ", user_display_name = ?"
+ ", user_email_address = ?"
+ ", reply_to_address = ?"
+ ", return_address = ?"
+ ", incoming_server_type = ?"
+ ", incoming_server_address = ?"
+ ", incoming_server_port_number = ?"
+ ", incoming_server_user_name = ?"
+ ", incoming_server_secure_connection = ?"
+ ", incoming_server_authentication_method = ?"
+ ", retrieval_mode = ?"
+ ", keep_mails_on_pop_server_after_download = ?"
+ ", check_interval = ?"
+ ", auto_download_size = ?"
+ ", peak_interval = ?"
+ ", peak_days = ?"
+ ", peak_start_time = ?"
+ ", peak_end_time = ?"
+ ", outgoing_server_type = ?"
+ ", outgoing_server_address = ?"
+ ", outgoing_server_port_number = ?"
+ ", outgoing_server_user_name = ?"
+ ", outgoing_server_secure_connection = ?"
+ ", outgoing_server_need_authentication = ?"
+ ", outgoing_server_use_same_authenticator = ?"
+ ", priority = ?"
+ ", keep_local_copy = ?"
+ ", req_delivery_receipt = ?"
+ ", req_read_receipt = ?"
+ ", download_limit = ?"
+ ", block_address = ?"
+ ", block_subject = ?"
+ ", display_name_from = ?"
+ ", reply_with_body = ?"
+ ", forward_with_files = ?"
+ ", add_myname_card = ?"
+ ", add_signature = ?"
+ ", signature = ?"
+ ", add_my_address_to_bcc = ?"
+ ", notification_status = ?"
+ ", vibrate_status = ?"
+ ", display_content_status = ?"
+ ", default_ringtone_status = ?"
+ ", alert_ringtone_path = ?"
+ ", auto_resend_times = ?"
+ ", outgoing_server_size_limit = ?"
+ ", wifi_auto_download = ?"
+ ", pop_before_smtp = ?"
+ ", incoming_server_requires_apop = ?"
+ ", smime_type = ?"
+ ", certificate_path = ?"
+ ", cipher_type = ?"
+ ", digest_type = ?"
+ ", user_name = ?"
+ " WHERE account_id = ?");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("After sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_LOG_SEC("SQL[%s]", sql_query_string);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_prepare fail:(%d) %s", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_prepare fail:(%d) %s", rc, sqlite3_errmsg(local_db_handle)));
int i = 0;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((SQLITE_FULL == rc), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
/* validate account existence */
rc = sqlite3_changes(local_db_handle);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
if (!count) {
EM_DEBUG_EXCEPTION("no matched account found...");
return false;
}
switch (set_operator) {
- case SET_TYPE_UNION:
- set_value = result_sync_status | set_value;
- break;
- case SET_TYPE_MINUS:
- set_value = result_sync_status & (~set_value);
- break;
- default:
- EM_DEBUG_EXCEPTION("EMAIL_ERROR_NOT_SUPPORTED [%d]", set_operator);
- error = EMAIL_ERROR_NOT_SUPPORTED;
- break;
+ case SET_TYPE_UNION:
+ set_value = result_sync_status | set_value;
+ break;
+ case SET_TYPE_MINUS:
+ set_value = result_sync_status & (~set_value);
+ break;
+ default:
+ EM_DEBUG_EXCEPTION("EMAIL_ERROR_NOT_SUPPORTED [%d]", set_operator);
+ error = EMAIL_ERROR_NOT_SUPPORTED;
+ break;
}
EM_DEBUG_LOG("set_value [%d]", set_value);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, &row_count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1]) rc = 1;
else {
for (i = 1; i <= row_count; i++) {
- if (i != atoi(result[i])) {
+ if (i != atoi(result[i]))
break;
- }
}
rc = i;
EM_DEBUG_LOG(" >>>> ACCOUNT_ID [ %d ] ", account_tbl->account_id);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_account_tbl VALUES "
- "( "
- " ? " /* account_id */
- " , ? " /* account_name */
- " , ? " /* logo_icon_path */
- " , ? " /* user_data */
- " , ? " /* user_data_length */
- " , ? " /* account_svc_id */
- " , ? " /* sync_status */
- " , ? " /* sync_disabled */
- " , ? " /* default_mail_slot_size */
- " , ? " /* roaming_option */
- " , ? " /* color_label */
- " , ? " /* user_display_name */
- " , ? " /* user_email_address */
- " , ? " /* reply_to_address */
- " , ? " /* return_address */
- " , ? " /* incoming_server_type */
- " , ? " /* incoming_server_address */
- " , ? " /* incoming_server_port_number */
- " , ? " /* incoming_server_user_name */
- " , ? " /* incoming_server_password */
- " , ? " /* incoming_server_secure_connection */
- " , ? " /* incoming_server_authentication_method */
- " , ? " /* retrieval_mode */
- " , ? " /* keep_mails_on_pop_server_after_download */
- " , ? " /* check_interval */
- " , ? " /* auto_download_size */
- " , ? " /* peak_interval */
- " , ? " /* peak_days */
- " , ? " /* peak_start_time */
- " , ? " /* peak_end_time */
- " , ? " /* outgoing_server_type */
- " , ? " /* outgoing_server_address */
- " , ? " /* outgoing_server_port_number */
- " , ? " /* outgoing_server_user_name */
- " , ? " /* outgoing_server_password */
- " , ? " /* outgoing_server_secure_connection */
- " , ? " /* outgoing_server_need_authentication */
- " , ? " /* outgoing_server_use_same_authenticator */
- " , ? " /* priority */
- " , ? " /* keep_local_copy */
- " , ? " /* req_delivery_receipt */
- " , ? " /* req_read_receipt */
- " , ? " /* download_limit */
- " , ? " /* block_address */
- " , ? " /* block_subject */
- " , ? " /* display_name_from */
- " , ? " /* reply_with_body */
- " , ? " /* forward_with_files */
- " , ? " /* add_myname_card */
- " , ? " /* add_signature */
- " , ? " /* signature */
- " , ? " /* add_my_address_to_bcc */
- " , ? " /* auto_resend_times */
- " , ? " /* outgoing_server_size_limit */
- " , ? " /* wifi_auto_download */
- " , ? " /* pop_before_smtp */
- " , ? " /* incoming_server_requires_apop */
- " , ? " /* smime_type */
- " , ? " /* certificate_path */
- " , ? " /* cipher_type */
- " , ? " /* digest_type */
- " , ? " /* notification_status */
- " , ? " /* vibrate_status */
- " , ? " /* display_content_status */
- " , ? " /* default_ringtone_status */
- " , ? " /* alert_ringtone_path */
- " , ? " /* user_name */
- ") ");
+ "INSERT INTO mail_account_tbl VALUES "
+ "( "
+ " ? " /* account_id */
+ " , ? " /* account_name */
+ " , ? " /* logo_icon_path */
+ " , ? " /* user_data */
+ " , ? " /* user_data_length */
+ " , ? " /* account_svc_id */
+ " , ? " /* sync_status */
+ " , ? " /* sync_disabled */
+ " , ? " /* default_mail_slot_size */
+ " , ? " /* roaming_option */
+ " , ? " /* color_label */
+ " , ? " /* user_display_name */
+ " , ? " /* user_email_address */
+ " , ? " /* reply_to_address */
+ " , ? " /* return_address */
+ " , ? " /* incoming_server_type */
+ " , ? " /* incoming_server_address */
+ " , ? " /* incoming_server_port_number */
+ " , ? " /* incoming_server_user_name */
+ " , ? " /* incoming_server_password */
+ " , ? " /* incoming_server_secure_connection */
+ " , ? " /* incoming_server_authentication_method */
+ " , ? " /* retrieval_mode */
+ " , ? " /* keep_mails_on_pop_server_after_download */
+ " , ? " /* check_interval */
+ " , ? " /* auto_download_size */
+ " , ? " /* peak_interval */
+ " , ? " /* peak_days */
+ " , ? " /* peak_start_time */
+ " , ? " /* peak_end_time */
+ " , ? " /* outgoing_server_type */
+ " , ? " /* outgoing_server_address */
+ " , ? " /* outgoing_server_port_number */
+ " , ? " /* outgoing_server_user_name */
+ " , ? " /* outgoing_server_password */
+ " , ? " /* outgoing_server_secure_connection */
+ " , ? " /* outgoing_server_need_authentication */
+ " , ? " /* outgoing_server_use_same_authenticator */
+ " , ? " /* priority */
+ " , ? " /* keep_local_copy */
+ " , ? " /* req_delivery_receipt */
+ " , ? " /* req_read_receipt */
+ " , ? " /* download_limit */
+ " , ? " /* block_address */
+ " , ? " /* block_subject */
+ " , ? " /* display_name_from */
+ " , ? " /* reply_with_body */
+ " , ? " /* forward_with_files */
+ " , ? " /* add_myname_card */
+ " , ? " /* add_signature */
+ " , ? " /* signature */
+ " , ? " /* add_my_address_to_bcc */
+ " , ? " /* auto_resend_times */
+ " , ? " /* outgoing_server_size_limit */
+ " , ? " /* wifi_auto_download */
+ " , ? " /* pop_before_smtp */
+ " , ? " /* incoming_server_requires_apop */
+ " , ? " /* smime_type */
+ " , ? " /* certificate_path */
+ " , ? " /* cipher_type */
+ " , ? " /* digest_type */
+ " , ? " /* notification_status */
+ " , ? " /* vibrate_status */
+ " , ? " /* display_content_status */
+ " , ? " /* default_ringtone_status */
+ " , ? " /* alert_ringtone_path */
+ " , ? " /* user_name */
+ ") ");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
i = 0;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
/* save passwords to the secure storage */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DELETE FROM mail_account_tbl WHERE account_id = %d", account_id);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
/* validate account existence */
goto FINISH_OFF;
}
- /* delete from secure storage */
+ /* delete from secure storage */
error = emcore_remove_password_in_key_manager(recv_password_file_name);
if (error != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("emcore_remove_password_in_key_manager failed : [%d]", error);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG("conditional_clause_string[%s]", conditional_clause_string);
switch (sort_type) {
- case EMAIL_MAILBOX_SORT_BY_NAME_ASC:
- SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_name ASC");
- break;
+ case EMAIL_MAILBOX_SORT_BY_NAME_ASC:
+ SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_name ASC");
+ break;
- case EMAIL_MAILBOX_SORT_BY_NAME_DSC:
- SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_name DESC");
- break;
+ case EMAIL_MAILBOX_SORT_BY_NAME_DSC:
+ SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_name DESC");
+ break;
- case EMAIL_MAILBOX_SORT_BY_TYPE_ASC:
- SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_type ASC");
- break;
+ case EMAIL_MAILBOX_SORT_BY_TYPE_ASC:
+ SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_type ASC");
+ break;
- case EMAIL_MAILBOX_SORT_BY_TYPE_DSC:
- SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_type DEC");
- break;
+ case EMAIL_MAILBOX_SORT_BY_TYPE_DSC:
+ SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY mailbox_type DEC");
+ break;
}
EM_DEBUG_LOG("ordering_clause_string[%s]", ordering_clause_string);
}
SNPRINTF(ordering_clause_string, QUERY_SIZE, " ORDER BY CASE WHEN MBT.mailbox_name"
- " GLOB \'[][~`!@#$%%^&*()_-+=|\\{}:;<>,.?/ ]*\'"
- " THEN 2 ELSE 1 END ASC,"
- " MBT.mailbox_name COLLATE CONVERTUTF8 ASC ");
+ " GLOB \'[][~`!@#$%%^&*()_-+=|\\{}:;<>,.?/ ]*\'"
+ " THEN 2 ELSE 1 END ASC,"
+ " MBT.mailbox_name COLLATE CONVERTUTF8 ASC ");
EM_DEBUG_LOG("conditional_clause_string[%s]", conditional_clause_string);
EM_DEBUG_LOG("ordering_clause_string[%s]", ordering_clause_string);
time(¤t_time);
local_db_handle = emstorage_get_db_connection(multi_user_name);
- EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, input_transaction, error);
+ EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, input_transaction, error);
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " last_sync_time = %d"
- " WHERE mailbox_id = %d"
- , (int)current_time
- , input_mailbox_id);
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_box_tbl SET"
+ " last_sync_time = %d"
+ " WHERE mailbox_id = %d"
+ , (int)current_time
+ , input_mailbox_id);
EM_DEBUG_LOG_SEC("sql_query_string [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
FINISH_OFF:
EM_DEBUG_LOG("conditional_clause_string = [%s]", conditional_clause_string);
if ((ret = emstorage_query_mailbox_tbl(multi_user_name,
- conditional_clause_string,
- "", true, false, output_mailbox, &result_count)) != EMAIL_ERROR_NONE) {
+ conditional_clause_string,
+ "", true, false, output_mailbox, &result_count)) != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("emstorage_query_mailbox_tbl failed [%d]", ret);
goto FINISH_OFF;
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION("no matched mailbox_name found...");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION("no matched mailbox_name found...");
char *replaced_mailbox_name = NULL;
if (mailbox_name) {
- if (strstr(mailbox_name, "'")) {
+ if (strstr(mailbox_name, "'"))
replaced_mailbox_name = em_replace_all_string(mailbox_name, "'", "''");
- } else {
+ else
replaced_mailbox_name = strdup(mailbox_name);
- }
}
sqlite3 *local_db_handle = emstorage_get_db_connection(multi_user_name);
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " modifiable_yn = %d"
- " WHERE account_id = %d"
- " AND local_yn = %d"
- " AND mailbox_name = '%s'"
- , modifiable_yn
- , account_id
- , local_yn
- , replaced_mailbox_name);
+ "UPDATE mail_box_tbl SET"
+ " modifiable_yn = %d"
+ " WHERE account_id = %d"
+ " AND local_yn = %d"
+ " AND mailbox_name = '%s'"
+ , modifiable_yn
+ , account_id
+ , local_yn
+ , replaced_mailbox_name);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
FINISH_OFF:
EMSTORAGE_FINISH_WRITE_TRANSACTION(multi_user_name, transaction, ret, error);
- EM_SAFE_FREE(replaced_mailbox_name);
+ EM_SAFE_FREE(replaced_mailbox_name);
if (err_code != NULL)
*err_code = error;
}
INTERNAL_FUNC int emstorage_update_mailbox_total_count(char *multi_user_name,
- int account_id,
- int input_mailbox_id,
- int total_count_on_server,
- int transaction,
- int *err_code)
+ int account_id,
+ int input_mailbox_id,
+ int total_count_on_server,
+ int transaction,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN("account_id[%d], input_mailbox_id[%d], total_count_on_server[%d], "
- "transaction[%d], err_code[%p]",
- account_id, input_mailbox_id, total_count_on_server, transaction, err_code);
+ "transaction[%d], err_code[%p]",
+ account_id, input_mailbox_id, total_count_on_server, transaction, err_code);
int ret = false;
int error = EMAIL_ERROR_NONE;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " total_mail_count_on_server = %d"
- " WHERE account_id = %d"
- " AND mailbox_id = %d"
- , total_count_on_server
- , account_id
- , input_mailbox_id);
+ "UPDATE mail_box_tbl SET"
+ " total_mail_count_on_server = %d"
+ " WHERE account_id = %d"
+ " AND mailbox_id = %d"
+ , total_count_on_server
+ , account_id
+ , input_mailbox_id);
EM_DEBUG_LOG_SEC("query[%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
if (local_yn != -1) {
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " mailbox_id = ?"
- ", mailbox_name = ?"
- ", mailbox_type = ?"
- ", alias = ?"
- ", deleted_flag = ?"
- ", modifiable_yn= ?"
- ", mail_slot_size= ?"
- ", total_mail_count_on_server = ?"
- " WHERE account_id = %d"
- " AND local_yn = %d"
- " AND mailbox_id = '%d'"
- , account_id
- , local_yn
- , input_mailbox_id);
+ "UPDATE mail_box_tbl SET"
+ " mailbox_id = ?"
+ ", mailbox_name = ?"
+ ", mailbox_type = ?"
+ ", alias = ?"
+ ", deleted_flag = ?"
+ ", modifiable_yn= ?"
+ ", mail_slot_size= ?"
+ ", total_mail_count_on_server = ?"
+ " WHERE account_id = %d"
+ " AND local_yn = %d"
+ " AND mailbox_id = '%d'"
+ , account_id
+ , local_yn
+ , input_mailbox_id);
} else {
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " mailbox_id = ?"
- ", mailbox_name = ?"
- ", mailbox_type = ?"
- ", alias = ?"
- ", deleted_flag = ?"
- ", modifiable_yn= ?"
- ", mail_slot_size= ?"
- ", total_mail_count_on_server = ?"
- " WHERE account_id = %d"
- " AND mailbox_id = '%d'"
- , account_id
- , input_mailbox_id);
+ "UPDATE mail_box_tbl SET"
+ " mailbox_id = ?"
+ ", mailbox_name = ?"
+ ", mailbox_type = ?"
+ ", alias = ?"
+ ", deleted_flag = ?"
+ ", modifiable_yn= ?"
+ ", mail_slot_size= ?"
+ ", total_mail_count_on_server = ?"
+ " WHERE account_id = %d"
+ " AND mailbox_id = '%d'"
+ , account_id
+ , input_mailbox_id);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, i++, result_mailbox->mailbox_id);
_bind_stmt_field_data_string(hStmt, i++, (char *)result_mailbox->mailbox_name ? result_mailbox->mailbox_name : "", 0, MAILBOX_NAME_LEN_IN_MAIL_READ_MAIL_UID_TBL);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
/* Update mail_box_tbl */
if (local_yn != -1) {
SNPRINTF(sql_query_string, sizeof(sql_query_string)-1,
- "UPDATE mail_box_tbl SET"
- " mailbox_type = ?"
- " WHERE account_id = %d"
- " AND local_yn = %d"
- " AND mailbox_id = '%d'"
- , account_id
- , local_yn
- , input_mailbox_id);
+ "UPDATE mail_box_tbl SET"
+ " mailbox_type = ?"
+ " WHERE account_id = %d"
+ " AND local_yn = %d"
+ " AND mailbox_id = '%d'"
+ , account_id
+ , local_yn
+ , input_mailbox_id);
} else {
SNPRINTF(sql_query_string, sizeof(sql_query_string)-1,
- "UPDATE mail_box_tbl SET"
- " mailbox_type = ?"
- " WHERE account_id = %d"
- " AND mailbox_id = '%d'"
- , account_id
- , input_mailbox_id);
+ "UPDATE mail_box_tbl SET"
+ " mailbox_type = ?"
+ " WHERE account_id = %d"
+ " AND mailbox_id = '%d'"
+ , account_id
+ , input_mailbox_id);
}
EM_DEBUG_LOG_SEC("SQL(%s)", sql_query_string);
/* Update mail_box_tbl */
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " local_yn = ?"
- " WHERE mailbox_id = %d"
- , input_mailbox_id);
+ "UPDATE mail_box_tbl SET"
+ " local_yn = ?"
+ " WHERE mailbox_id = %d"
+ , input_mailbox_id);
EM_DEBUG_LOG_SEC("SQL(%s)", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, i++, input_is_local_mailbox);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
-/*
- if (hStmt != NULL) {
- rc = sqlite3_finalize(hStmt);
- if (rc != SQLITE_OK) {
- EM_DEBUG_EXCEPTION("sqlite3_finalize error [%d]", rc);
- error = EMAIL_ERROR_DB_FAILURE;
- }
- hStmt = NULL;
- }
-*/
+ ("sqlite3_step fail:%d", rc));
+ /*
+ if (hStmt != NULL) {
+ rc = sqlite3_finalize(hStmt);
+ if (rc != SQLITE_OK) {
+ EM_DEBUG_EXCEPTION("sqlite3_finalize error [%d]", rc);
+ error = EMAIL_ERROR_DB_FAILURE;
+ }
+ hStmt = NULL;
+ }
+ */
ret = true;
FINISH_OFF:
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, err);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
if (sqlite3_changes(local_db_handle) == 0)
if (err == EMAIL_ERROR_NONE && parameter_string) {
if (!emcore_notify_storage_event(NOTI_MAILBOX_FIELD_UPDATE, input_account_id, 0, parameter_string, input_value))
EM_DEBUG_EXCEPTION_SEC("emcore_notify_storage_eventfailed : NOTI_MAILBOX_FIELD_UPDATE [%s,%d]",
- input_field_name, input_value);
+ input_field_name, input_value);
}
EM_SAFE_FREE(mailbox_id_string_buffer);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
time(¤t_time);
mailbox_tbl->mailbox_id = rc;
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_box_tbl VALUES "
- "(?" /* mailbox_id */
- ", ?" /* account_id */
- ", ?" /* local_yn */
- ", ?" /* mailbox_name */
- ", ?" /* mailbox_type */
- ", ?" /* alias */
- ", ?" /* deleted_flag */
- ", ?" /* modifiable_yn */
- ", ?" /* total_mail_count_on_server */
- ", ?" /* has_archived_mails */
- ", ?" /* mail_slot_size */
- ", ?" /* no_select */
- ", ?" /* last_sync_time */
- ", ?" /* eas_data_length */
- ", ?" /* eas_data */
- ")");
+ "INSERT INTO mail_box_tbl VALUES "
+ "(?" /* mailbox_id */
+ ", ?" /* account_id */
+ ", ?" /* local_yn */
+ ", ?" /* mailbox_name */
+ ", ?" /* mailbox_type */
+ ", ?" /* alias */
+ ", ?" /* deleted_flag */
+ ", ?" /* modifiable_yn */
+ ", ?" /* total_mail_count_on_server */
+ ", ?" /* has_archived_mails */
+ ", ?" /* mail_slot_size */
+ ", ?" /* no_select */
+ ", ?" /* last_sync_time */
+ ", ?" /* eas_data_length */
+ ", ?" /* eas_data */
+ ")");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG_DEV("After sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
int col_index = 0;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%dn", rc));
+ ("sqlite3_step fail:%dn", rc));
ret = true;
if (error == EMAIL_ERROR_NONE) {
if (!emcore_notify_storage_event(NOTI_MAILBOX_ADD, mailbox_tbl->account_id, mailbox_tbl->mailbox_id,
- mailbox_tbl->mailbox_name, mailbox_tbl->mailbox_type))
+ mailbox_tbl->mailbox_name, mailbox_tbl->mailbox_type))
EM_DEBUG_EXCEPTION("emcore_notify_storage_event[ NOTI_MAILBOX_ADD] : Notification Failed");
}
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
EM_DEBUG_LOG_SEC("mailbox sql_query_string [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
error = EMAIL_ERROR_MAILBOX_NOT_FOUND;
ret = true;
}
- ret = true;
+ ret = true;
FINISH_OFF:
if (err_code != NULL)
*err_code = error;
- EM_DEBUG_FUNC_END("ret [%d]", ret);
+ EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
}
char sql_query_string[QUERY_SIZE] = {0, };
char *replaced_mailbox_name = NULL;
- if (strstr(mailbox_name, "'")) {
+ if (strstr(mailbox_name, "'"))
replaced_mailbox_name = em_replace_all_string(mailbox_name, "'", "''");
- } else {
+ else
replaced_mailbox_name = EM_SAFE_STRDUP(mailbox_name);
- }
EM_DEBUG_LOG_SEC("replaced_mailbox_name : [%s]", replaced_mailbox_name);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EMSTORAGE_START_READ_TRANSACTION(transaction);
if (mailbox_name) {
- if (strstr(mailbox_name, "'")) {
+ if (strstr(mailbox_name, "'"))
replaced_mailbox_name = em_replace_all_string(mailbox_name, "'", "''");
- } else {
+ else
replaced_mailbox_name = strdup(mailbox_name);
- }
SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT COUNT(*) FROM mail_read_mail_uid_tbl WHERE account_id = %d AND mailbox_name = '%s' AND server_uid = '%s' ", account_id, replaced_mailbox_name, uid);
} else {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*exist = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG("sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
*mail = (emstorage_mail_tbl_t*)malloc(sizeof(emstorage_mail_tbl_t));
if (*mail == NULL) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
char **result;
/* rc = sqlite3_get_table(local_db_handle, sql_query_string, &result, count, NULL, NULL); */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
sqlite3_free_table(result);
if (*count == 0) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
}
ret = true;
EMSTORAGE_START_READ_TRANSACTION(transaction);
if (mailbox_name) {
- if (strstr(mailbox_name, "'")) {
+ if (strstr(mailbox_name, "'"))
replaced_mailbox_name = em_replace_all_string(mailbox_name, "'", "''");
- } else {
+ else
replaced_mailbox_name = strdup(mailbox_name);
- }
EM_DEBUG_LOG_SEC("replaced_mailbox_name : [%s]", replaced_mailbox_name);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "SELECT IFNULL(MAX(data1), 0) FROM mail_read_mail_uid_tbl "
- "WHERE account_id = %d "
- "AND mailbox_id = '%s' "
- "AND local_uid = %d "
- "AND mailbox_name = '%s' "
- "AND server_uid = '%s'",
- account_id, mailbox_id, local_uid, replaced_mailbox_name, uid);
+ "SELECT IFNULL(MAX(data1), 0) FROM mail_read_mail_uid_tbl "
+ "WHERE account_id = %d "
+ "AND mailbox_id = '%s' "
+ "AND local_uid = %d "
+ "AND mailbox_name = '%s' "
+ "AND server_uid = '%s'",
+ account_id, mailbox_id, local_uid, replaced_mailbox_name, uid);
} else {
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "SELECT IFNULL(MAX(data1), 0) FROM mail_read_mail_uid_tbl "
- "WHERE account_id = %d "
- "AND mailbox_id = '%s' "
- "AND local_uid = %d "
- "AND server_uid = '%s'",
- account_id, mailbox_id, local_uid, uid);
+ "SELECT IFNULL(MAX(data1), 0) FROM mail_read_mail_uid_tbl "
+ "WHERE account_id = %d "
+ "AND mailbox_id = '%s' "
+ "AND local_uid = %d "
+ "AND server_uid = '%s'",
+ account_id, mailbox_id, local_uid, uid);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_LOG("no matched mail found....");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1]) rc = 1;
else rc = atoi(result[1])+1;
sqlite3_free_table(result);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_read_mail_uid_tbl VALUES "
- "(?" /* account_id */
- ", ?" /* mailbox_id */
- ", ?" /* mailbox_name */
- ", ?" /* local_uid */
- ", ?" /* server_uid */
- ", ?" /* rfc822_size */
- ", ?" /* sync_status */
- ", ?" /* flags_seen_field */
- ", ?" /* flags_flagged_field */
- ", ?)");
+ "INSERT INTO mail_read_mail_uid_tbl VALUES "
+ "(?" /* account_id */
+ ", ?" /* mailbox_id */
+ ", ?" /* mailbox_name */
+ ", ?" /* local_uid */
+ ", ?" /* server_uid */
+ ", ?" /* rfc822_size */
+ ", ?" /* sync_status */
+ ", ?" /* flags_seen_field */
+ ", ?" /* flags_flagged_field */
+ ", ?)");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc2);
}
EM_DEBUG_LOG("account_id[%d] mailbox_id[%d] local_uid [%d]"
- "server_uid[%s] rfc822_size[%d] rc[%d]",
- read_mail_uid->account_id, read_mail_uid->mailbox_id, read_mail_uid->local_uid,
- read_mail_uid->server_uid, read_mail_uid->rfc822_size, rc);
+ "server_uid[%s] rfc822_size[%d] rc[%d]",
+ read_mail_uid->account_id, read_mail_uid->mailbox_id, read_mail_uid->local_uid,
+ read_mail_uid->server_uid, read_mail_uid->rfc822_size, rc);
_bind_stmt_field_data_int(hStmt, ACCOUNT_ID_IDX_IN_MAIL_READ_MAIL_UID_TBL, read_mail_uid->account_id);
_bind_stmt_field_data_int(hStmt, LOCAL_MAILBOX_ID_IDX_IN_MAIL_READ_MAIL_UID_TBL, read_mail_uid->mailbox_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail[%d] [%s]", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail[%d] [%s]", rc, sqlite3_errmsg(local_db_handle)));
ret = true;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
sqlite3_free_table(result);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_text_tbl VALUES "
- "(?"
- ", ?"
- ", ?"
- ", ?)");
+ "INSERT INTO mail_text_tbl VALUES "
+ "(?"
+ ", ?"
+ ", ?"
+ ", ?)");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc2);
if (rc2 != SQLITE_OK) {
}
EM_DEBUG_LOG("mail_id[%d] account_id[%d] mailbox_id[%d]", mail_text->mail_id,
- mail_text->account_id, mail_text->mailbox_id);
+ mail_text->account_id, mail_text->mailbox_id);
EM_DEBUG_LOG_DEV("body_text VALUE [%s] ", mail_text->body_text);
_bind_stmt_field_data_int(hStmt, MAIL_ID_IDX_IN_MAIL_TEXT_TBL, mail_text->mail_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail[%d] [%s]", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail[%d] [%s]", rc, sqlite3_errmsg(local_db_handle)));
ret = true;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_read_mail_uid_tbl SET"
- " account_id = ?"
- ", mailbox_id = ?"
- ", mailbox_name = ?"
- ", local_uid = ?"
- ", server_uid = ?"
- ", rfc822_size = ?"
- ", flags_seen_field = ?"
- ", flags_flagged_field = ?"
- " WHERE account_id = ?"
- " AND mailbox_id = ?"
- " AND local_uid = ?"
- " AND mailbox_name= ?"
- " AND server_uid = ?");
+ "UPDATE mail_read_mail_uid_tbl SET"
+ " account_id = ?"
+ ", mailbox_id = ?"
+ ", mailbox_name = ?"
+ ", local_uid = ?"
+ ", server_uid = ?"
+ ", rfc822_size = ?"
+ ", flags_seen_field = ?"
+ ", flags_flagged_field = ?"
+ " WHERE account_id = ?"
+ " AND mailbox_id = ?"
+ " AND local_uid = ?"
+ " AND mailbox_name= ?"
+ " AND server_uid = ?");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
int i = 0;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
}
INTERNAL_FUNC int emstorage_remove_downloaded_mail(char *multi_user_name,
- int account_id,
- int mailbox_id,
- char *mailbox_name,
- char *uid,
- int transaction,
- int *err_code)
+ int account_id,
+ int mailbox_id,
+ char *mailbox_name,
+ char *uid,
+ int transaction,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN_SEC("account_id[%d], mailbox_id[%d], mailbox_name[%s], "
- "uid[%s], transaction[%d], err_code[%p]",
- account_id, mailbox_id, mailbox_name, uid, transaction, err_code);
+ "uid[%s], transaction[%d], err_code[%p]",
+ account_id, mailbox_id, mailbox_name, uid, transaction, err_code);
if (account_id < FIRST_ACCOUNT_ID) {
EM_DEBUG_EXCEPTION_SEC(" account_id[%d], mailbox_name[%s], uid[%s]", account_id, mailbox_name, uid);
int ret = false;
int error = EMAIL_ERROR_NONE;
- char sql_query_string[QUERY_SIZE] = {0, };
+ char sql_query_string[QUERY_SIZE] = {0, };
char *replaced_mailbox_name = NULL;
sqlite3 *local_db_handle = emstorage_get_db_connection(multi_user_name);
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "DELETE FROM mail_read_mail_uid_tbl WHERE account_id = %d ", account_id);
+ "DELETE FROM mail_read_mail_uid_tbl WHERE account_id = %d ", account_id);
if (mailbox_id > 0) {
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string),
- sizeof(sql_query_string) - (1 + EM_SAFE_STRLEN(sql_query_string)),
- "AND mailbox_id = %d ", mailbox_id);
+ sizeof(sql_query_string) - (1 + EM_SAFE_STRLEN(sql_query_string)),
+ "AND mailbox_id = %d ", mailbox_id);
}
if (mailbox_name) { /* NULL means all mailbox_name */
- if (strstr(mailbox_name, "'")) {
+ if (strstr(mailbox_name, "'"))
replaced_mailbox_name = em_replace_all_string(mailbox_name, "'", "''");
- } else {
+ else
replaced_mailbox_name = strdup(mailbox_name);
- }
SNPRINTF(sql_query_string+EM_SAFE_STRLEN(sql_query_string),
- sizeof(sql_query_string) - (1 + EM_SAFE_STRLEN(sql_query_string)),
- "AND mailbox_name = '%s' ", replaced_mailbox_name);
+ sizeof(sql_query_string) - (1 + EM_SAFE_STRLEN(sql_query_string)),
+ "AND mailbox_name = '%s' ", replaced_mailbox_name);
}
if (uid) { /* NULL means all mail */
sqlite3_snprintf(sizeof(sql_query_string) - (1 + EM_SAFE_STRLEN(sql_query_string)),
- sql_query_string + EM_SAFE_STRLEN(sql_query_string), "AND server_uid = '%q' ",
- uid);
+ sql_query_string + EM_SAFE_STRLEN(sql_query_string), "AND server_uid = '%q' ",
+ uid);
}
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
-/* EM_DEBUG_LOG("sqlite3_prepare hStmt = %p", hStmt); */
+ /* EM_DEBUG_LOG("sqlite3_prepare hStmt = %p", hStmt); */
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
char **result;
/* rc = sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL); */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
sqlite3_free_table(result);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
}
ret = true;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION(" no matched rule found...");
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_rule_tbl SET"
- " filter_name = ?"
- ", type = ?"
- ", value = ?"
- ", value2 = ?"
- ", action_type = ?"
- ", target_mailbox_id = ?"
- ", flag1 = ?"
- ", flag2 = ?"
- ", account_id = ?"
- ", rule_id = ?"
- " WHERE rule_id = %d"
- , rule_id);
+ "UPDATE mail_rule_tbl SET"
+ " filter_name = ?"
+ ", type = ?"
+ ", value = ?"
+ ", value2 = ?"
+ ", action_type = ?"
+ ", target_mailbox_id = ?"
+ ", flag1 = ?"
+ ", flag2 = ?"
+ ", account_id = ?"
+ ", rule_id = ?"
+ " WHERE rule_id = %d"
+ , rule_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG(" Before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
int i = 0;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
case EMAIL_FILTER_MOVE:
if (rule->type == EMAIL_PRIORITY_SENDER) {
sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
- "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(value2) = UPPER(\'%q\')",
- rule->action_type, rule->type, rule->value2);
+ "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(value2) = UPPER(\'%q\')",
+ rule->action_type, rule->type, rule->value2);
} else {
- sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
+ sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
"SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(filter_name) = UPPER(\'%q\')", rule->action_type, rule->type, rule->filter_name);
}
break;
case EMAIL_FILTER_BLOCK:
if (rule->type == EMAIL_FILTER_FROM)
sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
- "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(value2) = UPPER(\'%q\')",
- rule->action_type, rule->type, rule->value2);
+ "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(value2) = UPPER(\'%q\')",
+ rule->action_type, rule->type, rule->value2);
else if (rule->type == EMAIL_FILTER_SUBJECT)
sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
- "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(value) = UPPER(\'%q\')",
- rule->action_type, rule->type, rule->value);
+ "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND type = %d AND UPPER(value) = UPPER(\'%q\')",
+ rule->action_type, rule->type, rule->value);
else if (rule->type == (EMAIL_FILTER_SUBJECT | EMAIL_FILTER_FROM))
sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
- "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND (type = %d AND UPPER(value) = UPPER(\'%q\')) OR (type = %d AND UPPER(value2) = UPPER(\'%q\'))",
- rule->action_type, EMAIL_FILTER_SUBJECT, rule->value, EMAIL_FILTER_FROM, rule->value2);
+ "SELECT rule_id FROM mail_rule_tbl WHERE action_type = %d AND (type = %d AND UPPER(value) = UPPER(\'%q\')) OR (type = %d AND UPPER(value2) = UPPER(\'%q\'))",
+ rule->action_type, EMAIL_FILTER_SUBJECT, rule->value, EMAIL_FILTER_FROM, rule->value2);
break;
default:
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION(" no matched rule found...");
int rc, rc_2, ret = false;
int error = EMAIL_ERROR_NONE;
DB_STMT hStmt = NULL;
- char sql_query_string[QUERY_SIZE] = {0, };
+ char sql_query_string[QUERY_SIZE] = {0, };
sqlite3 *local_db_handle = emstorage_get_db_connection(multi_user_name);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1])
rc = 1;
rule->rule_id = rc;
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_rule_tbl VALUES "
- "(?" /* account id */
- ", ?" /* rule_id */
- ", ?" /* filter_name */
- ", ?" /* type */
- ", ?" /* value */
- ", ?" /* value2 */
- ", ?" /* action_type */
- ", ?" /* target_mailbox_id */
- ", ?" /* flag1 */
- ", ?)"); /* flag2 */
+ "INSERT INTO mail_rule_tbl VALUES "
+ "(?" /* account id */
+ ", ?" /* rule_id */
+ ", ?" /* filter_name */
+ ", ?" /* type */
+ ", ?" /* value */
+ ", ?" /* value2 */
+ ", ?" /* action_type */
+ ", ?" /* target_mailbox_id */
+ ", ?" /* flag1 */
+ ", ?)"); /* flag2 */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc_2);
if (rc_2 != SQLITE_OK) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DELETE FROM mail_rule_tbl WHERE rule_id = %d", rule_id);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
emstorage_rule_tbl_t* p = *rule_list;
int i = 0;
- for (; i < count; i++) {
+ for (; i < count; i++)
EM_SAFE_FREE(p[i].value);
- }
EM_SAFE_FREE(p); *rule_list = NULL;
}
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " WHERE mailbox_id = %d", mailbox_id);
#ifdef USE_GET_RECORD_COUNT_API
- char **result;
+ char **result;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF2; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*total = atoi(result[1]);
sqlite3_free_table(result);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF2; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF2; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
_get_stmt_field_data_int(hStmt, total, 0);
#endif /* USE_GET_RECORD_COUNT_API */
}
if (unseen) {
SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT COUNT(*) FROM mail_tbl WHERE flags_seen_field = 0"); /* fSEEN = 0x01 */
- if (account_id != ALL_ACCOUNT)
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " AND account_id = %d", account_id);
+ if (account_id != ALL_ACCOUNT) {
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string),
+ sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " AND account_id = %d", account_id);
+ }
if (mailbox_id) {
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " AND mailbox_id = %d", mailbox_id);
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string),
+ sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " AND mailbox_id = %d", mailbox_id);
} else
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " AND mailbox_type NOT IN (3, 5)");
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string),
+ sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " AND mailbox_type NOT IN (3, 5)");
- char **result;
+ char **result;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
- EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ EM_DEBUG_DB_EXEC(SQLITE_OK != rc,
+ { error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*unseen = atoi(result[1]);
sqlite3_free_table(result);
EMSTORAGE_START_READ_TRANSACTION(transaction);
switch (type) {
- case RETRIEVE_SUMMARY:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ case RETRIEVE_SUMMARY:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"SELECT account_id, "
"mail_id, "
"mailbox_id, "
"thread_id, "
"thread_item_count "
"FROM mail_tbl WHERE mail_id = %d", mail_id);
- break;
+ break;
- case RETRIEVE_FIELDS_FOR_DELETE:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ case RETRIEVE_FIELDS_FOR_DELETE:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"SELECT account_id, "
"mail_id, "
"server_mail_status, "
"server_mailbox_name, "
"server_mail_id "
"FROM mail_tbl WHERE mail_id = %d", mail_id);
- break;
+ break;
- case RETRIEVE_ACCOUNT:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ case RETRIEVE_ACCOUNT:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"SELECT account_id "
"FROM mail_tbl WHERE mail_id = %d", mail_id);
- break;
+ break;
- case RETRIEVE_FLAG:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ case RETRIEVE_FLAG:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"SELECT account_id, "
"flags_seen_field, "
"thread_id, "
"mailbox_id "
"FROM mail_tbl WHERE mail_id = %d", mail_id);
- break;
+ break;
- default:
- EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM : type [%d]", type);
- error = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
+ default:
+ EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM : type [%d]", type);
+ error = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
}
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_LOG("no matched mail found...");
goto FINISH_OFF;
}
switch (type) {
- case RETRIEVE_SUMMARY:
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mailbox_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_plain), 0, col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_html), 0, col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_mime_entity), 0, col_index++);
- _get_stmt_field_data_char(hStmt, &(p_data_tbl->flags_seen_field), col_index++);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->save_status), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->lock_status), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->thread_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->thread_item_count), col_index++);
- break;
+ case RETRIEVE_SUMMARY:
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mailbox_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_plain), 0, col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_html), 0, col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_mime_entity), 0, col_index++);
+ _get_stmt_field_data_char(hStmt, &(p_data_tbl->flags_seen_field), col_index++);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->save_status), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->lock_status), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->thread_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->thread_item_count), col_index++);
+ break;
- case RETRIEVE_FIELDS_FOR_DELETE:
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, col_index++);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, col_index++);
- break;
+ case RETRIEVE_FIELDS_FOR_DELETE:
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, col_index++);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, col_index++);
+ break;
- case RETRIEVE_ACCOUNT:
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
- break;
+ case RETRIEVE_ACCOUNT:
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
+ break;
- case RETRIEVE_FLAG:
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
- _get_stmt_field_data_char(hStmt, &(p_data_tbl->flags_seen_field), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->thread_id), col_index++);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mailbox_id), col_index++);
- break;
+ case RETRIEVE_FLAG:
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), col_index++);
+ _get_stmt_field_data_char(hStmt, &(p_data_tbl->flags_seen_field), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->thread_id), col_index++);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mailbox_id), col_index++);
+ break;
}
ret = true;
EMSTORAGE_START_READ_TRANSACTION(transaction);
switch (type) {
- case RETRIEVE_SUMMARY:
- cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
+ case RETRIEVE_SUMMARY:
+ cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
"SELECT account_id, "
"mail_id, "
"mailbox_id, "
"thread_id, "
"thread_item_count "
"FROM mail_tbl WHERE mail_id in (");
- field_count = 15;
- break;
+ field_count = 15;
+ break;
- case RETRIEVE_FIELDS_FOR_DELETE:
- cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
+ case RETRIEVE_FIELDS_FOR_DELETE:
+ cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
"SELECT account_id, "
"mail_id, "
"server_mail_status, "
"server_mailbox_name, "
"server_mail_id "
"FROM mail_tbl WHERE mail_id in (");
- field_count = 5;
- break;
+ field_count = 5;
+ break;
- case RETRIEVE_ACCOUNT:
- cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
+ case RETRIEVE_ACCOUNT:
+ cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
"SELECT account_id FROM mail_tbl WHERE mail_id in (");
- field_count = 1;
- break;
+ field_count = 1;
+ break;
- case RETRIEVE_FLAG:
- cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
+ case RETRIEVE_FLAG:
+ cur_sql_query_string = SNPRINTF(sql_query_string, query_string_length,
"SELECT account_id, "
"mail_id, "
"mailbox_id, "
"flags_seen_field, "
"thread_id "
"FROM mail_tbl WHERE mail_id in (");
- field_count = 5;
- break;
+ field_count = 5;
+ break;
- default:
- EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM : type [%d]", type);
- error = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
+ default:
+ EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM : type [%d]", type);
+ error = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
}
for (i = 0; i < number_of_mails; i++)
for (i = 0; i < item_count; i++) {
switch (type) {
- case RETRIEVE_SUMMARY:
- _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].mail_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].mailbox_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].server_mail_status), col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].server_mailbox_name), 0, col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].server_mail_id), 0, col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].file_path_plain), 0, col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].file_path_html), 0, col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].file_path_mime_entity), 0, col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].subject), 0, col_index++);
- _get_table_field_data_char(result, &(p_data_tbl[i].flags_seen_field), col_index++);
- _get_table_field_data_int(result, (int*)&(p_data_tbl[i].save_status), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].lock_status), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].thread_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].thread_item_count), col_index++);
- break;
+ case RETRIEVE_SUMMARY:
+ _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].mail_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].mailbox_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].server_mail_status), col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].server_mailbox_name), 0, col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].server_mail_id), 0, col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].file_path_plain), 0, col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].file_path_html), 0, col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].file_path_mime_entity), 0, col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].subject), 0, col_index++);
+ _get_table_field_data_char(result, &(p_data_tbl[i].flags_seen_field), col_index++);
+ _get_table_field_data_int(result, (int*)&(p_data_tbl[i].save_status), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].lock_status), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].thread_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].thread_item_count), col_index++);
+ break;
- case RETRIEVE_FIELDS_FOR_DELETE:
- _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].mail_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].server_mail_status), col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].server_mailbox_name), 0, col_index++);
- _get_table_field_data_string(result, &(p_data_tbl[i].server_mail_id), 0, col_index++);
- break;
+ case RETRIEVE_FIELDS_FOR_DELETE:
+ _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].mail_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].server_mail_status), col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].server_mailbox_name), 0, col_index++);
+ _get_table_field_data_string(result, &(p_data_tbl[i].server_mail_id), 0, col_index++);
+ break;
- case RETRIEVE_ACCOUNT:
- _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
- break;
+ case RETRIEVE_ACCOUNT:
+ _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
+ break;
- case RETRIEVE_FLAG:
- _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].mail_id), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].mailbox_id), col_index++);
- _get_table_field_data_char(result, &(p_data_tbl[i].flags_seen_field), col_index++);
- _get_table_field_data_int(result, &(p_data_tbl[i].thread_id), col_index++);
- break;
+ case RETRIEVE_FLAG:
+ _get_table_field_data_int(result, &(p_data_tbl[i].account_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].mail_id), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].mailbox_id), col_index++);
+ _get_table_field_data_char(result, &(p_data_tbl[i].flags_seen_field), col_index++);
+ _get_table_field_data_int(result, &(p_data_tbl[i].thread_id), col_index++);
+ break;
}
}
#endif
INTERNAL_FUNC int emstorage_mail_search_start(char *multi_user_name,
- emstorage_search_filter_t *search,
- int account_id,
- int mailbox_id,
- int sorting,
- DB_STMT *search_handle,
- int *searched,
- int transaction,
- int *err_code)
+ emstorage_search_filter_t *search,
+ int account_id,
+ int mailbox_id,
+ int sorting,
+ DB_STMT *search_handle,
+ int *searched,
+ int transaction,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN("search[%p], account_id[%d], mailbox_id[%d], sorting[%d], "
- "search_handle[%p], searched[%p], transaction[%d], err_code[%p]",
- search, account_id, mailbox_id, sorting, search_handle,
- searched, transaction, err_code);
+ "search_handle[%p], searched[%p], transaction[%d], err_code[%p]",
+ search, account_id, mailbox_id, sorting, search_handle,
+ searched, transaction, err_code);
if (!search_handle || !searched) {
if (err_code != NULL)
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
char **result;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &mail_count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
sqlite3_free_table(result);
int error = EMAIL_ERROR_NONE;
switch (type) {
- case RETRIEVE_ID:
- _get_stmt_field_data_int(hStmt, (int *)data, MAIL_ID_IDX_IN_MAIL_TBL);
- break;
+ case RETRIEVE_ID:
+ _get_stmt_field_data_int(hStmt, (int *)data, MAIL_ID_IDX_IN_MAIL_TBL);
+ break;
- case RETRIEVE_ENVELOPE:
- case RETRIEVE_ALL:
- if (!(p_data_tbl = em_malloc(sizeof(emstorage_mail_tbl_t)))) {
- EM_DEBUG_EXCEPTION(" em_mallocfailed...");
- error = EMAIL_ERROR_OUT_OF_MEMORY;
- goto FINISH_OFF;
- }
+ case RETRIEVE_ENVELOPE:
+ case RETRIEVE_ALL:
+ if (!(p_data_tbl = em_malloc(sizeof(emstorage_mail_tbl_t)))) {
+ EM_DEBUG_EXCEPTION(" em_mallocfailed...");
+ error = EMAIL_ERROR_OUT_OF_MEMORY;
+ goto FINISH_OFF;
+ }
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), MAIL_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), ACCOUNT_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_size), MAIL_SIZE_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, SERVER_MAIL_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_from), 1, FULL_ADDRESS_FROM_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_to), 1, FULL_ADDRESS_TO_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->subject), 1, SUBJECT_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->body_download_status), BODY_DOWNLOAD_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_plain), 0, FILE_PATH_PLAIN_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_html), 0, FILE_PATH_HTML_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_mime_entity), 0, FILE_PATH_HTML_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_time_t(hStmt, &(p_data_tbl->date_time), DATETIME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_char(hStmt, &(p_data_tbl->flags_seen_field), FLAGS_SEEN_FIELD_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->DRM_status), DRM_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->priority), PRIORITY_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->save_status), SAVE_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->lock_status), LOCK_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->report_status), REPORT_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), MAIL_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), ACCOUNT_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_size), MAIL_SIZE_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, SERVER_MAIL_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_from), 1, FULL_ADDRESS_FROM_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_to), 1, FULL_ADDRESS_TO_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->subject), 1, SUBJECT_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->body_download_status), BODY_DOWNLOAD_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_plain), 0, FILE_PATH_PLAIN_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_html), 0, FILE_PATH_HTML_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->file_path_mime_entity), 0, FILE_PATH_HTML_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_time_t(hStmt, &(p_data_tbl->date_time), DATETIME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_char(hStmt, &(p_data_tbl->flags_seen_field), FLAGS_SEEN_FIELD_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->DRM_status), DRM_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->priority), PRIORITY_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->save_status), SAVE_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->lock_status), LOCK_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->report_status), REPORT_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->preview_text), 1, PREVIEW_TEXT_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->meeting_request_status), MEETING_REQUEST_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->message_class), MESSAGE_CLASS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->digest_type), DIGEST_TYPE_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->smime_type), SMIME_TYPE_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->scheduled_sending_time), SCHEDULED_SENDING_TIME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->remaining_resend_times), SCHEDULED_SENDING_TIME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->tag_id), TAG_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->eas_data_length), EAS_DATA_LENGTH_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_blob(hStmt, (void**)&(p_data_tbl->eas_data), EAS_DATA_IDX_IN_MAIL_TBL);
+
+ if (type == RETRIEVE_ALL) {
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), SERVER_MAIL_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, SERVER_MAILBOX_NAME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_reply), 1, FULL_ADDRESS_REPLY_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_cc), 1, FULL_ADDRESS_CC_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_bcc), 1, FULL_ADDRESS_BCC_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_return), 1, FULL_ADDRESS_RETURN_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->message_id), 0, MESSAGE_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_sender), 1, EMAIL_ADDRESS_SENDER_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_recipient), 1, EMAIL_ADDRESS_RECIPIENT_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->attachment_count), ATTACHMENT_COUNT_IDX_IN_MAIL_TBL);
_get_stmt_field_data_string(hStmt, &(p_data_tbl->preview_text), 1, PREVIEW_TEXT_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->meeting_request_status), MEETING_REQUEST_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->message_class), MESSAGE_CLASS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->digest_type), DIGEST_TYPE_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->smime_type), SMIME_TYPE_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->scheduled_sending_time), SCHEDULED_SENDING_TIME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->remaining_resend_times), SCHEDULED_SENDING_TIME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->tag_id), TAG_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->eas_data_length), EAS_DATA_LENGTH_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_blob(hStmt, (void**)&(p_data_tbl->eas_data), EAS_DATA_IDX_IN_MAIL_TBL);
-
- if (type == RETRIEVE_ALL) {
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), SERVER_MAIL_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, SERVER_MAILBOX_NAME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_reply), 1, FULL_ADDRESS_REPLY_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_cc), 1, FULL_ADDRESS_CC_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_bcc), 1, FULL_ADDRESS_BCC_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->full_address_return), 1, FULL_ADDRESS_RETURN_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->message_id), 0, MESSAGE_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_sender), 1, EMAIL_ADDRESS_SENDER_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_recipient), 1, EMAIL_ADDRESS_RECIPIENT_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->attachment_count), ATTACHMENT_COUNT_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->preview_text), 1, PREVIEW_TEXT_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->replied_time), REPLIED_TIME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->forwarded_time), FORWARDED_TIME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->default_charset), 0, DEFAULT_CHARSET_IDX_IN_MAIL_TBL);
- }
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->replied_time), REPLIED_TIME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, (int*)&(p_data_tbl->forwarded_time), FORWARDED_TIME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->default_charset), 0, DEFAULT_CHARSET_IDX_IN_MAIL_TBL);
+ }
- if (p_data_tbl->body_download_status) {
- struct stat buf;
+ if (p_data_tbl->body_download_status) {
+ struct stat buf;
- if (p_data_tbl->file_path_html) {
- if (stat(p_data_tbl->file_path_html, &buf) == -1)
- p_data_tbl->body_download_status = 0;
- } else if (p_data_tbl->file_path_plain) {
- if (stat(p_data_tbl->file_path_plain, &buf) == -1)
- p_data_tbl->body_download_status = 0;
- } else
+ if (p_data_tbl->file_path_html) {
+ if (stat(p_data_tbl->file_path_html, &buf) == -1)
p_data_tbl->body_download_status = 0;
- }
+ } else if (p_data_tbl->file_path_plain) {
+ if (stat(p_data_tbl->file_path_plain, &buf) == -1)
+ p_data_tbl->body_download_status = 0;
+ } else
+ p_data_tbl->body_download_status = 0;
+ }
- *((emstorage_mail_tbl_t**)data) = p_data_tbl;
- break;
+ *((emstorage_mail_tbl_t**)data) = p_data_tbl;
+ break;
- case RETRIEVE_SUMMARY:
- if (!(p_data_tbl = malloc(sizeof(emstorage_mail_tbl_t)))) {
- EM_DEBUG_EXCEPTION(" malloc failed...");
+ case RETRIEVE_SUMMARY:
+ if (!(p_data_tbl = malloc(sizeof(emstorage_mail_tbl_t)))) {
+ EM_DEBUG_EXCEPTION(" malloc failed...");
- error = EMAIL_ERROR_OUT_OF_MEMORY;
- goto FINISH_OFF;
- }
+ error = EMAIL_ERROR_OUT_OF_MEMORY;
+ goto FINISH_OFF;
+ }
- memset(p_data_tbl, 0x00, sizeof(emstorage_mail_tbl_t));
+ memset(p_data_tbl, 0x00, sizeof(emstorage_mail_tbl_t));
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), MAIL_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), ACCOUNT_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), SERVER_MAIL_STATUS_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, SERVER_MAILBOX_NAME_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, SERVER_MAIL_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), MAIL_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->account_id), ACCOUNT_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->server_mail_status), SERVER_MAIL_STATUS_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mailbox_name), 0, SERVER_MAILBOX_NAME_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->server_mail_id), 0, SERVER_MAIL_ID_IDX_IN_MAIL_TBL);
- *((emstorage_mail_tbl_t**)data) = p_data_tbl;
- break;
+ *((emstorage_mail_tbl_t**)data) = p_data_tbl;
+ break;
- case RETRIEVE_ADDRESS:
- if (!(p_data_tbl = malloc(sizeof(emstorage_mail_tbl_t)))) {
- EM_DEBUG_EXCEPTION(" malloc failed...");
- error = EMAIL_ERROR_OUT_OF_MEMORY;
- goto FINISH_OFF;
- }
+ case RETRIEVE_ADDRESS:
+ if (!(p_data_tbl = malloc(sizeof(emstorage_mail_tbl_t)))) {
+ EM_DEBUG_EXCEPTION(" malloc failed...");
+ error = EMAIL_ERROR_OUT_OF_MEMORY;
+ goto FINISH_OFF;
+ }
- memset(p_data_tbl, 0x00, sizeof(emstorage_mail_tbl_t));
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), MAIL_ID_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_sender), 1, EMAIL_ADDRESS_SENDER_IDX_IN_MAIL_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_recipient), 1, EMAIL_ADDRESS_RECIPIENT_IDX_IN_MAIL_TBL);
- *((emstorage_mail_tbl_t**)data) = p_data_tbl;
- break;
+ memset(p_data_tbl, 0x00, sizeof(emstorage_mail_tbl_t));
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->mail_id), MAIL_ID_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_sender), 1, EMAIL_ADDRESS_SENDER_IDX_IN_MAIL_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->email_address_recipient), 1, EMAIL_ADDRESS_RECIPIENT_IDX_IN_MAIL_TBL);
+ *((emstorage_mail_tbl_t**)data) = p_data_tbl;
+ break;
- default:
- break;
+ default:
+ break;
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " mail_id = ?"
- ", account_id = ?"
- ", mailbox_id = ?"
- ", mail_size = ?"
- ", server_mail_status = ?"
- ", server_mailbox_name = ?"
- ", server_mail_id = ?"
- ", reference_mail_id = ?"
- ", full_address_from = ?"
- ", full_address_reply = ?" /* 10 */
- ", full_address_to = ?"
- ", full_address_cc = ?"
- ", full_address_bcc = ?"
- ", full_address_return = ?"
- ", subject = ?"
- ", body_download_status = ?"
- ", file_path_plain = ?"
- ", file_path_html = ?"
- ", file_path_mime_entity = ?"
- ", date_time = ?"
- ", flags_seen_field = ?"
- ", flags_deleted_field = ?"
- ", flags_flagged_field = ?"
- ", flags_answered_field = ?"
- ", flags_recent_field = ?"
- ", flags_draft_field = ?"
- ", flags_forwarded_field = ?"
- ", DRM_status = ?"
- ", priority = ?"
- ", save_status = ?"
- ", lock_status = ?"
- ", message_id = ?"
- ", report_status = ?"
- ", preview_text = ?"
- ", smime_type = ?"
- ", scheduled_sending_time = ?"
- ", remaining_resend_times = ?"
- ", tag_id = ?"
- ", replied_time = ?"
- ", forwarded_time = ?"
- ", default_charset = ?"
- ", eas_data_length = ?"
- ", eas_data = ?"
- " WHERE mail_id = %d AND account_id != 0 "
- , mail_id);
+ "UPDATE mail_tbl SET"
+ " mail_id = ?"
+ ", account_id = ?"
+ ", mailbox_id = ?"
+ ", mail_size = ?"
+ ", server_mail_status = ?"
+ ", server_mailbox_name = ?"
+ ", server_mail_id = ?"
+ ", reference_mail_id = ?"
+ ", full_address_from = ?"
+ ", full_address_reply = ?" /* 10 */
+ ", full_address_to = ?"
+ ", full_address_cc = ?"
+ ", full_address_bcc = ?"
+ ", full_address_return = ?"
+ ", subject = ?"
+ ", body_download_status = ?"
+ ", file_path_plain = ?"
+ ", file_path_html = ?"
+ ", file_path_mime_entity = ?"
+ ", date_time = ?"
+ ", flags_seen_field = ?"
+ ", flags_deleted_field = ?"
+ ", flags_flagged_field = ?"
+ ", flags_answered_field = ?"
+ ", flags_recent_field = ?"
+ ", flags_draft_field = ?"
+ ", flags_forwarded_field = ?"
+ ", DRM_status = ?"
+ ", priority = ?"
+ ", save_status = ?"
+ ", lock_status = ?"
+ ", message_id = ?"
+ ", report_status = ?"
+ ", preview_text = ?"
+ ", smime_type = ?"
+ ", scheduled_sending_time = ?"
+ ", remaining_resend_times = ?"
+ ", tag_id = ?"
+ ", replied_time = ?"
+ ", forwarded_time = ?"
+ ", default_charset = ?"
+ ", eas_data_length = ?"
+ ", eas_data = ?"
+ " WHERE mail_id = %d AND account_id != 0 "
+ , mail_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, i++, mail->mail_id);
_bind_stmt_field_data_int(hStmt, i++, mail->account_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
rc = sqlite3_changes(local_db_handle);
if (rc == 0) {
}
/**
- * emstorage_clean_save_status(int save_status, int *err_code) - set the all mail status to the set value
- *
- *
- **/
+ * emstorage_clean_save_status(int save_status, int *err_code) - set the all mail status to the set value
+ *
+ *
+ **/
INTERNAL_FUNC int emstorage_clean_save_status(char *multi_user_name, int save_status, int *err_code)
{
EM_DEBUG_FUNC_BEGIN("save_status[%d], err_code[%p]", save_status, err_code);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
if (sqlite3_changes(local_db_handle) == 0)
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_text_tbl SET"
- " body_text = ?"
- " WHERE mail_id = %d AND account_id != 0"
- , mail_id);
+ "UPDATE mail_text_tbl SET"
+ " body_text = ?"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mail_id);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
i = 0;
_bind_stmt_field_data_string(hStmt, i++, (char *)mail_text->body_text, 0, -1);
DB_STMT hStmt = NULL;
char sql_query_string[QUERY_SIZE] = {0, };
char mailbox_id_param_string[10] = {0,};
- sqlite3 *local_db_handle = NULL;
-
- if (mail_id <= 0 || !mail) {
- EM_DEBUG_EXCEPTION(" mail_id[%d], type[%d], mail[%p]", mail_id, type, mail);
- if (err_code != NULL)
- *err_code = EMAIL_ERROR_INVALID_PARAM;
- return false;
- }
-
- local_db_handle = emstorage_get_db_connection(multi_user_name);
-
- EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
-
- switch (type) {
- case APPEND_BODY:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " body_download_status = ?"
- ", file_path_plain = ?"
- ", file_path_html = ?"
- ", file_path_mime_entity = ?"
- ", flags_seen_field = ?"
- ", flags_deleted_field = ?"
- ", flags_flagged_field = ?"
- ", flags_answered_field = ?"
- ", flags_recent_field = ?"
- ", flags_draft_field = ?"
- ", flags_forwarded_field = ?"
- ", DRM_status = ?"
- ", attachment_count = ?"
- ", preview_text= ?"
- ", meeting_request_status = ? "
- ", message_class = ? "
- ", digest_type = ? "
- ", smime_type = ? "
- " WHERE mail_id = %d AND account_id != 0"
- , mail_id);
-
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
-
- _bind_stmt_field_data_int(hStmt, i++, mail->body_download_status);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_seen_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_deleted_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_flagged_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_answered_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_recent_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_draft_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->flags_forwarded_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->DRM_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->attachment_count);
- _bind_stmt_field_data_nstring(hStmt, i++, (char *)mail->preview_text, 0, PREVIEWBODY_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->meeting_request_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->message_class);
- _bind_stmt_field_data_int(hStmt, i++, mail->digest_type);
- _bind_stmt_field_data_int(hStmt, i++, mail->smime_type);
- break;
-
- case UPDATE_MAILBOX: {
- int err;
- emstorage_mailbox_tbl_t *mailbox_tbl;
-
- if ((err = emstorage_get_mailbox_by_id(multi_user_name, mail->mailbox_id, &mailbox_tbl)) != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION(" emstorage_get_mailbox_by_id failed [%d]", err);
- goto FINISH_OFF;
- }
-
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " mailbox_id = '%d'"
- ",mailbox_type = '%d'"
- " WHERE mail_id = %d AND account_id != 0"
- , mailbox_tbl->mailbox_id
- , mailbox_tbl->mailbox_type
- , mail_id);
- move_flag = 1;
-
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
-
- i = 0;
- _bind_stmt_field_data_string(hStmt, i++, (char *)mailbox_tbl->mailbox_name, 0, MAILBOX_NAME_LEN_IN_MAIL_BOX_TBL);
-
- emstorage_free_mailbox(&mailbox_tbl, 1, NULL); /*prevent 26251*/
-
- }
- break;
-
- case UPDATE_FLAG:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " flags_seen_field = %d"
- ",flags_deleted_field = %d"
- ",flags_flagged_field = %d"
- ",flags_answered_field = %d"
- ",flags_recent_field = %d"
- ",flags_draft_field = %d"
- ",flags_forwarded_field = %d"
- " WHERE mail_id = %d AND account_id != 0"
- , mail->flags_seen_field
- , mail->flags_deleted_field
- , mail->flags_flagged_field
- , mail->flags_answered_field
- , mail->flags_recent_field
- , mail->flags_draft_field
- , mail->flags_forwarded_field
- , mail_id);
- EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
-
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
-
- break;
-
- case UPDATE_EXTRA_FLAG:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " priority = %d"
- ", save_status = %d"
- ", lock_status = %d"
- ", report_status = %d"
- ", DRM_status = %d"
- " WHERE mail_id = %d AND account_id != 0"
- , mail->priority
- , mail->save_status
- , mail->lock_status
- , mail->report_status
- , mail->DRM_status
- , mail_id);
- EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
-
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- break;
-
- case UPDATE_STICKY_EXTRA_FLAG:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " lock_status = %d"
- " WHERE mail_id = %d AND account_id != 0"
- , mail->lock_status
- , mail_id);
- EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
-
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- break;
-
- case UPDATE_MAIL:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " full_address_from = ?"
- ", full_address_reply = ?"
- ", full_address_to = ?"
- ", full_address_cc = ?"
- ", full_address_bcc = ?"
- ", full_address_return = ?"
- ", subject = ?"
- ", file_path_plain = ?"
- ", date_time = ?"
- ", flags_seen_field = ?"
- ", flags_deleted_field = ?"
- ", flags_flagged_field = ?"
- ", flags_answered_field = ?"
- ", flags_recent_field = ?"
- ", flags_draft_field = ?"
- ", flags_forwarded_field = ?"
- ", priority = ?"
- ", save_status = ?"
- ", lock_status = ?"
- ", report_status = ?"
- ", DRM_status = ?"
- ", file_path_html = ?"
- ", file_path_mime_entity = ?"
- ", mail_size = ?"
- ", preview_text = ?"
- ", body_download_status = ?"
- ", attachment_count = ?"
- ", inline_content_count = ?"
- ", meeting_request_status = ?"
- ", message_class = ?"
- ", digest_type = ?"
- ", smime_type = ?"
- ", scheduled_sending_time = ?"
- ", remaining_resend_times = ?"
- ", tag_id = ?"
- ", replied_time = ?"
- ", forwarded_time = ?"
- ", default_charset = ?"
- ", eas_data_length = ?"
- ", eas_data = ?"
- " WHERE mail_id = %d AND account_id != 0"
- , mail_id);
-
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_LOG_DEV(" before sqlite3_prepare hStmt = %p", hStmt);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_from, 1, FROM_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_reply, 1, REPLY_TO_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_to, 1, TO_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_cc, 1, CC_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_bcc, 1, BCC_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_return, 1, RETURN_PATH_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->subject, 1, SUBJECT_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_time_t(hStmt, i++, mail->date_time);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_seen_field);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_deleted_field);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_flagged_field);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_answered_field);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_recent_field);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_draft_field);
- _bind_stmt_field_data_char(hStmt, i++, mail->flags_forwarded_field);
- _bind_stmt_field_data_int(hStmt, i++, mail->priority);
- _bind_stmt_field_data_int(hStmt, i++, mail->save_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->lock_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->report_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->DRM_status);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->mail_size);
- _bind_stmt_field_data_nstring(hStmt, i++, (char*)mail->preview_text, 1, PREVIEWBODY_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->body_download_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->attachment_count);
- _bind_stmt_field_data_int(hStmt, i++, mail->inline_content_count);
- _bind_stmt_field_data_int(hStmt, i++, mail->meeting_request_status);
- _bind_stmt_field_data_int(hStmt, i++, mail->message_class);
- _bind_stmt_field_data_int(hStmt, i++, mail->digest_type);
- _bind_stmt_field_data_int(hStmt, i++, mail->smime_type);
- _bind_stmt_field_data_int(hStmt, i++, mail->scheduled_sending_time);
- _bind_stmt_field_data_int(hStmt, i++, mail->remaining_resend_times);
- _bind_stmt_field_data_int(hStmt, i++, mail->tag_id);
- _bind_stmt_field_data_int(hStmt, i++, mail->replied_time);
- _bind_stmt_field_data_int(hStmt, i++, mail->forwarded_time);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->default_charset, 0, TEXT_2_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->eas_data_length);
- _bind_stmt_field_data_blob(hStmt, i++, (void*)mail->eas_data, mail->eas_data_length);
- break;
-
- case UPDATE_DATETIME: {
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " date_time = '%ld'"
- " WHERE mail_id = %d AND account_id != 0"
- , mail->date_time
- , mail_id);
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- break;
- }
-
- case UPDATE_FROM_CONTACT_INFO:
- EM_DEBUG_LOG("NVARCHAR : emstorage_change_mail_field - mail change type is UPDATE_FROM_CONTACT_INFO");
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " email_address_sender = ?,"
- " WHERE mail_id = %d",
- mail_id);
-
- hStmt = NULL;
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_sender, 1, FROM_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
- break;
-
- case UPDATE_TO_CONTACT_INFO:
- EM_DEBUG_LOG("NVARCHAR : emstorage_change_mail_field - mail change type is UPDATE_TO_CONTACT_INFO");
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " email_address_recipient = ?,"
- " WHERE mail_id = %d",
- mail_id);
-
- hStmt = NULL;
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_recipient, 1, TO_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
- break;
-
- case UPDATE_ALL_CONTACT_INFO:
- EM_DEBUG_LOG("emstorage_change_mail_field - mail change type is UPDATE_ALL_CONTACT_INFO");
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " email_address_sender = ?,"
- " email_address_recipient = ?,"
- " WHERE mail_id = %d",
- mail_id);
-
- hStmt = NULL;
-
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_sender, 1, FROM_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_recipient, 1, TO_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
- break;
-
-
-#ifdef __FEATURE_PARTIAL_BODY_DOWNLOAD__
- case UPDATE_PARTIAL_BODY_DOWNLOAD:
-
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET"
- " body_download_status = ?"
- ", file_path_plain = ?"
- ", file_path_html = ?"
- ", file_path_mime_entity = ?"
- ", attachment_count = ?"
- ", inline_content_count = ?"
- ", preview_text = ?"
- ", digest_type = ?"
- ", smime_type = ?"
- " WHERE mail_id = %d"
- , mail_id);
+ sqlite3 *local_db_handle = NULL;
+ if (mail_id <= 0 || !mail) {
+ EM_DEBUG_EXCEPTION(" mail_id[%d], type[%d], mail[%p]", mail_id, type, mail);
+ if (err_code != NULL)
+ *err_code = EMAIL_ERROR_INVALID_PARAM;
+ return false;
+ }
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
-
- _bind_stmt_field_data_int(hStmt, i++, mail->body_download_status);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->attachment_count);
- _bind_stmt_field_data_int(hStmt, i++, mail->inline_content_count);
- _bind_stmt_field_data_nstring(hStmt, i++, (char *)mail->preview_text, 0, PREVIEWBODY_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_int(hStmt, i++, mail->digest_type);
- _bind_stmt_field_data_int(hStmt, i++, mail->smime_type);
+ local_db_handle = emstorage_get_db_connection(multi_user_name);
- break;
+ EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
-#endif
- case UPDATE_FILE_PATH:
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ switch (type) {
+ case APPEND_BODY:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"UPDATE mail_tbl SET"
+ " body_download_status = ?"
", file_path_plain = ?"
", file_path_html = ?"
", file_path_mime_entity = ?"
- " WHERE mail_id = %d"
+ ", flags_seen_field = ?"
+ ", flags_deleted_field = ?"
+ ", flags_flagged_field = ?"
+ ", flags_answered_field = ?"
+ ", flags_recent_field = ?"
+ ", flags_draft_field = ?"
+ ", flags_forwarded_field = ?"
+ ", DRM_status = ?"
+ ", attachment_count = ?"
+ ", preview_text= ?"
+ ", meeting_request_status = ? "
+ ", message_class = ? "
+ ", digest_type = ? "
+ ", smime_type = ? "
+ " WHERE mail_id = %d AND account_id != 0"
, mail_id);
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_LOG(" before sqlite3_prepare hStmt = %p", hStmt);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- i = 0;
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
- _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
- break;
+ i = 0;
+
+ _bind_stmt_field_data_int(hStmt, i++, mail->body_download_status);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_seen_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_deleted_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_flagged_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_answered_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_recent_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_draft_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->flags_forwarded_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->DRM_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->attachment_count);
+ _bind_stmt_field_data_nstring(hStmt, i++, (char *)mail->preview_text, 0, PREVIEWBODY_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->meeting_request_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->message_class);
+ _bind_stmt_field_data_int(hStmt, i++, mail->digest_type);
+ _bind_stmt_field_data_int(hStmt, i++, mail->smime_type);
+ break;
- default:
- EM_DEBUG_LOG(" type[%d]", type);
+ case UPDATE_MAILBOX: {
+ int err;
+ emstorage_mailbox_tbl_t *mailbox_tbl;
+
+ if ((err = emstorage_get_mailbox_by_id(multi_user_name, mail->mailbox_id, &mailbox_tbl)) != EMAIL_ERROR_NONE) {
+ EM_DEBUG_EXCEPTION(" emstorage_get_mailbox_by_id failed [%d]", err);
+ goto FINISH_OFF;
+ }
+
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " mailbox_id = '%d'"
+ ",mailbox_type = '%d'"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mailbox_tbl->mailbox_id
+ , mailbox_tbl->mailbox_type
+ , mail_id);
+ move_flag = 1;
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+
+ i = 0;
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mailbox_tbl->mailbox_name, 0, MAILBOX_NAME_LEN_IN_MAIL_BOX_TBL);
+
+ emstorage_free_mailbox(&mailbox_tbl, 1, NULL); /*prevent 26251*/
+
+ }
+ break;
+
+ case UPDATE_FLAG:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " flags_seen_field = %d"
+ ",flags_deleted_field = %d"
+ ",flags_flagged_field = %d"
+ ",flags_answered_field = %d"
+ ",flags_recent_field = %d"
+ ",flags_draft_field = %d"
+ ",flags_forwarded_field = %d"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mail->flags_seen_field
+ , mail->flags_deleted_field
+ , mail->flags_flagged_field
+ , mail->flags_answered_field
+ , mail->flags_recent_field
+ , mail->flags_draft_field
+ , mail->flags_forwarded_field
+ , mail_id);
+ EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+
+ break;
+
+ case UPDATE_EXTRA_FLAG:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " priority = %d"
+ ", save_status = %d"
+ ", lock_status = %d"
+ ", report_status = %d"
+ ", DRM_status = %d"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mail->priority
+ , mail->save_status
+ , mail->lock_status
+ , mail->report_status
+ , mail->DRM_status
+ , mail_id);
+ EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ break;
+
+ case UPDATE_STICKY_EXTRA_FLAG:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " lock_status = %d"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mail->lock_status
+ , mail_id);
+ EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ break;
+
+ case UPDATE_MAIL:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " full_address_from = ?"
+ ", full_address_reply = ?"
+ ", full_address_to = ?"
+ ", full_address_cc = ?"
+ ", full_address_bcc = ?"
+ ", full_address_return = ?"
+ ", subject = ?"
+ ", file_path_plain = ?"
+ ", date_time = ?"
+ ", flags_seen_field = ?"
+ ", flags_deleted_field = ?"
+ ", flags_flagged_field = ?"
+ ", flags_answered_field = ?"
+ ", flags_recent_field = ?"
+ ", flags_draft_field = ?"
+ ", flags_forwarded_field = ?"
+ ", priority = ?"
+ ", save_status = ?"
+ ", lock_status = ?"
+ ", report_status = ?"
+ ", DRM_status = ?"
+ ", file_path_html = ?"
+ ", file_path_mime_entity = ?"
+ ", mail_size = ?"
+ ", preview_text = ?"
+ ", body_download_status = ?"
+ ", attachment_count = ?"
+ ", inline_content_count = ?"
+ ", meeting_request_status = ?"
+ ", message_class = ?"
+ ", digest_type = ?"
+ ", smime_type = ?"
+ ", scheduled_sending_time = ?"
+ ", remaining_resend_times = ?"
+ ", tag_id = ?"
+ ", replied_time = ?"
+ ", forwarded_time = ?"
+ ", default_charset = ?"
+ ", eas_data_length = ?"
+ ", eas_data = ?"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mail_id);
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_LOG_DEV(" before sqlite3_prepare hStmt = %p", hStmt);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ i = 0;
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_from, 1, FROM_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_reply, 1, REPLY_TO_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_to, 1, TO_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_cc, 1, CC_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_bcc, 1, BCC_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->full_address_return, 1, RETURN_PATH_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->subject, 1, SUBJECT_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_time_t(hStmt, i++, mail->date_time);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_seen_field);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_deleted_field);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_flagged_field);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_answered_field);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_recent_field);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_draft_field);
+ _bind_stmt_field_data_char(hStmt, i++, mail->flags_forwarded_field);
+ _bind_stmt_field_data_int(hStmt, i++, mail->priority);
+ _bind_stmt_field_data_int(hStmt, i++, mail->save_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->lock_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->report_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->DRM_status);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->mail_size);
+ _bind_stmt_field_data_nstring(hStmt, i++, (char*)mail->preview_text, 1, PREVIEWBODY_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->body_download_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->attachment_count);
+ _bind_stmt_field_data_int(hStmt, i++, mail->inline_content_count);
+ _bind_stmt_field_data_int(hStmt, i++, mail->meeting_request_status);
+ _bind_stmt_field_data_int(hStmt, i++, mail->message_class);
+ _bind_stmt_field_data_int(hStmt, i++, mail->digest_type);
+ _bind_stmt_field_data_int(hStmt, i++, mail->smime_type);
+ _bind_stmt_field_data_int(hStmt, i++, mail->scheduled_sending_time);
+ _bind_stmt_field_data_int(hStmt, i++, mail->remaining_resend_times);
+ _bind_stmt_field_data_int(hStmt, i++, mail->tag_id);
+ _bind_stmt_field_data_int(hStmt, i++, mail->replied_time);
+ _bind_stmt_field_data_int(hStmt, i++, mail->forwarded_time);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->default_charset, 0, TEXT_2_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->eas_data_length);
+ _bind_stmt_field_data_blob(hStmt, i++, (void*)mail->eas_data, mail->eas_data_length);
+ break;
+
+ case UPDATE_DATETIME: {
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " date_time = '%ld'"
+ " WHERE mail_id = %d AND account_id != 0"
+ , mail->date_time
+ , mail_id);
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ break;
+ }
+
+ case UPDATE_FROM_CONTACT_INFO:
+ EM_DEBUG_LOG("NVARCHAR : emstorage_change_mail_field - mail change type is UPDATE_FROM_CONTACT_INFO");
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " email_address_sender = ?,"
+ " WHERE mail_id = %d",
+ mail_id);
+
+ hStmt = NULL;
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ i = 0;
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_sender, 1, FROM_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
+ break;
+
+ case UPDATE_TO_CONTACT_INFO:
+ EM_DEBUG_LOG("NVARCHAR : emstorage_change_mail_field - mail change type is UPDATE_TO_CONTACT_INFO");
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " email_address_recipient = ?,"
+ " WHERE mail_id = %d",
+ mail_id);
+
+ hStmt = NULL;
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ i = 0;
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_recipient, 1, TO_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
+ break;
+
+ case UPDATE_ALL_CONTACT_INFO:
+ EM_DEBUG_LOG("emstorage_change_mail_field - mail change type is UPDATE_ALL_CONTACT_INFO");
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " email_address_sender = ?,"
+ " email_address_recipient = ?,"
+ " WHERE mail_id = %d",
+ mail_id);
+
+ hStmt = NULL;
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ i = 0;
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_sender, 1, FROM_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->email_address_recipient, 1, TO_EMAIL_ADDRESS_LEN_IN_MAIL_TBL);
+ break;
- error = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
+
+#ifdef __FEATURE_PARTIAL_BODY_DOWNLOAD__
+ case UPDATE_PARTIAL_BODY_DOWNLOAD:
+
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ " body_download_status = ?"
+ ", file_path_plain = ?"
+ ", file_path_html = ?"
+ ", file_path_mime_entity = ?"
+ ", attachment_count = ?"
+ ", inline_content_count = ?"
+ ", preview_text = ?"
+ ", digest_type = ?"
+ ", smime_type = ?"
+ " WHERE mail_id = %d"
+ , mail_id);
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ i = 0;
+
+ _bind_stmt_field_data_int(hStmt, i++, mail->body_download_status);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->attachment_count);
+ _bind_stmt_field_data_int(hStmt, i++, mail->inline_content_count);
+ _bind_stmt_field_data_nstring(hStmt, i++, (char *)mail->preview_text, 0, PREVIEWBODY_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_int(hStmt, i++, mail->digest_type);
+ _bind_stmt_field_data_int(hStmt, i++, mail->smime_type);
+
+ break;
+
+#endif
+ case UPDATE_FILE_PATH:
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "UPDATE mail_tbl SET"
+ ", file_path_plain = ?"
+ ", file_path_html = ?"
+ ", file_path_mime_entity = ?"
+ " WHERE mail_id = %d"
+ , mail_id);
+
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_LOG(" before sqlite3_prepare hStmt = %p", hStmt);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ i = 0;
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_plain, 0, TEXT_1_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_html, 0, TEXT_2_LEN_IN_MAIL_TBL);
+ _bind_stmt_field_data_string(hStmt, i++, (char*)mail->file_path_mime_entity, 0, MIME_ENTITY_LEN_IN_MAIL_TBL);
+ break;
+
+ default:
+ EM_DEBUG_LOG(" type[%d]", type);
+
+ error = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
}
if (hStmt != NULL) {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
rc = sqlite3_changes(local_db_handle);
if (rc == 0) {
EM_DEBUG_LOG(" no matched mail found...");
_timedlock_shm_mutex(mapped_for_generating_mail_id, 2);
#endif /* __FEATURE_USE_SHARED_MUTEX_FOR_GENERATING_MAIL_ID__ */
- ret = vconf_get_int(VCONF_KEY_LATEST_MAIL_ID, &latest_mail_id);
+ ret = vconf_get_int(VCONF_KEY_LATEST_MAIL_ID, &latest_mail_id);
if (ret < 0 || latest_mail_id == 0) {
EM_DEBUG_LOG("vconf_get_int() failed [%d] or latest_mail_id is zero", ret);
- local_db_handle = emstorage_get_db_connection(multi_user_name);
+ local_db_handle = emstorage_get_db_connection(multi_user_name);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1])
rc = 1;
else
char **result;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
-/* EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL[%s] sqlite3_get_table fail[%d] [%s]", sql, rc, sqlite3_errmsg(local_db_handle))); */
+ /* EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
+ ("SQL[%s] sqlite3_get_table fail[%d] [%s]", sql, rc, sqlite3_errmsg(local_db_handle))); */
if (rc != SQLITE_OK) {
EM_DEBUG_EXCEPTION("SQL[%s] sqlite3_get_table fail[%d] [%s]", sql, rc, sqlite3_errmsg(local_db_handle));
error = EMAIL_ERROR_DB_FAILURE;
mail_tbl_data->date_time = time(NULL);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_tbl VALUES "
- "(?" /* mail_id */
- ", ?" /* account_id */
- ", ?" /* mailbox_id */
- ", ?" /* mailbox_type */
- ", ?" /* subject */
-
- ", ?" /* date_time */
- ", ?" /* server_mail_status */
- ", ?" /* server_mailbox_name */
- ", ?" /* server_mail_id */
- ", ?" /* message_id */
-
- ", ?" /* reference_mail_id */
- ", ?" /* full_address_from */
- ", ?" /* full_address_reply */
- ", ?" /* full_address_to */
- ", ?" /* full_address_cc */
-
- ", ?" /* full_address_bcc */
- ", ?" /* full_address_return */
- ", ?" /* email_address_sender */
- ", ?" /* email_address_recipient */
- ", ?" /* alias_sender */
-
- ", ?" /* alias_recipient */
- ", ?" /* body_download_status */
- ", ?" /* file_path_plain */
- ", ?" /* file_path_html */
- ", ?" /* file_path_mime_entity */
-
- ", ?" /* mail_size */
- ", ?" /* flags_seen_field */
- ", ?" /* flags_deleted_field */
- ", ?" /* flags_flagged_field */
- ", ?" /* flags_answered_field */
-
- ", ?" /* flags_recent_field */
- ", ?" /* flags_draft_field */
- ", ?" /* flags_forwarded_field */
- ", ?" /* DRM_status */
- ", ?" /* priority */
-
- ", ?" /* save_status */
- ", ?" /* lock_status */
- ", ?" /* report_status */
- ", ?" /* attachment_count */
- ", ?" /* inline_content_count */
-
- ", ?" /* thread_id */
- ", ?" /* thread_item_count */
- ", ?" /* preview_text */
- ", ?" /* meeting_request_status */
- ", ?" /* message_class */
-
- ", ?" /* digest_type */
- ", ?" /* smime_type */
- ", ?" /* scheduled_sending_time */
- ", ?" /* remaining_resend_times */
- ", ?" /* tag_id */
-
- ", ?" /* replied_time */
- ", ?" /* forwarded_time */
- ", ?" /* default charset */
- ", ?" /* eas_data_length */
- ", ?" /* eas_data */
- ", ?" /* user_name */
- ")");
+ "INSERT INTO mail_tbl VALUES "
+ "(?" /* mail_id */
+ ", ?" /* account_id */
+ ", ?" /* mailbox_id */
+ ", ?" /* mailbox_type */
+ ", ?" /* subject */
+
+ ", ?" /* date_time */
+ ", ?" /* server_mail_status */
+ ", ?" /* server_mailbox_name */
+ ", ?" /* server_mail_id */
+ ", ?" /* message_id */
+
+ ", ?" /* reference_mail_id */
+ ", ?" /* full_address_from */
+ ", ?" /* full_address_reply */
+ ", ?" /* full_address_to */
+ ", ?" /* full_address_cc */
+
+ ", ?" /* full_address_bcc */
+ ", ?" /* full_address_return */
+ ", ?" /* email_address_sender */
+ ", ?" /* email_address_recipient */
+ ", ?" /* alias_sender */
+
+ ", ?" /* alias_recipient */
+ ", ?" /* body_download_status */
+ ", ?" /* file_path_plain */
+ ", ?" /* file_path_html */
+ ", ?" /* file_path_mime_entity */
+
+ ", ?" /* mail_size */
+ ", ?" /* flags_seen_field */
+ ", ?" /* flags_deleted_field */
+ ", ?" /* flags_flagged_field */
+ ", ?" /* flags_answered_field */
+
+ ", ?" /* flags_recent_field */
+ ", ?" /* flags_draft_field */
+ ", ?" /* flags_forwarded_field */
+ ", ?" /* DRM_status */
+ ", ?" /* priority */
+
+ ", ?" /* save_status */
+ ", ?" /* lock_status */
+ ", ?" /* report_status */
+ ", ?" /* attachment_count */
+ ", ?" /* inline_content_count */
+
+ ", ?" /* thread_id */
+ ", ?" /* thread_item_count */
+ ", ?" /* preview_text */
+ ", ?" /* meeting_request_status */
+ ", ?" /* message_class */
+
+ ", ?" /* digest_type */
+ ", ?" /* smime_type */
+ ", ?" /* scheduled_sending_time */
+ ", ?" /* remaining_resend_times */
+ ", ?" /* tag_id */
+
+ ", ?" /* replied_time */
+ ", ?" /* forwarded_time */
+ ", ?" /* default charset */
+ ", ?" /* eas_data_length */
+ ", ?" /* eas_data */
+ ", ?" /* user_name */
+ ")");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle,
- sql_query_string,
- EM_SAFE_STRLEN(sql_query_string),
- &hStmt,
- NULL),
- rc);
+ sql_query_string,
+ EM_SAFE_STRLEN(sql_query_string),
+ &hStmt,
+ NULL),
+ rc);
if (rc != SQLITE_OK) {
EM_DEBUG_EXCEPTION("sqlite3_prepare error [%d] [%s] SQL(%s) ",
- rc, sql_query_string, sqlite3_errmsg(local_db_handle));
+ rc, sql_query_string, sqlite3_errmsg(local_db_handle));
error = EMAIL_ERROR_DB_FAILURE;
goto FINISH_OFF;
}
}
if (result_mailbox->mailbox_name) {
- if (strstr(result_mailbox->mailbox_name, "'")) {
+ if (strstr(result_mailbox->mailbox_name, "'"))
target_mailbox_name = em_replace_all_string(result_mailbox->mailbox_name, "'", "''");
- } else {
+ else
target_mailbox_name = strdup(result_mailbox->mailbox_name);
- }
}
target_mailbox_type = result_mailbox->mailbox_type;
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
/* Updating a mail_attachment_tbl */
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
/* Updating a mail_meeting_tbl */
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
#ifdef __FEATURE_BODY_SEARCH__
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
#endif
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
#ifdef __FEATURE_BODY_SEARCH__
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
#endif
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
emstorage_mail_text_tbl_t *p = *mail_text_list;
int i = 0;
- for (; i < count; i++, p++) {
+ for (; i < count; i++, p++)
EM_SAFE_FREE(p->body_text);
- }
+
EM_SAFE_FREE(*mail_text_list);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT COUNT(*) FROM mail_attachment_tbl WHERE mail_id = %d", input_mail_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*output_attachment_count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG_DEV(" before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_prepare failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_prepare failed [%d] [%s]", rc, sql_query_string));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_step failed [%d] [%s]", rc, sql_query_string));
if (rc == SQLITE_DONE) {
EM_DEBUG_LOG("no matched attachment found...");
_get_stmt_field_data_string(hStmt, &(p_data_tbl->attachment_mime_type), 0, ATTACHMENT_MIME_TYPE_IDX_IN_MAIL_ATTACHMENT_TBL);
#ifdef __ATTACHMENT_OPTI__
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->encoding), ENCODING_IDX_IN_MAIL_ATTACHMENT_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->section), 0, SECTION_IDX_IN_MAIL_ATTACHMENT_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->encoding), ENCODING_IDX_IN_MAIL_ATTACHMENT_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->section), 0, SECTION_IDX_IN_MAIL_ATTACHMENT_TBL);
#endif
ret = true;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION("no matched attachment found: mail_id[%d] nth[%d]", mail_id, nth);
if ((p = (char *)sqlite3_column_text(hStmt, ATTACHMENT_MIME_TYPE_IDX_IN_MAIL_ATTACHMENT_TBL)) && (int)EM_SAFE_STRLEN(p))
p_data_tbl->attachment_mime_type = cpy_str(p);
#ifdef __ATTACHMENT_OPTI__
- p_data_tbl->encoding = sqlite3_column_int(hStmt, ENCODING_IDX_IN_MAIL_ATTACHMENT_TBL);
- if ((p = (char *)sqlite3_column_text(hStmt, SECTION_IDX_IN_MAIL_ATTACHMENT_TBL)) && (int)EM_SAFE_STRLEN(p))
- p_data_tbl->section = cpy_str(p);
+ p_data_tbl->encoding = sqlite3_column_int(hStmt, ENCODING_IDX_IN_MAIL_ATTACHMENT_TBL);
+ if ((p = (char *)sqlite3_column_text(hStmt, SECTION_IDX_IN_MAIL_ATTACHMENT_TBL)) && (int)EM_SAFE_STRLEN(p))
+ p_data_tbl->section = cpy_str(p);
#endif
- ret = true;
+ ret = true;
FINISH_OFF:
if (ret == true)
EM_DEBUG_LOG_DEV("before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_prepare failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_prepare failed [%d] [%s]", rc, sql_query_string));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step failed [%d] [%s]", rc, sql_query_string));
+ ("sqlite3_step failed [%d] [%s]", rc, sql_query_string));
if (rc == SQLITE_DONE) {
EM_DEBUG_LOG("no matched attachment found...");
_get_stmt_field_data_string(hStmt, &(p_data_tbl->attachment_mime_type), 0, ATTACHMENT_MIME_TYPE_IDX_IN_MAIL_ATTACHMENT_TBL);
#ifdef __ATTACHMENT_OPTI__
- _get_stmt_field_data_int(hStmt, &(p_data_tbl->encoding), ENCODING_IDX_IN_MAIL_ATTACHMENT_TBL);
- _get_stmt_field_data_string(hStmt, &(p_data_tbl->section), 0, SECTION_IDX_IN_MAIL_ATTACHMENT_TBL);
+ _get_stmt_field_data_int(hStmt, &(p_data_tbl->encoding), ENCODING_IDX_IN_MAIL_ATTACHMENT_TBL);
+ _get_stmt_field_data_string(hStmt, &(p_data_tbl->section), 0, SECTION_IDX_IN_MAIL_ATTACHMENT_TBL);
#endif
ret = true;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
switch (type) {
- case UPDATE_MAILBOX:
- EM_DEBUG_LOG("UPDATE_MAILBOX");
- if (!attachment->mailbox_id) {
- EM_DEBUG_EXCEPTION(" attachment->mailbox_id[%d]", attachment->mailbox_id);
- error = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
- }
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ case UPDATE_MAILBOX:
+ EM_DEBUG_LOG("UPDATE_MAILBOX");
+ if (!attachment->mailbox_id) {
+ EM_DEBUG_EXCEPTION(" attachment->mailbox_id[%d]", attachment->mailbox_id);
+ error = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
+ }
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"UPDATE mail_attachment_tbl SET mailbox_id = ? WHERE mail_id = %d", mail_id);
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_LOG(" Before sqlite3_prepare hStmt = %p", hStmt);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_LOG(" Before sqlite3_prepare hStmt = %p", hStmt);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- _bind_stmt_field_data_int(hStmt, i++, attachment->mailbox_id);
- break;
+ _bind_stmt_field_data_int(hStmt, i++, attachment->mailbox_id);
+ break;
- case UPDATE_SAVENAME:
- EM_DEBUG_LOG("UPDATE_SAVENAME");
- if (!attachment->attachment_path) {
- EM_DEBUG_EXCEPTION(" attachment->attachment_path[%p]", attachment->attachment_path);
- error = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
- }
+ case UPDATE_SAVENAME:
+ EM_DEBUG_LOG("UPDATE_SAVENAME");
+ if (!attachment->attachment_path) {
+ EM_DEBUG_EXCEPTION(" attachment->attachment_path[%p]", attachment->attachment_path);
+ error = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
+ }
- SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
"UPDATE mail_attachment_tbl SET"
" attachment_size = ?"
", attachment_save_status = ?"
, attachment->attachment_id);
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
- EM_DEBUG_LOG(" Before sqlite3_prepare hStmt = %p", hStmt);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
+ EM_DEBUG_LOG(" Before sqlite3_prepare hStmt = %p", hStmt);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- _bind_stmt_field_data_int(hStmt, i++, attachment->attachment_size);
- _bind_stmt_field_data_int(hStmt, i++, attachment->attachment_save_status);
- _bind_stmt_field_data_string(hStmt, i++, (char *)attachment->attachment_path, 0, ATTACHMENT_PATH_LEN_IN_MAIL_ATTACHMENT_TBL);
- break;
+ _bind_stmt_field_data_int(hStmt, i++, attachment->attachment_size);
+ _bind_stmt_field_data_int(hStmt, i++, attachment->attachment_save_status);
+ _bind_stmt_field_data_string(hStmt, i++, (char *)attachment->attachment_path, 0, ATTACHMENT_PATH_LEN_IN_MAIL_ATTACHMENT_TBL);
+ break;
- default:
- EM_DEBUG_LOG("type[%d]", type);
- error = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
+ default:
+ EM_DEBUG_LOG("type[%d]", type);
+ error = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
}
EM_DEBUG_LOG_SEC("query = [%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
FINISH_OFF:
return EMAIL_ERROR_INVALID_PARAM;
}
- if (strstr(input_new_mailbox_name, "'")) {
+ if (strstr(input_new_mailbox_name, "'"))
replaced_mailbox_name = em_replace_all_string(input_new_mailbox_name, "'", "''");
- } else {
+ else
replaced_mailbox_name = strdup(input_new_mailbox_name);
- }
- if (strstr(input_new_mailbox_alias, "'")) {
+ if (strstr(input_new_mailbox_alias, "'"))
replaced_alias = em_replace_all_string(input_new_mailbox_alias, "'", "''");
- } else {
+ else
replaced_alias = strdup(input_new_mailbox_alias);
- }
local_db_handle = emstorage_get_db_connection(multi_user_name);
return error;
}
- if (old_mailbox_data == NULL) {
- EM_DEBUG_LOG("old_mailbox_data is NULL");
- error = EMAIL_ERROR_MAILBOX_NOT_FOUND;
- goto FINISH_OFF;
- }
+ if (old_mailbox_data == NULL) {
+ EM_DEBUG_LOG("old_mailbox_data is NULL");
+ error = EMAIL_ERROR_MAILBOX_NOT_FOUND;
+ goto FINISH_OFF;
+ }
account_id = old_mailbox_data->account_id;
if (input_eas_data && input_eas_data_length > 0) {
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_box_tbl SET"
- " mailbox_name = ?"
- ",alias = ?"
- ",eas_data = ?"
- ",eas_data_length = ?"
- " WHERE mailbox_id = ?");
+ "UPDATE mail_box_tbl SET"
+ " mailbox_name = ?"
+ ",alias = ?"
+ ",eas_data = ?"
+ ",eas_data_length = ?"
+ " WHERE mailbox_id = ?");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_string(hStmt, field_idx++, input_new_mailbox_name, 0, ATTACHMENT_NAME_LEN_IN_MAIL_ATTACHMENT_TBL);
_bind_stmt_field_data_string(hStmt, field_idx++, input_new_mailbox_alias, 0, ATTACHMENT_PATH_LEN_IN_MAIL_ATTACHMENT_TBL);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_string(hStmt, field_idx++ , input_new_mailbox_name, 0, ATTACHMENT_NAME_LEN_IN_MAIL_ATTACHMENT_TBL);
_bind_stmt_field_data_string(hStmt, field_idx++ , input_new_mailbox_alias, 0, ATTACHMENT_PATH_LEN_IN_MAIL_ATTACHMENT_TBL);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((SQLITE_FULL == rc), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (sqlite3_changes(local_db_handle) == 0)
EM_DEBUG_LOG("no mail_meeting_tbl matched...");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1])
rc = 1;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1]) rc = 1;
else rc = atoi(result[1]) + 1;
attachment_tbl->attachment_id = rc;
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_attachment_tbl VALUES "
- "(?" /* attachment_id */
- ", ?" /* attachment_name */
- ", ?" /* attachment_path */
- ", ?" /* content_id */
- ", ?" /* attachment_size */
- ", ?" /* mail_id */
- ", ?" /* account_id */
- ", ?" /* mailbox_id */
- ", ?" /* attachment_save_status */
- ", ?" /* attachment_drm_type */
- ", ?" /* attachment_drm_method */
- ", ?" /* attachment_inline_content_status */
- ", ?" /* attachment_mime_type */
+ "INSERT INTO mail_attachment_tbl VALUES "
+ "(?" /* attachment_id */
+ ", ?" /* attachment_name */
+ ", ?" /* attachment_path */
+ ", ?" /* content_id */
+ ", ?" /* attachment_size */
+ ", ?" /* mail_id */
+ ", ?" /* account_id */
+ ", ?" /* mailbox_id */
+ ", ?" /* attachment_save_status */
+ ", ?" /* attachment_drm_type */
+ ", ?" /* attachment_drm_method */
+ ", ?" /* attachment_inline_content_status */
+ ", ?" /* attachment_mime_type */
#ifdef __ATTACHMENT_OPTI__
- ", ?"
- ", ?"
+ ", ?"
+ ", ?"
#endif
- ")");
+ ")");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, ATTACHMENT_ID_IDX_IN_MAIL_ATTACHMENT_TBL, attachment_tbl->attachment_id);
_bind_stmt_field_data_string(hStmt, ATTACHMENT_NAME_IDX_IN_MAIL_ATTACHMENT_TBL, (char*)attachment_tbl->attachment_name, 0, ATTACHMENT_NAME_LEN_IN_MAIL_ATTACHMENT_TBL);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((SQLITE_FULL == rc), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
rc = sqlite3_changes(local_db_handle);
if (rc == 0) {
}
if (err_code != NULL)
- *err_code = error;
+ *err_code = error;
EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
int rc, ret = false, field_idx = 0;
int error = EMAIL_ERROR_NONE;
DB_STMT hStmt = NULL;
- char sql_query_string[QUERY_SIZE] = {0, };
+ char sql_query_string[QUERY_SIZE] = {0, };
if (!attachment_tbl) {
EM_DEBUG_EXCEPTION(" attachment_tbl[%p] ", attachment_tbl);
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_attachment_tbl SET "
- " attachment_name = ?"
- ", attachment_path = ?"
- ", content_id = ?"
- ", attachment_size = ?"
- ", mail_id = ?"
- ", account_id = ?"
- ", mailbox_id = ?"
- ", attachment_save_status = ?"
- ", attachment_drm_type = ?"
- ", attachment_drm_method = ?"
- ", attachment_inline_content_status = ? "
- ", attachment_mime_type = ? "
- " WHERE attachment_id = ?;");
+ "UPDATE mail_attachment_tbl SET "
+ " attachment_name = ?"
+ ", attachment_path = ?"
+ ", content_id = ?"
+ ", attachment_size = ?"
+ ", mail_id = ?"
+ ", account_id = ?"
+ ", mailbox_id = ?"
+ ", attachment_save_status = ?"
+ ", attachment_drm_type = ?"
+ ", attachment_drm_method = ?"
+ ", attachment_inline_content_status = ? "
+ ", attachment_mime_type = ? "
+ " WHERE attachment_id = ?;");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_string(hStmt, field_idx++ , (char*)attachment_tbl->attachment_name, 0, ATTACHMENT_NAME_LEN_IN_MAIL_ATTACHMENT_TBL);
_bind_stmt_field_data_string(hStmt, field_idx++ , (char*)attachment_tbl->attachment_path, 0, ATTACHMENT_PATH_LEN_IN_MAIL_ATTACHMENT_TBL);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((SQLITE_FULL == rc), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
rc = sqlite3_changes(local_db_handle);
if (rc == 0) {
}
if (err_code != NULL)
- *err_code = error;
+ *err_code = error;
EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DELETE FROM mail_attachment_tbl WHERE mail_id = %d", mail_id);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
if (account_id != ALL_ACCOUNT) /* '0' means all account */
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " WHERE account_id = %d", account_id);
- if (mailbox) /* NULL means all mailbox_name */ {
- if (strstr(mailbox, "'")) {
+ if (mailbox) /* NULL means all mailbox_name */ {
+ if (strstr(mailbox, "'"))
replaced_mailbox = em_replace_all_string(mailbox, "'", "''");
- } else {
+ else
replaced_mailbox = strdup(mailbox);
- }
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1), " %s mailbox_name = '%s'", account_id != ALL_ACCOUNT ? "AND" : "WHERE", replaced_mailbox);
EM_SAFE_FREE(replaced_mailbox); /*prevent 49434*/
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
int rc;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "BEGIN immediate;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {ret = false; },
- ("SQL(BEGIN) exec error:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(BEGIN) exec error:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
if (ret == false) {
if (err_code != NULL) *err_code = EMAIL_ERROR_DB_FAILURE;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "ROLLBACK;", NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {ret = false; },
- ("SQL(ROLLBACK) exec error:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(ROLLBACK) exec error:%d -%s", rc, sqlite3_errmsg(local_db_handle)));
if (ret == false && err_code != NULL)
*err_code = EMAIL_ERROR_DB_FAILURE;
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DROP index %s", indexes->object_name);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
}
indexes++;
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DROP table %s", tables->object_name);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
}
}
INTERNAL_FUNC int emstorage_get_save_name(char *multi_user_name, int account_id, int mail_id, int atch_id,
- char *fname, char *move_buf, char *path_buf, int maxlen, int *err_code)
+ char *fname, char *move_buf, char *path_buf, int maxlen, int *err_code)
{
EM_DEBUG_FUNC_BEGIN_SEC("account_id[%d], mail_id[%d], atch_id[%d], fname[%s], move_buf[%p], path_buf[%p], err_code[%p]", account_id, mail_id, atch_id, fname, move_buf, path_buf, err_code);
EM_PROFILE_BEGIN(profile_emstorage_get_save_name);
if (fname) {
temp_file = EM_SAFE_STRDUP(fname);
- if (temp_file && strstr(temp_file, "/")) {
+ if (temp_file && strstr(temp_file, "/"))
dir_name = emstorage_make_directory_path_from_file_path(temp_file);
- }
}
if (dir_name) {
goto FINISH_OFF;
}
- if (remain_len > MAX_FILENAME) {
+ if (remain_len > MAX_FILENAME)
remain_len = MAX_FILENAME;
- }
modified_name = em_shrink_filename(modified_fname, remain_len);
goto FINISH_OFF;
}
- snprintf(path_buf+EM_SAFE_STRLEN(path_buf), 512 - EM_SAFE_STRLEN(path_buf),"%s%s", DIR_SEPERATOR, modified_name);
+ snprintf(path_buf+EM_SAFE_STRLEN(path_buf), 512 - EM_SAFE_STRLEN(path_buf),
+ "%s%s", DIR_SEPERATOR, modified_name);
EM_DEBUG_LOG(">>>>> Modified fname [%s]", modified_name);
EM_SAFE_FREE(modified_name);
} else {
goto FINISH_OFF;
}
- snprintf(path_buf+EM_SAFE_STRLEN(path_buf), 512 - EM_SAFE_STRLEN(path_buf),"%s%s", DIR_SEPERATOR, modified_name);
+ snprintf(path_buf+EM_SAFE_STRLEN(path_buf), 512 - EM_SAFE_STRLEN(path_buf),
+ "%s%s", DIR_SEPERATOR, modified_name);
EM_DEBUG_LOG(">>>>> Modified fname [%s]", modified_name);
EM_SAFE_FREE(modified_name);
} else {
- snprintf(path_buf+EM_SAFE_STRLEN(path_buf), 512 - EM_SAFE_STRLEN(path_buf),"%s%s", DIR_SEPERATOR, modified_fname);
+ snprintf(path_buf+EM_SAFE_STRLEN(path_buf), 512 - EM_SAFE_STRLEN(path_buf),
+ "%s%s", DIR_SEPERATOR, modified_fname);
}
}
}
EM_DEBUG_LOG_SEC(">>>>> path_buf [%s]", path_buf);
- if (EM_SAFE_STRLEN(multi_user_name) > 0) {
+ if (EM_SAFE_STRLEN(multi_user_name) > 0) {
error = emcore_get_container_path(multi_user_name, &prefix_path);
if (error != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("emcore_get_container_path failed : [%d]", error);
goto FINISH_OFF;
}
- snprintf(move_buf, 512, "%s/%s", prefix_path, path_buf);
- EM_DEBUG_LOG_SEC("move_buf : [%s]", move_buf);
- } else {
- snprintf(move_buf, 512, "%s", path_buf);
- EM_DEBUG_LOG_SEC("move_buf : [%s]", move_buf);
- }
+ snprintf(move_buf, 512, "%s/%s", prefix_path, path_buf);
+ EM_DEBUG_LOG_SEC("move_buf : [%s]", move_buf);
+ } else {
+ snprintf(move_buf, 512, "%s", path_buf);
+ EM_DEBUG_LOG_SEC("move_buf : [%s]", move_buf);
+ }
ret = true;
}
/*
-INTERNAL_FUNC int emstorage_get_dele_name(char *multi_user_name, int account_id, int mail_id, int atch_id, char *fname, char *name_buf, int *err_code)
-{
- EM_DEBUG_FUNC_BEGIN("account_id[%d], mail_id[%d], atch_id[%d], fname[%p], name_buf[%p], err_code[%p]", account_id, mail_id, atch_id, fname, name_buf, err_code);
+ INTERNAL_FUNC int emstorage_get_dele_name(char *multi_user_name, int account_id, int mail_id, int atch_id, char *fname, char *name_buf, int *err_code)
+ {
+ EM_DEBUG_FUNC_BEGIN("account_id[%d], mail_id[%d], atch_id[%d], fname[%p], name_buf[%p], err_code[%p]", account_id, mail_id, atch_id, fname, name_buf, err_code);
- if (!name_buf || account_id < FIRST_ACCOUNT_ID) {
- EM_DEBUG_EXCEPTION(" account_id[%d], mail_id[%d], atch_id[%d], fname[%p], name_buf[%p]", account_id, mail_id, atch_id, fname, name_buf);
- if (err_code != NULL)
- *err_code = EMAIL_ERROR_INVALID_PARAM;
- return false;
- }
+ if (!name_buf || account_id < FIRST_ACCOUNT_ID) {
+ EM_DEBUG_EXCEPTION(" account_id[%d], mail_id[%d], atch_id[%d], fname[%p], name_buf[%p]", account_id, mail_id, atch_id, fname, name_buf);
+ if (err_code != NULL)
+ *err_code = EMAIL_ERROR_INVALID_PARAM;
+ return false;
+ }
- sprintf(name_buf+EM_SAFE_STRLEN(name_buf), "%s%s%d", MAILHOME, DIR_SEPERATOR, account_id);
+ sprintf(name_buf+EM_SAFE_STRLEN(name_buf), "%s%s%d", MAILHOME, DIR_SEPERATOR, account_id);
- if (mail_id > 0)
- sprintf(name_buf+EM_SAFE_STRLEN(name_buf), "%s%d", DIR_SEPERATOR, mail_id);
- else
- goto FINISH_OFF;
+ if (mail_id > 0)
+ sprintf(name_buf+EM_SAFE_STRLEN(name_buf), "%s%d", DIR_SEPERATOR, mail_id);
+ else
+ goto FINISH_OFF;
- if (atch_id > 0)
- sprintf(name_buf+EM_SAFE_STRLEN(name_buf), "%s%d", DIR_SEPERATOR, atch_id);
- else
- goto FINISH_OFF;
+ if (atch_id > 0)
+ sprintf(name_buf+EM_SAFE_STRLEN(name_buf), "%s%d", DIR_SEPERATOR, atch_id);
+ else
+ goto FINISH_OFF;
FINISH_OFF:
- sprintf(name_buf+EM_SAFE_STRLEN(name_buf), ".DELE");
+sprintf(name_buf+EM_SAFE_STRLEN(name_buf), ".DELE");
- EM_DEBUG_FUNC_END();
- return true;
+EM_DEBUG_FUNC_END();
+return true;
}
*/
memset(buf, 0x00, sizeof(buf));
- if (EM_SAFE_STRLEN(multi_user_name) > 0) {
+ if (EM_SAFE_STRLEN(multi_user_name) > 0) {
error = emcore_get_container_path(multi_user_name, &prefix_path);
if (error != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("emcore_get_container_path failed : [%d]", error);
if (account_id >= FIRST_ACCOUNT_ID) {
SNPRINTF(buf, sizeof(buf), "%s%s%s%s%d", prefix_path,
- DIR_SEPERATOR,
- MAIL_HOME,
- DIR_SEPERATOR,
- account_id);
+ DIR_SEPERATOR,
+ MAIL_HOME,
+ DIR_SEPERATOR,
+ account_id);
if (stat(buf, &sbuf) == 0) {
if ((sbuf.st_mode & S_IFMT) != S_IFDIR) {
goto FINISH_OFF;
}
- if (account_id == EML_FOLDER) {
+ if (account_id == EML_FOLDER)
chmod(buf, 0777);
- }
}
}
goto FINISH_OFF;
}
- if (account_id == EML_FOLDER) {
+ if (account_id == EML_FOLDER)
chmod(buf, 0777);
- }
}
}
goto FINISH_OFF;
}
- if (account_id == EML_FOLDER) {
+ if (account_id == EML_FOLDER)
chmod(buf, 0777);
- }
}
}
error = em_open(src_file, O_RDONLY, 0, &fp_src);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION(">>>> Source Fail em_open %s Failed: %d", src_file, error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION(">>>> Source Fail em_open %s Failed: %d", src_file, error);
+ goto FINISH_OFF;
}
error = em_open(dst_file, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, &fp_dst); /*prevent 24474*/
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION(">>>> Destination Fail em_open %s: %d", dst_file, error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION(">>>> Destination Fail em_open %s: %d", dst_file, error);
+ goto FINISH_OFF;
}
memset(buf, 0x00, FILE_MAX_BUFFER_SIZE);
EM_DEBUG_LOG(">>>> Nread Value [ %d ] ", nread);
/**
- * 1.Add check for whether content type is there.
- * 2. If not based on the character set, Append it in File
- **/
+ * 1.Add check for whether content type is there.
+ * 2. If not based on the character set, Append it in File
+ **/
low_char_set = calloc(1, EM_SAFE_STRLEN(char_set) + strlen(" \" /></head>") +1); /*prevent 34359*/
if (low_char_set == NULL) {
/* 1. Create a temporary file name */
if (!_get_temp_file_name(&temp_file_name, &err)) {
- EM_DEBUG_EXCEPTION(" emcore_get_temp_file_name failed - %d", err);
- if (err_code != NULL) *err_code = err;
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION(" emcore_get_temp_file_name failed - %d", err);
+ if (err_code != NULL) *err_code = err;
+ goto FINISH_OFF;
}
EM_DEBUG_LOG_SEC(">>>>>>> TEMP APPEND FILE PATH [ %s ] ", temp_file_name);
EM_DEBUG_LOG_SEC("src_file[%s], dst_file[%s]", src_file, dst_file);
if (strcmp(src_file, dst_file) != 0) {
- EM_DEBUG_LOG("oldpath and newpath are not on the same mounted file system.");
- if (!emstorage_copy_file(src_file, dst_file, sync_status, &error)) {
- EM_DEBUG_EXCEPTION("emstorage_copy_file failed - %d", error);
+ EM_DEBUG_LOG("oldpath and newpath are not on the same mounted file system.");
+ if (!emstorage_copy_file(src_file, dst_file, sync_status, &error)) {
+ EM_DEBUG_EXCEPTION("emstorage_copy_file failed - %d", error);
- struct stat temp_file_stat;
- if (stat(src_file, &temp_file_stat) < 0) {
- EM_DEBUG_EXCEPTION("no src file found [%s] : %s", src_file, EM_STRERROR(errno_buf));
- }
- if (stat(dst_file, &temp_file_stat) < 0)
- EM_DEBUG_EXCEPTION("no dst file found [%s] : %s", dst_file, EM_STRERROR(errno_buf));
+ struct stat temp_file_stat;
+ if (stat(src_file, &temp_file_stat) < 0)
+ EM_DEBUG_EXCEPTION("no src file found [%s] : %s", src_file, EM_STRERROR(errno_buf));
- error = EMAIL_ERROR_FILE_NOT_FOUND;
- goto FINISH_OFF;
+ if (stat(dst_file, &temp_file_stat) < 0)
+ EM_DEBUG_EXCEPTION("no dst file found [%s] : %s", dst_file, EM_STRERROR(errno_buf));
+ error = EMAIL_ERROR_FILE_NOT_FOUND;
+ goto FINISH_OFF;
- }
- remove(src_file);
- EM_DEBUG_LOG("src[%s] removed", src_file);
+
+ }
+ remove(src_file);
+ EM_DEBUG_LOG("src[%s] removed", src_file);
} else {
EM_DEBUG_LOG("src[%s] = dst[%s]", src_file, dst_file);
}
/* faizan.h@samsung.com */
INTERNAL_FUNC int emstorage_update_server_uid(char *multi_user_name,
- int mail_id,
- char *old_server_uid,
- char *new_server_uid,
- int *err_code)
+ int mail_id,
+ char *old_server_uid,
+ char *new_server_uid,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN("new_server_uid[%s], old_server_uid[%s]", new_server_uid, old_server_uid);
int ret = false;
if (mail_id > 0) {
temp_strlen = strlen(conditional_clause_string);
SNPRINTF(conditional_clause_string + temp_strlen, sizeof(conditional_clause_string) - temp_strlen,
- "mail_id = %d ", mail_id);
+ "mail_id = %d ", mail_id);
and_operation = 1;
}
temp_strlen = strlen(conditional_clause_string);
if (!and_operation) {
sqlite3_snprintf(sizeof(conditional_clause_string) - temp_strlen, conditional_clause_string + temp_strlen,
- "server_mail_id = '%q'", old_server_uid);
+ "server_mail_id = '%q'", old_server_uid);
} else {
sqlite3_snprintf(sizeof(conditional_clause_string) - temp_strlen, conditional_clause_string + temp_strlen,
- "and server_mail_id = '%q'", old_server_uid);
+ "and server_mail_id = '%q'", old_server_uid);
}
}
sqlite3_snprintf(sizeof(sql_query_string), sql_query_string,
- "UPDATE mail_tbl SET server_mail_id = '%q' %s", new_server_uid, conditional_clause_string);
+ "UPDATE mail_tbl SET server_mail_id = '%q' %s", new_server_uid, conditional_clause_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_read_mail_uid_tbl SET server_uid=\'%s\', mailbox_id=\'%s\', mailbox_name=\'%s\' WHERE local_uid=%d ", new_server_uid, mbox_name, mbox_name, mail_id);
+ "UPDATE mail_read_mail_uid_tbl SET server_uid=\'%s\', mailbox_id=\'%s\', mailbox_name=\'%s\' WHERE local_uid=%d ", new_server_uid, mbox_name, mbox_name, mail_id);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
memset(sql_query_string, 0x00, sizeof(sql_query_string));
- if (account_id == -1)
- SNPRINTF(sql_select_query_string, sizeof(sql_select_query_string), "SELECT mail_id FROM mail_tbl WHERE flags_seen_field = 0 AND (save_status = %d or save_status = %d)", EMAIL_MAIL_STATUS_NOTI_WAITED, EMAIL_MAIL_STATUS_RECEIVED);
- else
- SNPRINTF(sql_select_query_string, sizeof(sql_select_query_string), "SELECT mail_id FROM mail_tbl WHERE account_id = %d AND flags_seen_field = 0 AND (save_status = %d or save_status = %d)", account_id, EMAIL_MAIL_STATUS_NOTI_WAITED, EMAIL_MAIL_STATUS_RECEIVED);
+ if (account_id == -1) {
+ SNPRINTF(sql_select_query_string, sizeof(sql_select_query_string),
+ "SELECT mail_id FROM mail_tbl WHERE flags_seen_field = 0 AND (save_status = %d or save_status = %d)",
+ EMAIL_MAIL_STATUS_NOTI_WAITED, EMAIL_MAIL_STATUS_RECEIVED);
+ } else {
+ SNPRINTF(sql_select_query_string, sizeof(sql_select_query_string),
+ "SELECT mail_id FROM mail_tbl WHERE account_id = %d AND flags_seen_field = 0 AND (save_status = %d or save_status = %d)",
+ account_id, EMAIL_MAIL_STATUS_NOTI_WAITED, EMAIL_MAIL_STATUS_RECEIVED);
+ }
if (vip_mode) {
- SNPRINTF(temp_query_string, sizeof(temp_query_string), "%s AND tag_id < 0", sql_select_query_string);
+ SNPRINTF(temp_query_string, sizeof(temp_query_string),
+ "%s AND tag_id < 0", sql_select_query_string);
} else {
SNPRINTF(temp_query_string, sizeof(temp_query_string), "%s", sql_select_query_string);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("Count : %d", count);
col_index = 1;
- for (i = 0; i < count; i++) {
+ for (i = 0; i < count; i++)
_get_table_field_data_int(result, &(p_mail_ids[i]), col_index++);
- }
ret = true;
EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
if (ret == true) {
if (mail_ids != NULL)
int setting_system_command(const char *command)
- {
- int pid = 0, status = 0;
+{
+ int pid = 0, status = 0;
char *const environ[] = { NULL };
if (command == 0)
}
do {
- if (waitpid(pid, &status, 0) == -1) {
+ if (waitpid(pid, &status, 0) == -1) {
if (errno != EINTR)
return -1;
} else {
goto FINISH_OFF;
}
- line_from_file = fgets(line, sizeof(line), fp);
+ line_from_file = fgets(line, sizeof(line), fp);
- if (line_from_file == NULL) {
- EM_DEBUG_EXCEPTION("fgets failed");
+ if (line_from_file == NULL) {
+ EM_DEBUG_EXCEPTION("fgets failed");
error = EMAIL_ERROR_SYSTEM_FAILURE;
goto FINISH_OFF;
- }
- total_diskusage = strtoul(line, NULL, 10);
-
- memset(syscmd, 0, sizeof(syscmd));
- SNPRINTF(syscmd, sizeof(syscmd), "rm -f %s", SETTING_MEMORY_TEMP_FILE_PATH);
- if (setting_system_command(syscmd) == -1) {
- EM_DEBUG_EXCEPTION("emstorage_mail_get_total_diskspace_usage : [Setting > Memory] System Command [%s] is failed", syscmd);
- error = EMAIL_ERROR_SYSTEM_FAILURE;
+ }
+ total_diskusage = strtoul(line, NULL, 10);
+
+ memset(syscmd, 0, sizeof(syscmd));
+ SNPRINTF(syscmd, sizeof(syscmd), "rm -f %s", SETTING_MEMORY_TEMP_FILE_PATH);
+ if (setting_system_command(syscmd) == -1) {
+ EM_DEBUG_EXCEPTION("emstorage_mail_get_total_diskspace_usage : [Setting > Memory] System Command [%s] is failed", syscmd);
+ error = EMAIL_ERROR_SYSTEM_FAILURE;
goto FINISH_OFF;
- }
+ }
- EM_DEBUG_LOG("[Setting > Memory] @@@@@ Size of Directory [%s] is %ld KB", EMAIL_PATH, total_diskusage);
+ EM_DEBUG_LOG("[Setting > Memory] @@@@@ Size of Directory [%s] is %ld KB", EMAIL_PATH, total_diskusage);
ret = true;
FINISH_OFF:
- if (err_code != NULL)
+ if (err_code != NULL)
*err_code = error;
if (ret)
else
*total_usage = 0;
- if (fp) fclose(fp); /* prevent 32730 */
+ if (fp) fclose(fp); /* prevent 32730 */
EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
char sql_query_string[QUERY_SIZE] = {0, };
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_tbl VALUES "
- "(?" /* mail_id */
- ", ?" /* account_id */
- ", ?" /* mail_size */
- ", ?" /* server_mail_status */
- ", ?" /* server_mailbox_name */
- ", ?" /* server_mail_id */
- ", ?" /* reference_mail_id */
- ", ?" /* full_address_from */
- ", ?" /* full_address_reply */
- ", ?" /* full_address_to */
- ", ?" /* full_address_cc */
- ", ?" /* full_address_bcc */
- ", ?" /* full_address_return */
- ", ?" /* subject */
- ", ?" /* body_download_status */
- ", ?" /* file_path_plain */
- ", ?" /* file_path_html */
- ", ?" /* date_time */
- ", ?" /* flags_seen_field */
- ", ?" /* flags_deleted_field */
- ", ?" /* flags_flagged_field */
- ", ?" /* flags_answered_field */
- ", ?" /* flags_recent_field */
- ", ?" /* flags_draft_field */
- ", ?" /* flags_forwarded_field */
- ", ?" /* DRM_status */
- ", ?" /* priority */
- ", ?" /* save_status */
- ", ?" /* lock_status */
- ", ?" /* message_id */
- ", ?" /* report_status */
- ", ?" /* email_address_sender */
- ", ?" /* email_address_recipient */
- ", ?" /* attachment_count */
- ", ?" /* inline_content_count */
- ", ?" /* preview_text */
- ", ?" /* thread_id */
- ", ?" /* mailbox_type */
- ", ?" /* alias_sender */
- ", ?" /* alias_recipient */
- ", ?" /* thread_item_count */
- ", ?" /* meeting_request_status */
- ", ?" /* message_class */
- ", ?" /* digest_type */
- ", ?" /* smime_type */
- ", ?" /* scheduled_sending_time */
- ", ?" /* remaining_resend_times */
- ", ?" /* tag_id */
- ", ?" /* replied_time */
- ", ?" /* forwarded_time */
- ", ?" /* default_charset */
- ", ?" /* eas_data_length */
- ", ?" /* eas_data */
- ")");
+ "INSERT INTO mail_tbl VALUES "
+ "(?" /* mail_id */
+ ", ?" /* account_id */
+ ", ?" /* mail_size */
+ ", ?" /* server_mail_status */
+ ", ?" /* server_mailbox_name */
+ ", ?" /* server_mail_id */
+ ", ?" /* reference_mail_id */
+ ", ?" /* full_address_from */
+ ", ?" /* full_address_reply */
+ ", ?" /* full_address_to */
+ ", ?" /* full_address_cc */
+ ", ?" /* full_address_bcc */
+ ", ?" /* full_address_return */
+ ", ?" /* subject */
+ ", ?" /* body_download_status */
+ ", ?" /* file_path_plain */
+ ", ?" /* file_path_html */
+ ", ?" /* date_time */
+ ", ?" /* flags_seen_field */
+ ", ?" /* flags_deleted_field */
+ ", ?" /* flags_flagged_field */
+ ", ?" /* flags_answered_field */
+ ", ?" /* flags_recent_field */
+ ", ?" /* flags_draft_field */
+ ", ?" /* flags_forwarded_field */
+ ", ?" /* DRM_status */
+ ", ?" /* priority */
+ ", ?" /* save_status */
+ ", ?" /* lock_status */
+ ", ?" /* message_id */
+ ", ?" /* report_status */
+ ", ?" /* email_address_sender */
+ ", ?" /* email_address_recipient */
+ ", ?" /* attachment_count */
+ ", ?" /* inline_content_count */
+ ", ?" /* preview_text */
+ ", ?" /* thread_id */
+ ", ?" /* mailbox_type */
+ ", ?" /* alias_sender */
+ ", ?" /* alias_recipient */
+ ", ?" /* thread_item_count */
+ ", ?" /* meeting_request_status */
+ ", ?" /* message_class */
+ ", ?" /* digest_type */
+ ", ?" /* smime_type */
+ ", ?" /* scheduled_sending_time */
+ ", ?" /* remaining_resend_times */
+ ", ?" /* tag_id */
+ ", ?" /* replied_time */
+ ", ?" /* forwarded_time */
+ ", ?" /* default_charset */
+ ", ?" /* eas_data_length */
+ ", ?" /* eas_data */
+ ")");
int transaction = true;
sqlite3 *local_db_handle = emstorage_get_db_connection(multi_user_name);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, MAIL_ID_IDX_IN_MAIL_TBL, mail_id);
_bind_stmt_field_data_int(hStmt, ACCOUNT_ID_IDX_IN_MAIL_TBL, account_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
FINISH_OFF:
#define STRIPPED_SUBJECT_BUFFER_SIZE 4086
INTERNAL_FUNC int emstorage_get_thread_id_of_thread_mails(char *multi_user_name,
- emstorage_mail_tbl_t *mail_tbl,
- int *thread_id,
- int *result_latest_mail_id_in_thread,
- int *thread_item_count)
+ emstorage_mail_tbl_t *mail_tbl,
+ int *thread_id,
+ int *result_latest_mail_id_in_thread,
+ int *thread_item_count)
{
EM_DEBUG_FUNC_BEGIN("mail_tbl [%p], thread_id [%p], "
- "result_latest_mail_id_in_thread [%p], thread_item_count [%p]",
- mail_tbl, thread_id, result_latest_mail_id_in_thread, thread_item_count);
+ "result_latest_mail_id_in_thread [%p], thread_item_count [%p]",
+ mail_tbl, thread_id, result_latest_mail_id_in_thread, thread_item_count);
EM_PROFILE_BEGIN(profile_emstorage_get_thread_id_of_thread_mails);
int rc = 0, query_size = 0, query_size_account = 0;
int col_index = 4;
int temp_thread_id = -1;
char *sql_format = "SELECT mail_id, thread_id, date_time, subject "
- "FROM mail_tbl WHERE subject like \'%%%q\' AND mailbox_id = %d";
+ "FROM mail_tbl WHERE subject like \'%%%q\' AND mailbox_id = %d";
char *sql_format_account = " AND account_id = %d ";
char *sql_format_order_by = " ORDER BY thread_id, date_time DESC ";
char **result = NULL;
}
if (em_find_pos_stripped_subject_for_thread_view(subject,
- stripped_subject,
- STRIPPED_SUBJECT_BUFFER_SIZE) != EMAIL_ERROR_NONE) {
+ stripped_subject,
+ STRIPPED_SUBJECT_BUFFER_SIZE) != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("em_find_pos_stripped_subject_for_thread_view is failed");
err_code = EMAIL_ERROR_UNKNOWN;
result_thread_id = -1;
}
EM_DEBUG_LOG_SEC("em_find_pos_stripped_subject_for_thread_view returns[len = %d] = %s",
- EM_SAFE_STRLEN(stripped_subject), stripped_subject);
+ EM_SAFE_STRLEN(stripped_subject), stripped_subject);
- if (account_id > 0) {
+ if (account_id > 0) {
query_size_account = 3 + EM_SAFE_STRLEN(sql_format_account);
sql_account = malloc(query_size_account);
if (sql_account == NULL) {
EM_DEBUG_LOG_SEC("Query : %s", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL),
- rc);
+ rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {err_code = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("Result rows count : %d", count);
temp_thread_id = result_thread_id;
if (em_find_pos_stripped_subject_for_thread_view(p_subject,
- stripped_subject2,
- STRIPPED_SUBJECT_BUFFER_SIZE) != EMAIL_ERROR_NONE) {
+ stripped_subject2,
+ STRIPPED_SUBJECT_BUFFER_SIZE) != EMAIL_ERROR_NONE) {
EM_DEBUG_EXCEPTION("em_find_pos_stripped_subject_for_thread_view is failed");
err_code = EMAIL_ERROR_UNKNOWN;
result_thread_id = -1;
if (search_thread) {
EM_DEBUG_LOG("latest_mail_id_in_thread [%d], mail_id [%d]",
- latest_mail_id_in_thread, mail_tbl->mail_id);
+ latest_mail_id_in_thread, mail_tbl->mail_id);
break;
} else {
result_thread_id = -1;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {err_code = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("Result rows count : %d", count);
if (count == 0)
result_thread_id = -1;
- else {
+ else
_get_table_field_data_int(result, &result_thread_id, 1);
- }
FINISH_OFF:
*thread_id = result_thread_id;
INTERNAL_FUNC int emstorage_get_sender_list(char *multi_user_name, int account_id, int mailbox_id, int search_type, const char *search_value, email_sort_type_t sorting, email_sender_list_t** sender_list, int *sender_count, int *err_code)
{
EM_DEBUG_FUNC_BEGIN_SEC("account_id [%d], mailbox_id [%d], search_type [%d], search_value [%p], sorting [%d], sender_list[%p], sender_count[%p] err_code[%p]"
- , account_id , mailbox_id , search_type , search_value , sorting , sender_list, sender_count, err_code);
+ , account_id , mailbox_id , search_type , search_value , sorting , sender_list, sender_count, err_code);
if ((!sender_list) || (!sender_count)) {
EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
sqlite3 *local_db_handle = emstorage_get_db_connection(multi_user_name);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "SELECT email_address_sender, alias_sender, COUNT(email_address_sender), SUM(flags_seen_field = 1) "
- "FROM mail_tbl ");
+ "SELECT email_address_sender, alias_sender, COUNT(email_address_sender), SUM(flags_seen_field = 1) "
+ "FROM mail_tbl ");
/* mailbox_id */
if (mailbox_id)
if (search_value) {
switch (search_type) {
- case EMAIL_SEARCH_FILTER_SUBJECT:
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
+ case EMAIL_SEARCH_FILTER_SUBJECT:
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
" AND (UPPER(subject) LIKE UPPER(\'%%%%%s%%%%\')) ", search_value);
- break;
- case EMAIL_SEARCH_FILTER_SENDER:
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
+ break;
+ case EMAIL_SEARCH_FILTER_SENDER:
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
" AND ((UPPER(full_address_from) LIKE UPPER(\'%%%%%s%%%%\')) "
") ", search_value);
- break;
- case EMAIL_SEARCH_FILTER_RECIPIENT:
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
+ break;
+ case EMAIL_SEARCH_FILTER_RECIPIENT:
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
" AND ((UPPER(full_address_to) LIKE UPPER(\'%%%%%s%%%%\')) "
" OR (UPPER(full_address_cc) LIKE UPPER(\'%%%%%s%%%%\')) "
" OR (UPPER(full_address_bcc) LIKE UPPER(\'%%%%%s%%%%\')) "
") ", search_value, search_value, search_value);
- break;
- case EMAIL_SEARCH_FILTER_ALL:
- SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
+ break;
+ case EMAIL_SEARCH_FILTER_ALL:
+ SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), QUERY_SIZE-(EM_SAFE_STRLEN(sql_query_string)+1),
" AND (UPPER(subject) LIKE UPPER(\'%%%%%s%%%%\') "
- " OR (((UPPER(full_address_from) LIKE UPPER(\'%%%%%s%%%%\')) "
+ " OR (((UPPER(full_address_from) LIKE UPPER(\'%%%%%s%%%%\')) "
" OR (UPPER(full_address_to) LIKE UPPER(\'%%%%%s%%%%\')) "
" OR (UPPER(full_address_cc) LIKE UPPER(\'%%%%%s%%%%\')) "
" OR (UPPER(full_address_bcc) LIKE UPPER(\'%%%%%s%%%%\')) "
" ) "
" )"
")", search_value, search_value, search_value, search_value, search_value);
- break;
+ break;
}
}
/* sorting option is not available now. The order of sender list is ascending order by display name */
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1),
- "GROUP BY email_address_sender "
- "ORDER BY UPPER(alias_sender) ");
+ "GROUP BY email_address_sender "
+ "ORDER BY UPPER(alias_sender) ");
EM_DEBUG_LOG_SEC("query[%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("Count of Sender [%d]", count);
/* delete GLists */
for (i = EMAIL_ADDRESS_TYPE_FROM; i <= EMAIL_ADDRESS_TYPE_BCC; i++) {
switch (i) {
- case EMAIL_ADDRESS_TYPE_FROM:
- list = (*address_info_list)->from;
- break;
- case EMAIL_ADDRESS_TYPE_TO:
- list = (*address_info_list)->to;
- break;
- case EMAIL_ADDRESS_TYPE_CC:
- list = (*address_info_list)->cc;
- break;
- case EMAIL_ADDRESS_TYPE_BCC:
- list = (*address_info_list)->bcc;
- break;
+ case EMAIL_ADDRESS_TYPE_FROM:
+ list = (*address_info_list)->from;
+ break;
+ case EMAIL_ADDRESS_TYPE_TO:
+ list = (*address_info_list)->to;
+ break;
+ case EMAIL_ADDRESS_TYPE_CC:
+ list = (*address_info_list)->cc;
+ break;
+ case EMAIL_ADDRESS_TYPE_BCC:
+ list = (*address_info_list)->bcc;
+ break;
}
/* delete dynamic-allocated memory for each item */
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
memset(sql_query_string, 0x00, sizeof(sql_query_string));
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_partial_body_activity_tbl VALUES "
- "("
- "? " /* Account ID */
- ",?" /* Local Mail ID */
- ",?" /* Server mail ID */
- ",?" /* Activity ID */
- ",?" /* Activity type*/
- ",?" /* Mailbox ID*/
- ",?" /* Mailbox name*/
- ",?" /* Multi User Name */
- ") ");
+ "INSERT INTO mail_partial_body_activity_tbl VALUES "
+ "("
+ "? " /* Account ID */
+ ",?" /* Local Mail ID */
+ ",?" /* Server mail ID */
+ ",?" /* Activity ID */
+ ",?" /* Activity type*/
+ ",?" /* Mailbox ID*/
+ ",?" /* Mailbox name*/
+ ",?" /* Multi User Name */
+ ") ");
char *sql = "SELECT max(rowid) FROM mail_partial_body_activity_tbl;";
char **result = NULL;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1]) rc = 1;
else rc = atoi(result[1])+1;
*activity_id = local_activity->activity_id = rc;
EM_DEBUG_LOG_SEC(">>>>> ACTIVITY ID [ %d ], MAIL ID [ %d ], ACTIVITY TYPE [ %d ], SERVER MAIL ID [ %lu ]", \
- local_activity->activity_id, local_activity->mail_id, local_activity->activity_type, local_activity->server_mail_id);
+ local_activity->activity_id, local_activity->mail_id, local_activity->activity_type, local_activity->server_mail_id);
if (local_activity->mailbox_id)
EM_DEBUG_LOG(" MAILBOX ID [ %d ]", local_activity->mailbox_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, i++, local_activity->account_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
ret = true;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
mbox_list = (int *)em_malloc(sizeof(int) * (*count));
if (NULL == mbox_list) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
/* EM_DEBUG_LOG("In emstorage_get_pdb_mailbox_list() loop, After sqlite3_step(), , i = %d, rc = %d.", i, rc); */
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_LOG("mbox_list %d", mbox_list[i]);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG("Before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (NULL == (result_account_list = (int *)em_malloc(sizeof(int) * (*count)))) {
EM_DEBUG_EXCEPTION(" em_mallocfailed...");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_LOG("account id -> %d", result_account_list[i]);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG(" Bbefore sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (!(event_list = (email_event_partial_body_thd*)em_malloc(sizeof(email_event_partial_body_thd) * (*count)))) {
EM_DEBUG_EXCEPTION("Malloc failed");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
/* EM_DEBUG_LOG("In emstorage_get_pbd_activity_data() loop, After sqlite3_step(), , i = %d, rc = %d.", i, rc); */
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
event_list[i].event_type = 0;
}
FINISH_OFF:
if (true == ret)
- *event_start = event_list;
+ *event_start = event_list;
else {
for (i = 0; i < (*count); i++)
emcore_free_partial_body_thd_event(event_list, NULL);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
/* validate activity existence */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
_get_stmt_field_data_int(hStmt, activity_count, 0);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG_DEV(" before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
_get_stmt_field_data_int(hStmt, activity_count, 0);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
}
/*Himanshu[h.gahlaut]-> Added below API to update mail_partial_body_activity_tbl
-if a mail is moved before its partial body is downloaded.Currently not used but should be used if mail move from server is enabled*/
+ if a mail is moved before its partial body is downloaded.Currently not used but should be used if mail move from server is enabled*/
INTERNAL_FUNC int emstorage_update_pbd_activity(char *multi_user_name, char *old_server_uid, char *new_server_uid, char *mbox_name, int *err_code)
{
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
memset(sql_query_string, 0x00, sizeof(sql_query_string));
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_partial_body_activity_tbl SET server_mail_id = %s , mailbox_name=\'%s\' WHERE server_mail_id = %s ", new_server_uid, mbox_name, old_server_uid);
+ "UPDATE mail_partial_body_activity_tbl SET server_mail_id = %s , mailbox_name=\'%s\' WHERE server_mail_id = %s ", new_server_uid, mbox_name, old_server_uid);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
- if (rc == 0) {
+ if (rc == 0)
EM_DEBUG_LOG("No matching found in mail_partial_body_activity_tbl");
- }
ret = true;
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_read_mail_uid_tbl SET server_uid=\'%s\' , mailbox_name=\'%s\' WHERE server_uid=%s ", new_server_uid, mbox_name, old_server_uid);
+ "UPDATE mail_read_mail_uid_tbl SET server_uid=\'%s\' , mailbox_name=\'%s\' WHERE server_uid=%s ", new_server_uid, mbox_name, old_server_uid);
EM_DEBUG_LOG_SEC(" Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
ret = true;
FINISH_OFF:
- EMSTORAGE_FINISH_WRITE_TRANSACTION(multi_user_name, transaction, ret, error);
+ EMSTORAGE_FINISH_WRITE_TRANSACTION(multi_user_name, transaction, ret, error);
- if (err_code != NULL)
+ if (err_code != NULL)
*err_code = error;
EM_DEBUG_FUNC_END("ret [%d]", ret);
* @fn emstorage_get_id_set_from_mail_ids(int mail_ids[], int mail_id_count, email_id_set_t** server_uids, int *id_set_count, int *err_code);
* Prepare an array of mail_id and corresponding server mail id.
*
- *@author h.gahlaut@samsung.com
+ * @author h.gahlaut@samsung.com
* @param[in] mail_ids Specifies the comma separated string of mail_ids. Maximaum size of string should be less than or equal to (QUERY_SIZE - 88)
* where 88 is the length of fixed keywords including ending null character in the QUERY to be formed
* @param[out] idset Returns the array of mail_id and corresponding server_mail_id sorted by server_mail_ids
* @param[out] id_set_count Returns the no. of cells in idset array i.e. no. of sets of mail_ids and server_mail_ids
* @param[out] err_code Returns the error code.
- * @remarks An Example of Query to be exexuted in this API:
+ * @remarks An Example of Query to be exexuted in this API:
* SELECT local_uid, s_uid from mail_read_mail_uid_tbl where local_uid in (12, 13, 56, 78);
* @return This function returns true on success or false on failure.
*/
INTERNAL_FUNC int emstorage_get_id_set_from_mail_ids(char *multi_user_name,
- char *mail_ids,
- email_id_set_t** idset,
- int *id_set_count,
- int *err_code)
+ char *mail_ids,
+ email_id_set_t** idset,
+ int *id_set_count,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
EM_PROFILE_BEGIN(EmStorageGetIdSetFromMailIds);
if (NULL == mail_ids || NULL == idset || NULL == id_set_count) {
EM_DEBUG_EXCEPTION("Invalid Parameters mail_ids[%p] idset[%p] id_set_count [%p]",
- mail_ids, idset, id_set_count);
+ mail_ids, idset, id_set_count);
if (err_code != NULL)
*err_code = EMAIL_ERROR_INVALID_PARAM;
return false;
/* rc = sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL); */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result);
- goto FINISH_OFF; }, ("SQL(%s) sqlite3_get_table fail:%d -%s",
- sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ goto FINISH_OFF; }, ("SQL(%s) sqlite3_get_table fail:%d -%s",
+ sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG(" Count of mails [%d ]", count);
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DROP TRIGGER triggerDelete;");
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DROP TRIGGER triggerInsert;");
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DROP TRIGGER triggerUpdate;");
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_tbl SET tag_id=%d WHERE tag_id=%d ", new_filter_id, old_filter_id);
+ "UPDATE mail_tbl SET tag_id=%d WHERE tag_id=%d ", new_filter_id, old_filter_id);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
/* rc = sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL); */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("Count of mails [%d]", count);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
#ifdef __FEATURE_BODY_SEARCH__
EM_DEBUG_LOG_SEC("query[%s]", sql_query_string);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
ret = true;
if (!meeting_req || meeting_req->mail_id <= 0) {
if (meeting_req)
- EM_DEBUG_EXCEPTION("mail_id[%]d", meeting_req->mail_id);
+ EM_DEBUG_EXCEPTION("mail_id[%]d", meeting_req->mail_id);
if (err_code != NULL)
*err_code = EMAIL_ERROR_INVALID_PARAM;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, error);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_meeting_tbl VALUES "
- "(?" /* mail_id */
- ", ?" /* account_id */
- ", ?" /* mailbox_id */
- ", ?" /* meeting_response */
- ", ?" /* start_time */
- ", ?" /* end_time */
- ", ?" /* location */
- ", ?" /* global_object_id */
- ", ?" /* offset */
- ", ?" /* standard_name */
- ", ?" /* standard_time_start_date */
- ", ?" /* standard_biad */
- ", ?" /* daylight_name */
- ", ?" /* daylight_time_start_date */
- ", ?" /* daylight_bias */
- ")");
+ "INSERT INTO mail_meeting_tbl VALUES "
+ "(?" /* mail_id */
+ ", ?" /* account_id */
+ ", ?" /* mailbox_id */
+ ", ?" /* meeting_response */
+ ", ?" /* start_time */
+ ", ?" /* end_time */
+ ", ?" /* location */
+ ", ?" /* global_object_id */
+ ", ?" /* offset */
+ ", ?" /* standard_name */
+ ", ?" /* standard_time_start_date */
+ ", ?" /* standard_biad */
+ ", ?" /* daylight_name */
+ ", ?" /* daylight_time_start_date */
+ ", ?" /* daylight_bias */
+ ")");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
if (rc != SQLITE_OK) {
col_index = 0;
/*
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->mail_id[%d]", meeting_req->mail_id);
- EM_DEBUG_LOG_SEC(">>>>> account_id[%d]", account_id);
- EM_DEBUG_LOG_SEC(">>>>> mailbox_name[%s]", mailbox_name);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->meeting_response[%d]", meeting_req->meeting_response);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->start_time[%s]", asctime(&(meeting_req->start_time)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->end_time[%s]", asctime(&(meeting_req->end_time)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->location[%s]", meeting_req->location);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->global_object_id[%s]", meeting_req->global_object_id);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.offset_from_GMT[%d]", meeting_req->time_zone.offset_from_GMT);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_name[%s]", meeting_req->time_zone.standard_name);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_time_start_date[%s]", asctime(&(meeting_req->time_zone.standard_time_start_date)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_bias[%d]", meeting_req->time_zone.standard_bias);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_name[%s]", meeting_req->time_zone.daylight_name);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_time_start_date[%s]", asctime(&(meeting_req->time_zone.daylight_time_start_date)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_bias[%d]", meeting_req->time_zone.daylight_bias);
- */
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->mail_id[%d]", meeting_req->mail_id);
+ EM_DEBUG_LOG_SEC(">>>>> account_id[%d]", account_id);
+ EM_DEBUG_LOG_SEC(">>>>> mailbox_name[%s]", mailbox_name);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->meeting_response[%d]", meeting_req->meeting_response);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->start_time[%s]", asctime(&(meeting_req->start_time)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->end_time[%s]", asctime(&(meeting_req->end_time)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->location[%s]", meeting_req->location);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->global_object_id[%s]", meeting_req->global_object_id);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.offset_from_GMT[%d]", meeting_req->time_zone.offset_from_GMT);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_name[%s]", meeting_req->time_zone.standard_name);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_time_start_date[%s]", asctime(&(meeting_req->time_zone.standard_time_start_date)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_bias[%d]", meeting_req->time_zone.standard_bias);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_name[%s]", meeting_req->time_zone.daylight_name);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_time_start_date[%s]", asctime(&(meeting_req->time_zone.daylight_time_start_date)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_bias[%d]", meeting_req->time_zone.daylight_bias);
+ */
_bind_stmt_field_data_int(hStmt, col_index++, meeting_req->mail_id);
_bind_stmt_field_data_int(hStmt, col_index++, account_id);
_bind_stmt_field_data_int(hStmt, col_index++, input_mailbox_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
if (!count) {
EM_DEBUG_EXCEPTION("No meeting_request found...");
EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
EM_DEBUG_FUNC_END("err [%d]", err);
return err;
memset(sql_query_string, 0x00, sizeof(sql_query_string));
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_meeting_tbl "
- "SET "
- /* " account_id = ?, " // not update here, this can be changed when move or copy */
- /* " mailbox_name = ?, " // not update here, this can be changed when move or copy */
- " meeting_response = ?, "
- " start_time = ?, "
- " end_time = ?, "
- " location = ?, "
- " global_object_id = ?, "
- " offset = ?, "
- " standard_name = ?, "
- " standard_time_start_date = ?, "
- " standard_bias = ?, "
- " daylight_name = ?, "
- " daylight_time_start_date = ?, "
- " daylight_bias = ? "
- "WHERE mail_id = %d",
- meeting_req->mail_id);
+ "UPDATE mail_meeting_tbl "
+ "SET "
+ /* " account_id = ?, " // not update here, this can be changed when move or copy */
+ /* " mailbox_name = ?, " // not update here, this can be changed when move or copy */
+ " meeting_response = ?, "
+ " start_time = ?, "
+ " end_time = ?, "
+ " location = ?, "
+ " global_object_id = ?, "
+ " offset = ?, "
+ " standard_name = ?, "
+ " standard_time_start_date = ?, "
+ " standard_bias = ?, "
+ " daylight_name = ?, "
+ " daylight_time_start_date = ?, "
+ " daylight_bias = ? "
+ "WHERE mail_id = %d",
+ meeting_req->mail_id);
EM_DEBUG_LOG_SEC("SQL(%s)", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
-/*
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->mail_id[%d]", meeting_req->mail_id);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->meeting_response[%d]", meeting_req->meeting_response);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->start_time[%s]", asctime(&(meeting_req->start_time)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->end_time[%s]", asctime(&(meeting_req->end_time)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->location[%s]", meeting_req->location);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->global_object_id[%s]", meeting_req->global_object_id);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.offset_from_GMT[%d]", meeting_req->time_zone.offset_from_GMT);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_name[%s]", meeting_req->time_zone.standard_name);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_time_start_date[%s]", asctime(&(meeting_req->time_zone.standard_time_start_date)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_bias[%d]", meeting_req->time_zone.standard_bias);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_name[%s]", meeting_req->time_zone.daylight_name);
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_time_start_date[%s]", asctime(&(meeting_req->time_zone.daylight_time_start_date)));
- EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_bias[%d]", meeting_req->time_zone.daylight_bias);
-*/
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ /*
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->mail_id[%d]", meeting_req->mail_id);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->meeting_response[%d]", meeting_req->meeting_response);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->start_time[%s]", asctime(&(meeting_req->start_time)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->end_time[%s]", asctime(&(meeting_req->end_time)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->location[%s]", meeting_req->location);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->global_object_id[%s]", meeting_req->global_object_id);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.offset_from_GMT[%d]", meeting_req->time_zone.offset_from_GMT);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_name[%s]", meeting_req->time_zone.standard_name);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_time_start_date[%s]", asctime(&(meeting_req->time_zone.standard_time_start_date)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.standard_bias[%d]", meeting_req->time_zone.standard_bias);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_name[%s]", meeting_req->time_zone.daylight_name);
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_time_start_date[%s]", asctime(&(meeting_req->time_zone.daylight_time_start_date)));
+ EM_DEBUG_LOG_SEC(">>>>> meeting_req->time_zone.daylight_bias[%d]", meeting_req->time_zone.daylight_bias);
+ */
int col_index = 0;
_bind_stmt_field_data_int(hStmt, col_index++, meeting_req->meeting_response);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
ret = true;
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
ret = true;
EM_SAFE_FREE(meeting_req->location);
EM_SAFE_FREE(meeting_req->global_object_id);
- EM_DEBUG_FUNC_END();
+ EM_DEBUG_FUNC_END();
}
INTERNAL_FUNC int emstorage_get_overflowed_mail_id_list(char *multi_user_name, int account_id, int input_mailbox_id, int mail_slot_size, int **mail_id_list, int *mail_id_count, int transaction, int *err_code)
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &result_mail_id_count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
if (!result_mail_id_count) {
EM_DEBUG_LOG("No mail found...");
/* rc = sqlite3_get_table(local_db_handle, sql_query_string, &result, &result_count, 0, NULL); */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &result_count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
if (!result_count) {
EM_DEBUG_LOG("No mail found...");
}
INTERNAL_FUNC int emstorage_update_latest_thread_mail(char *multi_user_name,
- int account_id,
- int mailbox_id,
- int mailbox_type,
- int thread_id,
- int *updated_thread_id,
- int latest_mail_id,
- int thread_item_count,
- int noti_type,
- int transaction,
- int *err_code)
+ int account_id,
+ int mailbox_id,
+ int mailbox_type,
+ int thread_id,
+ int *updated_thread_id,
+ int latest_mail_id,
+ int thread_item_count,
+ int noti_type,
+ int transaction,
+ int *err_code)
{
EM_DEBUG_FUNC_BEGIN("account_id [%d], mailbox_id [%d], thread_id[%d], updated_thread_id[%p], "
- "latest_mail_id [%d], thread_item_count[%d], err_code[%p]",
- account_id, mailbox_id, thread_id, updated_thread_id,
- latest_mail_id, thread_item_count, err_code);
+ "latest_mail_id [%d], thread_item_count[%d], err_code[%p]",
+ account_id, mailbox_id, thread_id, updated_thread_id,
+ latest_mail_id, thread_item_count, err_code);
int rc = -1, ret = false;
int err = EMAIL_ERROR_NONE;
/* rc = sqlite3_get_table(local_db_handle, sql_query_string, &result, &result_count, 0, NULL); */
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &result_count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG("result_count[%d]", result_count);
if (result_count == 0) {
EM_DEBUG_LOG("No mail found...");
EM_DEBUG_LOG_SEC("query[%s]", sql_query_string);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
} else if (thread_id != latest_mail_id) {
/* Initialize the thread id */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "UPDATE mail_tbl SET thread_item_count = 0, thread_id = %d WHERE account_id = %d AND mailbox_id = %d AND thread_id = %d", latest_mail_id, account_id, mailbox_id, thread_id);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
/* update the thread item count */
SNPRINTF(sql_query_string, sizeof(sql_query_string), "UPDATE mail_tbl SET thread_item_count = %d WHERE account_id = %d AND mail_id = %d ", thread_item_count, account_id, latest_mail_id);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
} else {
memset(sql_query_string, 0, QUERY_SIZE);
EM_DEBUG_LOG_SEC("query[%s]", sql_query_string);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
}
ret = true;
#ifdef __FEATURE_LOCAL_ACTIVITY__
/**
- * emstorage_add_activity - Add Email Local activity during OFFLINE mode
- *
- */
+ * emstorage_add_activity - Add Email Local activity during OFFLINE mode
+ *
+ */
INTERNAL_FUNC int emstorage_add_activity(emstorage_activity_tbl_t* local_activity, int transaction, int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG_SEC(">>>> SQL STMT [ %s ] ", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
ret = true;
}
/**
- * emstorage_get_activity - Get the Local activity Information
- *
- *
- */
+ * emstorage_get_activity - Get the Local activity Information
+ *
+ *
+ */
INTERNAL_FUNC int emstorage_get_activity(int account_id, int activityid, emstorage_activity_tbl_t** activity_list, int *select_num, int transaction, int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
memset(sql_query_string, 0x00, sizeof(sql_query_string));
if (activityid == ALL_ACTIVITIES) {
- SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT * FROM mail_local_activity_tbl WHERE account_id = %d order by activity_id", account_id);
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "SELECT * FROM mail_local_activity_tbl WHERE account_id = %d order by activity_id", account_id);
} else {
- SNPRINTF(sql_query_string, sizeof(sql_query_string), "SELECT * FROM mail_local_activity_tbl WHERE account_id = %d AND activity_id = %d ", account_id, activityid);
+ SNPRINTF(sql_query_string, sizeof(sql_query_string),
+ "SELECT * FROM mail_local_activity_tbl WHERE account_id = %d AND activity_id = %d ", account_id, activityid);
}
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
col_index = 7;
/* rc = sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL); n EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc); */
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1])
rc = 1;
ret = true;
- FINISH_OFF:
+FINISH_OFF:
if (err_code)
*err_code = err;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
col_index = 1;
EMSTORAGE_FINISH_READ_TRANSACTION(transaction);
- if (err_code != NULL) {
+ if (err_code != NULL)
*err_code = error;
- }
EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
ret = true;
- FINISH_OFF:
+FINISH_OFF:
- if (NULL != error_code) {
+ if (NULL != error_code)
*error_code = error;
- }
EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
if (local_activity->account_id) {
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1),
- " WHERE account_id = %d ", local_activity->account_id);
+ " WHERE account_id = %d ", local_activity->account_id);
query_and = 1;
query_where = 1;
}
if (local_activity->server_mailid) {
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1),
- " %s %s server_mailid = '%s' ", query_where ? "" : "WHERE", query_and ? "AND" : "", local_activity->server_mailid);
+ " %s %s server_mailid = '%s' ", query_where ? "" : "WHERE", query_and ? "AND" : "", local_activity->server_mailid);
query_and = 1;
query_where = 1;
}
EM_DEBUG_LOG(">>>> MAIL ID [ %d ] , ACTIVITY TYPE [%d ]", local_activity->mail_id, local_activity->activity_type);
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1),
- " %s %s mail_id = %d ", query_where ? "" : "WHERE", query_and ? "AND" : "", local_activity->mail_id);
+ " %s %s mail_id = %d ", query_where ? "" : "WHERE", query_and ? "AND" : "", local_activity->mail_id);
query_and = 1;
query_where = 1;
if (local_activity->activity_type > 0) {
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1),
- " %s %s activity_type = %d ", query_where ? "" : "WHERE", query_and ? "AND" : "" , local_activity->activity_type);
+ " %s %s activity_type = %d ", query_where ? "" : "WHERE", query_and ? "AND" : "" , local_activity->activity_type);
}
if (local_activity->activity_id > 0) {
SNPRINTF(sql_query_string + EM_SAFE_STRLEN(sql_query_string), sizeof(sql_query_string)-(EM_SAFE_STRLEN(sql_query_string)+1),
- " %s %s activity_id = %d ", query_where ? "" : "WHERE", query_and ? "AND" : "" , local_activity->activity_id);
+ " %s %s activity_id = %d ", query_where ? "" : "WHERE", query_and ? "AND" : "" , local_activity->activity_id);
}
EM_DEBUG_LOG_SEC(">>>>> Query [ %s ] ", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
}
/**
-* emstorage_free_local_activity - Free the Local Activity data
-*/
+ * emstorage_free_local_activity - Free the Local Activity data
+ */
INTERNAL_FUNC int emstorage_free_local_activity(emstorage_activity_tbl_t **local_activity_list, int count, int *err_code)
{
EM_DEBUG_FUNC_BEGIN();
if (err_code != NULL)
*err_code = error;
- EM_DEBUG_FUNC_END("ret [%d]", ret);
+ EM_DEBUG_FUNC_END("ret [%d]", ret);
return ret;
}
break;
}
- if (ret == EMAIL_ERROR_NONE && EM_SAFE_STRLEN(key_value_string) > 0) {
+ if (ret == EMAIL_ERROR_NONE && EM_SAFE_STRLEN(key_value_string) > 0)
*output_key_value_string = strdup(key_value_string);
- }
FINISH_OFF:
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
col_index = 1;
sqlite3_free_table(result);
EMSTORAGE_FINISH_READ_TRANSACTION(true);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
query_size = (10 * count) + strlen("mail_id IN () ");
}
cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, query_size, "mail_id IN (");
- for (i = 0; i < count-1; i++) {
+ for (i = 0; i < count-1; i++)
cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, query_size, "%d, ", mail_ids[i]);
- }
+
cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, query_size, "%d) ", mail_ids[count-1]);
*output_string = strdup(sql_query_string2);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
col_index = 1;
sqlite3_free_table(result);
EMSTORAGE_FINISH_READ_TRANSACTION(true);
-// sqlite3_db_release_memory(local_db_handle);
+ // sqlite3_db_release_memory(local_db_handle);
query_size = (10 * count) + strlen("mail_id IN () ");
}
int cur_query = 0;
cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, query_size, "mail_id IN (");
- for (i = 0; i < count-1; i++) {
+ for (i = 0; i < count-1; i++)
cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, query_size, "%d, ", mail_ids[i]);
- }
+
cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, query_size, "%d) ", mail_ids[count-1]);
*output_string = strdup(sql_query_string2);
char query_per_account[QUERY_SIZE] = { 0 , };
if (input_sorting_rule->force_boolean_check) {
- SNPRINTF(result_rule_string, QUERY_SIZE, "%s = 0 ", emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute));
- } else
- EM_SAFE_STRNCPY(result_rule_string, emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute), QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1 );
+ SNPRINTF(result_rule_string, QUERY_SIZE, "%s = 0 ",
+ emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute));
+ } else {
+ EM_SAFE_STRNCPY(result_rule_string,
+ emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute),
+ QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
+ }
switch (input_sorting_rule->sort_order) {
- case EMAIL_SORT_ORDER_ASCEND:
- EM_SAFE_STRNCAT(result_rule_string, " ASC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
- break;
-
- case EMAIL_SORT_ORDER_DESCEND:
- EM_SAFE_STRNCAT(result_rule_string, " DESC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
- break;
-
- case EMAIL_SORT_ORDER_NOCASE_ASCEND:
- EM_SAFE_STRNCAT(result_rule_string, " COLLATE NOCASE ASC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
- break;
+ case EMAIL_SORT_ORDER_ASCEND:
+ EM_SAFE_STRNCAT(result_rule_string, " ASC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
+ break;
- case EMAIL_SORT_ORDER_NOCASE_DESCEND:
- EM_SAFE_STRNCAT(result_rule_string, " COLLATE NOCASE DESC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
- break;
+ case EMAIL_SORT_ORDER_DESCEND:
+ EM_SAFE_STRNCAT(result_rule_string, " DESC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
+ break;
- case EMAIL_SORT_ORDER_TO_CCBCC:
- memset(result_rule_string, 0, QUERY_SIZE);
- if (input_sorting_rule->key_value.string_type_value)
- sqlite3_snprintf(QUERY_SIZE, result_rule_string,
- " CASE WHEN full_address_to LIKE \'%%%q%%\' THEN 1 ELSE 2 END ",
- input_sorting_rule->key_value.string_type_value);
- break;
+ case EMAIL_SORT_ORDER_NOCASE_ASCEND:
+ EM_SAFE_STRNCAT(result_rule_string, " COLLATE NOCASE ASC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
+ break;
- case EMAIL_SORT_ORDER_TO_CC_BCC:
- memset(result_rule_string, 0, QUERY_SIZE);
- if (input_sorting_rule->key_value.string_type_value)
- sqlite3_snprintf(QUERY_SIZE, result_rule_string,
- " CASE WHEN full_address_to LIKE \'%%%q%%\' THEN 1 WHEN full_address_cc LIKE \'%%%q%%\' THEN 2 ELSE 3 END ",
- input_sorting_rule->key_value.string_type_value, input_sorting_rule->key_value.string_type_value);
- break;
+ case EMAIL_SORT_ORDER_NOCASE_DESCEND:
+ EM_SAFE_STRNCAT(result_rule_string, " COLLATE NOCASE DESC ", QUERY_SIZE - EM_SAFE_STRLEN(result_rule_string) - 1);
+ break;
- case EMAIL_SORT_ORDER_TO_CCBCC_ALL:
- if (!emstorage_get_account_list(multi_user_name, &count, &account_tbl_array, true, false, NULL)) {
- EM_DEBUG_EXCEPTION("emstorage_get_account_list failed");
- goto FINISH_OFF;
- }
+ case EMAIL_SORT_ORDER_TO_CCBCC:
+ memset(result_rule_string, 0, QUERY_SIZE);
+ if (input_sorting_rule->key_value.string_type_value)
+ sqlite3_snprintf(QUERY_SIZE, result_rule_string,
+ " CASE WHEN full_address_to LIKE \'%%%q%%\' THEN 1 ELSE 2 END ",
+ input_sorting_rule->key_value.string_type_value);
+ break;
- if (!count) {
- EM_DEBUG_LOG("No account exist");
- ret = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
- }
+ case EMAIL_SORT_ORDER_TO_CC_BCC:
+ memset(result_rule_string, 0, QUERY_SIZE);
+ if (input_sorting_rule->key_value.string_type_value)
+ sqlite3_snprintf(QUERY_SIZE, result_rule_string,
+ " CASE WHEN full_address_to LIKE \'%%%q%%\' THEN 1 WHEN full_address_cc LIKE \'%%%q%%\' THEN 2 ELSE 3 END ",
+ input_sorting_rule->key_value.string_type_value, input_sorting_rule->key_value.string_type_value);
+ break;
- for (i = 0; i < count; i++) {
- if (i > 0 && result_str) {
- tmp_str2 = result_str;
- result_str = g_strconcat(tmp_str2, " OR ", NULL);
- EM_SAFE_FREE(tmp_str2);
- }
+ case EMAIL_SORT_ORDER_TO_CCBCC_ALL:
+ if (!emstorage_get_account_list(multi_user_name, &count, &account_tbl_array, true, false, NULL)) {
+ EM_DEBUG_EXCEPTION("emstorage_get_account_list failed");
+ goto FINISH_OFF;
+ }
- memset(query_per_account, 0, QUERY_SIZE);
- snprintf(query_per_account, QUERY_SIZE,
- "(account_id = %d AND full_address_to LIKE \'%%%s%%\')",
- account_tbl_array[i].account_id, account_tbl_array[i].user_email_address);
+ if (!count) {
+ EM_DEBUG_LOG("No account exist");
+ ret = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
+ }
- tmp_str1 = result_str;
- if (tmp_str1)
- result_str = g_strconcat(tmp_str1, query_per_account, NULL);
- else
- result_str = g_strdup(query_per_account);
- EM_SAFE_FREE(tmp_str1);
+ for (i = 0; i < count; i++) {
+ if (i > 0 && result_str) {
+ tmp_str2 = result_str;
+ result_str = g_strconcat(tmp_str2, " OR ", NULL);
+ EM_SAFE_FREE(tmp_str2);
}
- snprintf(result_rule_string, QUERY_SIZE,
- " CASE WHEN %s THEN 1 ELSE 2 END ", result_str);
+ memset(query_per_account, 0, QUERY_SIZE);
+ snprintf(query_per_account, QUERY_SIZE,
+ "(account_id = %d AND full_address_to LIKE \'%%%s%%\')",
+ account_tbl_array[i].account_id, account_tbl_array[i].user_email_address);
+
+ tmp_str1 = result_str;
+ if (tmp_str1)
+ result_str = g_strconcat(tmp_str1, query_per_account, NULL);
+ else
+ result_str = g_strdup(query_per_account);
+ EM_SAFE_FREE(tmp_str1);
+ }
+
+ snprintf(result_rule_string, QUERY_SIZE,
+ " CASE WHEN %s THEN 1 ELSE 2 END ", result_str);
- EM_SAFE_FREE(result_str);
- if (account_tbl_array)
- emstorage_free_account(&account_tbl_array, count, NULL);
- break;
+ EM_SAFE_FREE(result_str);
+ if (account_tbl_array)
+ emstorage_free_account(&account_tbl_array, count, NULL);
+ break;
- case EMAIL_SORT_ORDER_LOCALIZE_ASCEND:
- memset(result_rule_string, 0, QUERY_SIZE);
- sqlite3_snprintf(QUERY_SIZE, result_rule_string,
+ case EMAIL_SORT_ORDER_LOCALIZE_ASCEND:
+ memset(result_rule_string, 0, QUERY_SIZE);
+ sqlite3_snprintf(QUERY_SIZE, result_rule_string,
" CASE WHEN %s GLOB \'[][~`!@#$%%^&*()_-+=|\\{}:;<>,.?/ ]*\' THEN 1 ELSE 2 END ASC, %s COLLATE NOCASE ASC ",
emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute),
emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute));
- break;
+ break;
- case EMAIL_SORT_ORDER_LOCALIZE_DESCEND:
- memset(result_rule_string, 0, QUERY_SIZE);
- sqlite3_snprintf(QUERY_SIZE, result_rule_string,
+ case EMAIL_SORT_ORDER_LOCALIZE_DESCEND:
+ memset(result_rule_string, 0, QUERY_SIZE);
+ sqlite3_snprintf(QUERY_SIZE, result_rule_string,
" CASE WHEN %s GLOB \'[][~`!@#$%%^&*()_-+=|\\{}:;<>,.?/ ]*\' THEN 1 ELSE 2 END DESC, %s COLLATE NOCASE DESC ",
emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute),
emcore_get_mail_field_name_by_attribute_type(input_sorting_rule->target_attribute));
- break;
+ break;
- default:
- EM_DEBUG_EXCEPTION("Invalid sort_order [%d]", input_sorting_rule->sort_order);
- ret = EMAIL_ERROR_INVALID_PARAM;
- goto FINISH_OFF;
+ default:
+ EM_DEBUG_EXCEPTION("Invalid sort_order [%d]", input_sorting_rule->sort_order);
+ ret = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
}
*output_string = strdup(result_rule_string);
for (i = 0; i < input_filter_count; i++) {
temp_filter_list = (*input_filter_list) + i;
- if (!temp_filter_list) {
+ if (!temp_filter_list)
continue;
- }
if (temp_filter_list->list_filter_item_type == EMAIL_LIST_FILTER_ITEM_RULE) {
switch (temp_filter_list->list_filter_item.rule.target_attribute) {
break;
}
} else if (temp_filter_list->list_filter_item_type == EMAIL_LIST_FILTER_ITEM_RULE_FTS && temp_filter_list->list_filter_item.rule_fts.target_attribute == EMAIL_MAIL_TEXT_ATTRIBUTE_FULL_TEXT) {
- EM_SAFE_FREE(temp_filter_list->list_filter_item.rule_fts.key_value.string_type_value);
+ EM_SAFE_FREE(temp_filter_list->list_filter_item.rule_fts.key_value.string_type_value);
} else if (temp_filter_list->list_filter_item_type == EMAIL_LIST_FILTER_ITEM_RULE_ATTACH && temp_filter_list->list_filter_item.rule_attach.target_attribute == EMAIL_MAIL_ATTACH_ATTRIBUTE_ATTACHMENT_NAME) {
- EM_SAFE_FREE(temp_filter_list->list_filter_item.rule_attach.key_value.string_type_value);
+ EM_SAFE_FREE(temp_filter_list->list_filter_item.rule_attach.key_value.string_type_value);
}
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1])
task_id = 1;
result = NULL;
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_task_tbl VALUES "
- "( "
- " ? " /* task_id */
- " , ? " /* task_type */
- " , ? " /* task_status */
- " , ? " /* task_priority */
- " , ? " /* task_parameter_length */
- " , ? " /* task_parameter */
- " , ? " /* date_time */
- ") ");
+ "INSERT INTO mail_task_tbl VALUES "
+ "( "
+ " ? " /* task_id */
+ " , ? " /* task_type */
+ " , ? " /* task_status */
+ " , ? " /* task_priority */
+ " , ? " /* task_parameter_length */
+ " , ? " /* task_parameter */
+ " , ? " /* date_time */
+ ") ");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {err = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EM_DEBUG_LOG_SEC(">>>> SQL STMT [%s] ", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {err = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {err = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
ret = (err == EMAIL_ERROR_NONE);
SNPRINTF(sql_query_string, sizeof(sql_query_string), "DELETE FROM mail_task_tbl WHERE task_id = %d", task_id);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
ret = true;
EMSTORAGE_START_WRITE_TRANSACTION(multi_user_name, transaction, err);
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_task_tbl SET"
- " task_status = %d"
- " WHERE task_id = %d"
- , task_status
- , task_id);
+ "UPDATE mail_task_tbl SET"
+ " task_status = %d"
+ " WHERE task_id = %d"
+ , task_status
+ , task_id);
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", err);
+ goto FINISH_OFF;
}
ret = true;
}
INTERNAL_FUNC int emstorage_query_task(char *multi_user_name,
- const char *input_conditional_clause,
- const char *input_ordering_clause,
- email_task_t **output_task_list,
- int *output_task_count)
+ const char *input_conditional_clause,
+ const char *input_ordering_clause,
+ email_task_t **output_task_list,
+ int *output_task_count)
{
EM_DEBUG_FUNC_BEGIN("input_conditional_clause[%p], input_ordering_clause [%p], "
- "output_task_list[%p], output_task_count[%d]",
- input_conditional_clause, input_ordering_clause, output_task_list, output_task_count);
+ "output_task_list[%p], output_task_count[%d]",
+ input_conditional_clause, input_ordering_clause, output_task_list, output_task_count);
int i = 0, count = 0, rc = -1;
int cur_query = 0;
int field_index = 0;
local_db_handle = emstorage_get_db_connection(multi_user_name);
SNPRINTF_OFFSET(sql_query_string, cur_query, QUERY_SIZE,
- "SELECT COUNT(*) FROM mail_task_tbl %s", input_conditional_clause);
+ "SELECT COUNT(*) FROM mail_task_tbl %s", input_conditional_clause);
EM_DEBUG_LOG_SEC("emstorage_query_mail_list : query[%s].", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
count = atoi(result[1]);
sqlite3_free_table(result);
}
SNPRINTF_OFFSET(sql_query_string, cur_query, QUERY_SIZE,
- "SELECT %s FROM mail_task_tbl %s %s", field_list, input_conditional_clause, input_ordering_clause);
+ "SELECT %s FROM mail_task_tbl %s %s", field_list, input_conditional_clause, input_ordering_clause);
EM_DEBUG_LOG_SEC("emstorage_query_mail_list : query[%s].", sql_query_string);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("After sqlite3_prepare_v2 hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {err = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {err = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (rc == SQLITE_DONE) {
EM_DEBUG_EXCEPTION("no task found...");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_LOG("after sqlite3_step(), i = %d, rc = %d.", i, rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {err = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
}
FINISH_OFF:
EM_DEBUG_LOG_SEC("query[%s]", sql_query_string);
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
- EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {err = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
- EM_DEBUG_LOG("Count of mails [%d]", count);
+ EM_DEBUG_LOG("Count of mails [%d]", count);
if (count) {
_get_table_field_data_int(result, &temp_mail_id, 1);
memset(sql_query_string, 0x00, QUERY_SIZE);
sqlite3_snprintf(sizeof(sql_query_string), sql_query_string, "UPDATE mail_tbl set server_mail_id = '%q'", server_uid);
- if (strlen(sql_query_string) + strlen(where_pararaph) < QUERY_SIZE)
- EM_SAFE_STRNCAT(sql_query_string, where_pararaph ,QUERY_SIZE - EM_SAFE_STRLEN(sql_query_string) -1 );
+ if (strlen(sql_query_string) + strlen(where_pararaph) < QUERY_SIZE) {
+ EM_SAFE_STRNCAT(sql_query_string, where_pararaph,
+ QUERY_SIZE - EM_SAFE_STRLEN(sql_query_string) - 1);
+ }
err = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (err != EMAIL_ERROR_NONE) {
memset(sql_query_string, 0x00, sizeof(sql_query_string));
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "INSERT INTO mail_auto_download_activity_tbl VALUES "
- "("
- "? " /* Activity ID */
- ",?" /* Status */
- ",?" /* Account ID */
- ",?" /* Local Mail ID */
- ",?" /* Server mail ID */
- ",?" /* Mailbox ID*/
- ",?" /* Multi USER NAME */
- ") ");
+ "INSERT INTO mail_auto_download_activity_tbl VALUES "
+ "("
+ "? " /* Activity ID */
+ ",?" /* Status */
+ ",?" /* Account ID */
+ ",?" /* Local Mail ID */
+ ",?" /* Server mail ID */
+ ",?" /* Mailbox ID*/
+ ",?" /* Multi USER NAME */
+ ") ");
char *sql = "SELECT max(rowid) FROM mail_auto_download_activity_tbl;";
char **result = NULL;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
if (NULL == result[1]) rc = 1;
else rc = atoi(result[1])+1;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
_bind_stmt_field_data_int(hStmt, i++, local_activity->activity_id);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc == SQLITE_FULL), {error = EMAIL_ERROR_MAIL_MEMORY_FULL; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
+ ("sqlite3_step fail:%d, errmsg = %s.", rc, sqlite3_errmsg(local_db_handle)));
ret = true;
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG(" Bbefore sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (!(event_list = (email_event_auto_download *)em_malloc(sizeof(email_event_auto_download)*(*count)))) {
EM_DEBUG_EXCEPTION("Malloc failed");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
}
ret = true;
FINISH_OFF:
if (true == ret)
- *event_start = event_list;
+ *event_start = event_list;
else {
EM_SAFE_FREE(event_list);
*event_start = NULL;
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG_DEV("before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
_get_stmt_field_data_int(hStmt, activity_count, 0);
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_LOG("Before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
if (NULL == (result_account_list = (int *)em_malloc(sizeof(int)*(*count)))) {
EM_DEBUG_EXCEPTION(" em_mallocfailed...");
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_LOG("account id -> %d", result_account_list[i]);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, NULL, NULL, NULL), rc);
EM_DEBUG_DB_EXEC(SQLITE_OK != rc, {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF; },
- ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
*count = atoi(result[1]);
sqlite3_free_table(result);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
mbox_list = (int *)em_malloc(sizeof(int)*(*count)); /* prevent */
if (mbox_list == NULL) {
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW && rc != SQLITE_DONE), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
EM_DEBUG_LOG("mbox_list %d", mbox_list[i]);
}
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_prepare_v2(local_db_handle, sql_query_string, EM_SAFE_STRLEN(sql_query_string), &hStmt, NULL), rc);
EM_DEBUG_LOG("before sqlite3_prepare hStmt = %p", hStmt);
EM_DEBUG_DB_EXEC((SQLITE_OK != rc), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+ ("SQL(%s) sqlite3_prepare fail:(%d) %s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_step(hStmt), rc);
EM_DEBUG_DB_EXEC((rc != SQLITE_ROW), {error = EMAIL_ERROR_DB_FAILURE; goto FINISH_OFF; },
- ("sqlite3_step fail:%d", rc));
+ ("sqlite3_step fail:%d", rc));
_get_stmt_field_data_int(hStmt, activity_count, 0);
if (mailbox_id > 0)
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_auto_download_activity_tbl SET server_mail_id = %s , mailbox_id ='%d' WHERE server_mail_id = %s ", new_server_uid, mailbox_id, old_server_uid);
+ "UPDATE mail_auto_download_activity_tbl SET server_mail_id = %s , mailbox_id ='%d' WHERE server_mail_id = %s ", new_server_uid, mailbox_id, old_server_uid);
else if (mailbox_name)
SNPRINTF(sql_query_string, sizeof(sql_query_string),
- "UPDATE mail_auto_download_activity_tbl SET server_mail_id = %s WHERE server_mail_id = %s ", new_server_uid, old_server_uid);
+ "UPDATE mail_auto_download_activity_tbl SET server_mail_id = %s WHERE server_mail_id = %s ", new_server_uid, old_server_uid);
EM_DEBUG_LOG_SEC("Query [%s]", sql_query_string);
error = emstorage_exec_query_by_prepare_v2(local_db_handle, sql_query_string);
if (error != EMAIL_ERROR_NONE) {
- EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
- goto FINISH_OFF;
+ EM_DEBUG_EXCEPTION("emstorage_exec_query_by_prepare_v2 failed:[%d]", error);
+ goto FINISH_OFF;
}
rc = sqlite3_changes(local_db_handle);
- if (rc == 0) {
+ if (rc == 0)
EM_DEBUG_LOG("No matching found in mail_auto_download_activity_tbl");
- }
ret = true;
if (validated) {
EM_DEBUG_LOG("column_name[%s] column_type[%s]", column_name, column_type);
column_info_item = em_malloc(sizeof(email_column_info_t));
- if (column_info_item == NULL) {
- EM_DEBUG_EXCEPTION("em_mallocfailed");
- goto FINISH_OFF;
- }
+ if (column_info_item == NULL) {
+ EM_DEBUG_EXCEPTION("em_mallocfailed");
+ goto FINISH_OFF;
+ }
column_info_item->column_name = EM_SAFE_STRDUP(column_name);
column_info_item->column_type = EM_SAFE_STRDUP(column_type);
FINISH_OFF:
- EM_SAFE_FREE(column_name);
- EM_SAFE_FREE(column_type);
+ EM_SAFE_FREE(column_name);
+ EM_SAFE_FREE(column_type);
EM_DEBUG_FUNC_END();
return 0;
FINISH_OFF:
if (error == EMAIL_ERROR_NONE) {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} else {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
}
EM_DEBUG_FUNC_END("error [%d]", error);
FINISH_OFF:
if (error == EMAIL_ERROR_NONE) {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} else {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
}
EM_DEBUG_FUNC_END("error [%d]", error);
FINISH_OFF:
if (error == EMAIL_ERROR_NONE) {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "END;", NULL, NULL, NULL), rc);
} else {
- EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
+ EMSTORAGE_PROTECTED_FUNC_CALL(
+ sqlite3_exec(local_db_handle, "rollback", NULL, NULL, NULL), rc);
}
EM_DEBUG_FUNC_END("error [%d]", error);
}
emstorage_drop_table(multi_user_name, table_names[i][1]);
- } else
+ } else {
EM_DEBUG_LOG("Skipped");
+ }
}
FINISH_OFF:
if (create_table_query) {
int i = 0;
for (i = 0; i < query_len; i++) {
- if (create_table_query[i]) {
+ if (create_table_query[i])
EM_SAFE_FREE(create_table_query[i]);
- }
}
EM_SAFE_FREE(create_table_query);
}