void sg_wc_tx__diff__setup__header(SG_context * pCtx, const SG_vhash * pvhItem, SG_string ** ppStringHeader) { SG_string * pStringHeader = NULL; SG_string * pStringDetail = NULL; SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &pStringHeader) ); SG_ERR_CHECK( SG_string__append__format(pCtx, pStringHeader, "=== %s\n", "================================================================") ); SG_ERR_CHECK( SG_wc__status__classic_format2__item(pCtx, pvhItem, "=== ", "\n", &pStringDetail) ); SG_ERR_CHECK( SG_string__append__string(pCtx, pStringHeader, pStringDetail) ); *ppStringHeader = pStringHeader; pStringHeader = NULL; fail: SG_STRING_NULLFREE(pCtx, pStringHeader); SG_STRING_NULLFREE(pCtx, pStringDetail); }
static void _templatize( SG_context *pCtx, SG_string *content, const _request_headers *pRequestHeaders, _replacer_cb replacer) { SG_string *instr = NULL; const char *next = NULL; SG_string *piece = NULL; SG_string *replacement = NULL; SG_string *inclusion = NULL; SG_string *replaceRaw = NULL; SG_ERR_CHECK( SG_STRING__ALLOC__COPY(pCtx, &instr, content) ); SG_ERR_CHECK( SG_string__clear(pCtx, content) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &piece) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &replacement) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &replaceRaw) ); next = SG_string__sz(instr); while (*next) { const char *delim = strstr(next, "{{{"); if (delim == NULL) { SG_ERR_CHECK( SG_string__append__sz(pCtx, content, next) ); break; } else { const char *rest = delim + 3; const char *end = strstr(rest, "}}}"); if (end == NULL) { SG_ERR_CHECK( SG_string__append__sz(pCtx, content, next) ); break; } SG_ERR_CHECK( SG_string__append__buf_len(pCtx, content, (const SG_byte *)next, (delim - next) * sizeof(char)) ); SG_ERR_CHECK( SG_string__clear(pCtx, piece) ); SG_ERR_CHECK( SG_string__clear(pCtx, replacement) ); SG_ERR_CHECK( SG_string__append__buf_len(pCtx, piece, (const SG_byte *)rest, (end - rest) * sizeof(char)) ); SG_ERR_CHECK( SG_string__append__string(pCtx, replacement, piece) ); if (SG_string__sz(piece)[0] == '<') { SG_string__remove(pCtx, piece, 0, 1); SG_ASSERT(inclusion == NULL); SG_ERR_CHECK( _read_template_file(pCtx, SG_string__sz(piece), &inclusion, pRequestHeaders, replacer) ); SG_STRING_NULLFREE(pCtx, replacement); replacement = inclusion; inclusion = NULL; } else { SG_bool needEncoding = SG_TRUE; SG_ERR_CHECK( replacer(pCtx, pRequestHeaders, piece, replaceRaw) ); // no verb-specific replacement? try generics if (sgeq(piece, replacement)) { SG_ERR_CHECK( _default_replacer(pCtx, pRequestHeaders, piece, replaceRaw, &needEncoding) ); } if (needEncoding) SG_ERR_CHECK( SG_htmlencode(pCtx, replaceRaw, replacement) ); else SG_ERR_CHECK( SG_string__set__string(pCtx, replacement, replaceRaw) ); } SG_ERR_CHECK( SG_string__append__string(pCtx, content, replacement) ); next = end + 3; } } fail: SG_STRING_NULLFREE(pCtx, instr); SG_STRING_NULLFREE(pCtx, piece); SG_STRING_NULLFREE(pCtx, replacement); SG_STRING_NULLFREE(pCtx, replaceRaw); SG_STRING_NULLFREE(pCtx, inclusion); }
static void _fillInUserSelection( SG_context *pCtx, SG_string *pstrRepoDescriptorName, SG_string *replacement) { SG_repo *repo = NULL; SG_varray *users = NULL; SG_vhash *user = NULL; SG_uint32 i = 0; SG_uint32 count; SG_string *semail = NULL; SG_string *suid = NULL; SG_string *entry = NULL; SG_string *curuid = NULL; SG_ERR_CHECK( SG_string__clear(pCtx, replacement) ); SG_ERR_CHECK( SG_repo__open_repo_instance(pCtx, SG_string__sz(pstrRepoDescriptorName), &repo) ); SG_ERR_CHECK( SG_user__list_all(pCtx, repo, &users) ); SG_ERR_CHECK( SG_varray__count(pCtx, users, &count) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &semail) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &suid) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &entry) ); SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &curuid) ); SG_ERR_CHECK( _getUserId(pCtx, repo, curuid) ); for ( i = 0; i < count; ++i ) { const char *uid = NULL; const char *email = NULL; const char *selected = NULL; SG_ERR_CHECK( SG_varray__get__vhash(pCtx, users, i, &user) ); SG_ERR_CHECK( SG_vhash__get__sz(pCtx, user, "recid", &uid) ); SG_ERR_CHECK( SG_vhash__get__sz(pCtx, user, "email", &email) ); SG_ERR_CHECK( _getEncoded(pCtx, uid, suid) ); SG_ERR_CHECK( _getEncoded(pCtx, email, semail) ); if (eq(SG_string__sz(curuid), uid)) { selected = " selected='selected' "; } else { selected = ""; } SG_ERR_CHECK( SG_string__sprintf(pCtx, entry, "<option value=\"%s\" %s>%s</option>", SG_string__sz(suid), selected, SG_string__sz(semail)) ); SG_ERR_CHECK( SG_string__append__string(pCtx, replacement, entry) ); } fail: SG_VARRAY_NULLFREE(pCtx, users); SG_REPO_NULLFREE(pCtx, repo); SG_STRING_NULLFREE(pCtx, semail); SG_STRING_NULLFREE(pCtx, suid); SG_STRING_NULLFREE(pCtx, entry); SG_STRING_NULLFREE(pCtx, curuid); }