char * media_mlex_macro_resolver (char *call) { int envlen = BOX_ELEMENTS ((caddr_t)mediawiki_env); int envidx; int call_len; static caddr_t last_macro_found = NULL; char name_buf[140]; dk_free_box (last_macro_found); last_macro_found = NULL; call_len = strlen (call); mlex_dbg_printf (("{'%s' => ", call)); if ((call_len >= 66) || (call_len < 3)) goto failed; /* see below */ memcpy (name_buf, call + 1, call_len - 2); name_buf[call_len - 2] = '\0'; for (envidx = 0; envidx < envlen; envidx += 2) { if (strcmp (mediawiki_env[envidx], name_buf)) continue; last_macro_found = box_copy (mediawiki_env[envidx+1]); mlex_dbg_printf (("'%s' via env}", last_macro_found)); return last_macro_found; } sprintf (name_buf, "WikiV (U=%.64s) %s", mediawiki_WIKINAME, call); IN_TXN; last_macro_found = registry_get (name_buf); if (NULL != last_macro_found) { mlex_dbg_printf (("'%s' via registry U=%s}", last_macro_found, mediawiki_WIKINAME)); LEAVE_TXN; return last_macro_found; } sprintf (name_buf, "WikiV (C=%.64s) %s", mediawiki_CLUSTER, call); last_macro_found = registry_get (name_buf); if (NULL != last_macro_found) { mlex_dbg_printf (("'%s' via registry C=%s}", last_macro_found, mediawiki_CLUSTER)); LEAVE_TXN; return last_macro_found; } sprintf (name_buf, "WikiV %s", call); last_macro_found = registry_get (name_buf); if (NULL != last_macro_found) { mlex_dbg_printf (("'%s' via registry}", last_macro_found)); LEAVE_TXN; return last_macro_found; } failed: mlex_dbg_printf (("failure }")); LEAVE_TXN; return NULL; }
gpointer engine_get(Engine* engine, EngineStorage type, GQuark id) { MAGIC_ASSERT(engine); /* * Return the item corresponding to type and id in a thread-safe way. * I believe for now no protections are necessary since our registry * is read-only. */ return registry_get(engine->registry, type, &id); }
caddr_t spar_make_iri_from_template (sparp_t *sparp, caddr_t tmpl) { /*!!!TBD: replace this stub with something complete */ caddr_t cmd; /* 0 1 2*/ /* 012345678901234567890*/ cmd = strstr (tmpl, "^{URIQADefaultHost}^"); if (NULL != cmd) { char buf[500]; char *tail = buf; caddr_t subst; memcpy (buf, tmpl, cmd-tmpl); tail += cmd-tmpl; IN_TXN; subst = registry_get ("URIQADefaultHost"); LEAVE_TXN; if (NULL == subst) spar_error (sparp, "%s: Unable to use ^{URIQADefaultHost}^ in IRI template if DefaultHost is not specified in [URIQA] section of Virtuoso config", spar_source_place (sparp, NULL) ); strcpy (tail, subst); tail += strlen (subst); dk_free_box (subst); strcpy (tail, cmd+20); return t_box_dv_uname_string (buf); } /* 0 1 2 */ /* 01234567890123456789012*/ cmd = strstr (tmpl, "^{DynamicLocalFormat}^"); if (NULL != cmd) { spar_error (sparp, "%s: Unable to use ^{DynamicLocalFormat}^ outside format string of IRI class because it is expanded into sprintf format string", spar_source_place (sparp, NULL) ); } return t_box_dv_uname_string (tmpl); }