inline SString connect_sstrings(const struct SStrings * strs, const SString * connector, enum errors_SS * error) { size_t i; SString str = (SString){0}; enum errors_SS useless_var; if(error == NULL) error = &useless_var; if(strs == NULL) { *error = NULL_ARGUMENT_SS; return (SString){0}; } if(strs->length == 0) { *error = BAD_ARGUMENT_SS; return (SString){0}; } for(i = 0; i < strs->length - 1; i++) { append_sstring(&str, &(strs->sstrings[i])); append_sstring(&str, connector); } append_sstring(&str, &(strs->sstrings[i])); *error = NO_ERROR_SS; return str; }
/* * opr_signature_string * Build a string representing an operator name, including arg type(s). * The result is something like "integer + integer". * * This is typically used in the construction of operator-not-found error * messages. */ static const char* opr_signature_string(struct list *op, char oprkind, oid_t arg1, oid_t arg2) { struct string argbuf; init_string(&argbuf); if (oprkind != 'l') append_fstring(&argbuf, "%s ", format_type_be(arg1)); append_sstring(&argbuf, nl_to_string(op)); if (oprkind != 'r') append_fstring(&argbuf, " %s", format_type_be(arg2)); return argbuf.data; /* return palloc'd string buffer */ }
int pv_get_color(struct sip_msg *msg, pv_param_t *param, pv_value_t *res) { static char color[COL_BUF]; char* p; char* end; str s; if(log_stderr==0 && xlog_force_color==0) { s.s = ""; s.len = 0; return pv_get_strval(msg, param, res, &s); } p = color; end = p + COL_BUF; /* excape sequenz */ append_sstring(p, end, "\033["); if(param->pvn.u.isname.name.s.s[0]!='_') { if (islower((int)param->pvn.u.isname.name.s.s[0])) { /* normal font */ append_sstring(p, end, "0;"); } else { /* bold font */ append_sstring(p, end, "1;"); param->pvn.u.isname.name.s.s[0] += 32; } } /* foreground */ switch(param->pvn.u.isname.name.s.s[0]) { case 'x': append_sstring(p, end, "39;"); break; case 's': append_sstring(p, end, "30;"); break; case 'r': append_sstring(p, end, "31;"); break; case 'g': append_sstring(p, end, "32;"); break; case 'y': append_sstring(p, end, "33;"); break; case 'b': append_sstring(p, end, "34;"); break; case 'p': append_sstring(p, end, "35;"); break; case 'c': append_sstring(p, end, "36;"); break; case 'w': append_sstring(p, end, "37;"); break; default: LM_ERR("invalid foreground\n"); return pv_get_null(msg, param, res); } /* background */ switch(param->pvn.u.isname.name.s.s[1]) { case 'x': append_sstring(p, end, "49"); break; case 's': append_sstring(p, end, "40"); break; case 'r': append_sstring(p, end, "41"); break; case 'g': append_sstring(p, end, "42"); break; case 'y': append_sstring(p, end, "43"); break; case 'b': append_sstring(p, end, "44"); break; case 'p': append_sstring(p, end, "45"); break; case 'c': append_sstring(p, end, "46"); break; case 'w': append_sstring(p, end, "47"); break; default: LM_ERR("invalid background\n"); return pv_get_null(msg, param, res); } /* end */ append_sstring(p, end, "m"); s.s = color; s.len = p-color; return pv_get_strval(msg, param, res, &s); error: return -1; }
static int xl_get_color(struct sip_msg *msg, str *res, str *hp, int hi, int hf) { static char color[COL_BUF]; char* p; char* end; p = color; end = p + COL_BUF; /* excape sequenz */ append_sstring(p, end, "\033["); if(hp->s[0]!='_') { if (islower((unsigned char)hp->s[0])) { /* normal font */ append_sstring(p, end, "0;"); } else { /* bold font */ append_sstring(p, end, "1;"); hp->s[0] += 32; } } /* foreground */ switch(hp->s[0]) { case 'x': append_sstring(p, end, "39;"); break; case 's': append_sstring(p, end, "30;"); break; case 'r': append_sstring(p, end, "31;"); break; case 'g': append_sstring(p, end, "32;"); break; case 'y': append_sstring(p, end, "33;"); break; case 'b': append_sstring(p, end, "34;"); break; case 'p': append_sstring(p, end, "35;"); break; case 'c': append_sstring(p, end, "36;"); break; case 'w': append_sstring(p, end, "37;"); break; default: LOG(L_ERR, "XLOG: exit foreground\n"); return xl_get_empty(msg, res, hp, hi, hf); } /* background */ switch(hp->s[1]) { case 'x': append_sstring(p, end, "49"); break; case 's': append_sstring(p, end, "40"); break; case 'r': append_sstring(p, end, "41"); break; case 'g': append_sstring(p, end, "42"); break; case 'y': append_sstring(p, end, "43"); break; case 'b': append_sstring(p, end, "44"); break; case 'p': append_sstring(p, end, "45"); break; case 'c': append_sstring(p, end, "46"); break; case 'w': append_sstring(p, end, "47"); break; default: LOG(L_ERR, "XLOG: exit background\n"); return xl_get_empty(msg, res, hp, hi, hf); } /* end */ append_sstring(p, end, "m"); res->s = color; res->len = p-color; return 0; error: return -1; }