static void gslist_split_in_two (GSList *src, GSList **r1, GSList **r2) { GSList *next, *l1 = NULL, *l2 = NULL; while (src) { if (src) PREPEND(l1, src); if (src) PREPEND(l2, src); } *r1 = l1, *r2 = l2; }
// Convert interval +/- expression to DATEADD function void SqlParser::SqlServerToDateAdd(Token *op, Token *first, Token *first_end, Token *second, Token *second_end) { if(op == NULL || first == NULL || second == NULL) return; PREPEND(first, "DATEADD("); if(second->data_subtype == TOKEN_DT2_INTVL_MON) PREPEND_NOFMT(first, "mm"); else if(second->data_subtype == TOKEN_DT2_INTVL_DAY) PREPEND_NOFMT(first, "dd"); else if(second->data_subtype == TOKEN_DT2_INTVL_MIN) PREPEND_NOFMT(first, "mi"); else if(second->data_subtype == TOKEN_DT2_INTVL_SEC) PREPEND_NOFMT(first, "ss"); PREPEND_NOFMT(first, ", "); // Copy - sign only, + will not be used if(TOKEN_CMPC(op, '-')) PrependCopy(first, op); PrependCopy(first, second, second_end, false); PREPEND_NOFMT(first, ", "); APPEND_NOFMT(first_end, ")"); Token::Remove(op, second_end); }
// Sybase ADS WHILE FETCH cur DO loop bool SqlParser::ParseSybaseWhileFetchStatement(Token *while_, Token *fetch, int scope) { // Curson name (it must be already declared) Token *cursor = GetNextIdentToken(); if(cursor == NULL) return false; // DO keyword starts the block Token *do_ = TOKEN_GETNEXTW("DO"); if(_target == SQL_SQL_SERVER) { TOKEN_CHANGE(do_, "BEGIN"); // FETCH the first row PREPEND(while_, "FETCH "); PrependCopy(while_, cursor); PREPEND(while_, " INTO;\n"); TOKEN_CHANGE(fetch, "@@FETCH_STATUS=0"); } ParseBlock(SQL_BLOCK_WHILE, true, scope, NULL); Token *end = TOKEN_GETNEXTW("END"); Token *end_while = (end != NULL) ? TOKEN_GETNEXTW("WHILE") : NULL; if(end != NULL) { if(_target == SQL_SQL_SERVER) { // Fetch the next row at the end of loop PREPEND(end, "FETCH "); PrependCopy(end, cursor); PREPEND(end, " INTO;\n"); Token::Remove(cursor); Token::Remove(end_while); } } return true; }
static GSList* gslist_merge_random (GSList *l1, GSList *l2) { GSList *next, *result = NULL; GRand *r = oio_ext_local_prng (); while (l1 || l2) { if (l1 && l2) { if (g_rand_boolean(r)) PREPEND(result,l1); else PREPEND(result,l2); } else { if (l1) PREPEND(result,l1); else PREPEND(result,l2); } } return result; }
static GSList* gslist_merge_random(GSList *l1, GSList *l2) { GSList *next, *result = NULL; while (l1 || l2) { if (l1 && l2) { if (g_random_boolean()) PREPEND(result,l1); else PREPEND(result,l2); } else { if (l1) PREPEND(result,l1); else PREPEND(result,l2); } } return result; }
isc_result_t isc_symtab_define(isc_symtab_t *symtab, const char *key, unsigned int type, isc_symvalue_t value, isc_symexists_t exists_policy) { unsigned int bucket; elt_t *elt; REQUIRE(VALID_SYMTAB(symtab)); REQUIRE(key != NULL); REQUIRE(type != 0); FIND(symtab, key, type, bucket, elt); if (exists_policy != isc_symexists_add && elt != NULL) { if (exists_policy == isc_symexists_reject) return (ISC_R_EXISTS); INSIST(exists_policy == isc_symexists_replace); UNLINK(symtab->table[bucket], elt, link); if (symtab->undefine_action != NULL) (symtab->undefine_action)(elt->key, elt->type, elt->value, symtab->undefine_arg); } else { elt = (elt_t *)isc_mem_get(symtab->mctx, sizeof(*elt)); if (elt == NULL) return (ISC_R_NOMEMORY); ISC_LINK_INIT(elt, link); symtab->count++; } /* * Though the "key" can be const coming in, it is not stored as const * so that the calling program can easily have writable access to * it in its undefine_action function. In the event that it *was* * truly const coming in and then the caller modified it anyway ... * well, don't do that! */ DE_CONST(key, elt->key); elt->type = type; elt->value = value; /* * We prepend so that the most recent definition will be found. */ PREPEND(symtab->table[bucket], elt, link); if (symtab->count > symtab->maxload) grow_table(symtab); return (ISC_R_SUCCESS); }
int res_nupdate(res_state statp, ns_updrec *rrecp_in, ns_tsig_key *key) { ns_updrec *rrecp; u_char answer[PACKETSZ]; u_char *packet; struct zonegrp *zptr, tgrp; LIST(struct zonegrp) zgrps; int nzones = 0, nscount = 0, n; union res_sockaddr_union nsaddrs[MAXNS]; packet = malloc(NS_MAXMSG); if (packet == NULL) { DPRINTF(("malloc failed")); return (0); } /* Thread all of the updates onto a list of groups. */ INIT_LIST(zgrps); memset(&tgrp, 0, sizeof (tgrp)); for (rrecp = rrecp_in; rrecp; rrecp = LINKED(rrecp, r_link) ? NEXT(rrecp, r_link) : NULL) { int nscnt; /* Find the origin for it if there is one. */ tgrp.z_class = rrecp->r_class; nscnt = res_findzonecut2(statp, rrecp->r_dname, tgrp.z_class, RES_EXHAUSTIVE, tgrp.z_origin, sizeof tgrp.z_origin, tgrp.z_nsaddrs, MAXNS); if (nscnt <= 0) { DPRINTF(("res_findzonecut failed (%d)", nscnt)); goto done; } tgrp.z_nscount = nscnt; /* Find the group for it if there is one. */ for (zptr = HEAD(zgrps); zptr != NULL; zptr = NEXT(zptr, z_link)) if (ns_samename(tgrp.z_origin, zptr->z_origin) == 1 && tgrp.z_class == zptr->z_class) break; /* Make a group for it if there isn't one. */ if (zptr == NULL) { zptr = malloc(sizeof *zptr); if (zptr == NULL) { DPRINTF(("malloc failed")); goto done; } *zptr = tgrp; zptr->z_flags = 0; INIT_LINK(zptr, z_link); INIT_LIST(zptr->z_rrlist); APPEND(zgrps, zptr, z_link); } /* Thread this rrecp onto the right group. */ APPEND(zptr->z_rrlist, rrecp, r_glink); } for (zptr = HEAD(zgrps); zptr != NULL; zptr = NEXT(zptr, z_link)) { /* Construct zone section and prepend it. */ rrecp = res_mkupdrec(ns_s_zn, zptr->z_origin, zptr->z_class, ns_t_soa, 0); if (rrecp == NULL) { DPRINTF(("res_mkupdrec failed")); goto done; } PREPEND(zptr->z_rrlist, rrecp, r_glink); zptr->z_flags |= ZG_F_ZONESECTADDED; /* Marshall the update message. */ n = res_nmkupdate(statp, HEAD(zptr->z_rrlist), packet, NS_MAXMSG); DPRINTF(("res_mkupdate -> %d", n)); if (n < 0) goto done; /* Temporarily replace the resolver's nameserver set. */ nscount = res_getservers(statp, nsaddrs, MAXNS); res_setservers(statp, zptr->z_nsaddrs, zptr->z_nscount); /* Send the update and remember the result. */ if (key != NULL) n = res_nsendsigned(statp, packet, n, key, answer, sizeof answer); else n = res_nsend(statp, packet, n, answer, sizeof answer); if (n < 0) { DPRINTF(("res_nsend: send error, n=%d (%s)\n", n, strerror(errno))); goto done; } if (((HEADER *)answer)->rcode == NOERROR) nzones++; /* Restore resolver's nameserver set. */ res_setservers(statp, nsaddrs, nscount); nscount = 0; } done: while (!EMPTY(zgrps)) { zptr = HEAD(zgrps); if ((zptr->z_flags & ZG_F_ZONESECTADDED) != 0) res_freeupdrec(HEAD(zptr->z_rrlist)); UNLINK(zgrps, zptr, z_link); free(zptr); } if (nscount != 0) res_setservers(statp, nsaddrs, nscount); free(packet); return (nzones); }