static void octstr_bitwise(octstr_t *dst, const octstr_t *a, const octstr_t *b, int op) { octstr_t copy; unsigned char *ap, *bp; int alen, blen, i; assert(dst != NULL && a != NULL && b != NULL); if (octstr_len(a) > octstr_len(b)) { const octstr_t *tmp; tmp = a; a = b; b = tmp; } ap = octstr_ptr((octstr_t *)a); bp = octstr_ptr((octstr_t *)b); alen = octstr_len((octstr_t *)a); blen = octstr_len((octstr_t *)b); octstr_init(©); switch (op) { case OCTSTR_OP_AND: for (i = 0; i < alen; i++) octstr_putc(©, *ap++ & *bp++); for (i = alen; i < blen; i++) octstr_putc(©, 0); break; case OCTSTR_OP_OR: for (i = 0; i < alen; i++) octstr_putc(©, *ap++ | *bp++); for (i = alen; i < blen; i++) octstr_putc(©, *bp++); break; case OCTSTR_OP_XOR: for (i = 0; i < alen; i++) octstr_putc(©, *ap++ ^ *bp++); for (i = alen; i < blen; i++) octstr_putc(©, *bp++); break; default: SHOULDNT_REACH(); } octstr_copy(dst, ©); octstr_clear(©); }
void var_init(struct variable *var) { assert(var != NULL); var->type = 0; //FIXME: need to check ret status mpl_init(&var->bnum); octstr_init(&var->octstr); str_init(&var->str); }
void octstr_initv(octstr_t *octstr, ...) { octstr_t *p; va_list ap; va_start(ap, octstr); p = octstr; while (p != NULL) { octstr_init(p); p = va_arg(ap, octstr_t *); } }
void gwlib_init(void) { gw_assert(!init); gw_init_mem(); uuid_init(); octstr_init(); gwlib_protected_init(); gwthread_init(); log_init(); http_init(); socket_init(); charset_init(); cfg_init(); init = 1; }