static int elektraResolveMapperUser (ElektraResolved * handle, ElektraResolveTempfile tmpDir, Key * warningsKey) { int finished = 0; size_t i; for (i = 0; !finished && i < sizeof (ELEKTRA_VARIANT_USER); ++i) { finished = elektraResolveUser (ELEKTRA_VARIANT_USER[i], handle, warningsKey); } if (finished == -1) { ELEKTRA_ADD_WARNINGF (83, warningsKey, "user resolver failed at step %zu, the configuration is: %s", i, ELEKTRA_VARIANT_USER); return -1; } if (!(handle->dirname)) { ELEKTRA_ADD_WARNINGF (83, warningsKey, "no resolver set the user dirname, the configuration is: %s", ELEKTRA_VARIANT_USER); return -1; } elektraResolveFinishByDirname (handle, tmpDir); return finished; }
int elektraWresolverOpen (Plugin * handle, Key * errorKey) { KeySet * resolverConfig = elektraPluginGetConfig (handle); const char * path = keyString (ksLookupByName (resolverConfig, "/path", 0)); if (!path) { ELEKTRA_SET_ERROR (34, errorKey, "Could not find file configuration"); return -1; } resolverHandles * p = elektraMalloc (sizeof (resolverHandles)); // switch is only present to forget no namespace and to get // a warning whenever a new namespace is present. // (also used below in close) // In fact its linear code executed: switch (KEY_NS_SPEC) { case KEY_NS_SPEC: resolverInit (&p->spec, path); elektraResolveSpec (&p->spec, errorKey); case KEY_NS_DIR: resolverInit (&p->dir, path); elektraResolveDir (&p->dir, errorKey); case KEY_NS_USER: resolverInit (&p->user, path); elektraResolveUser (&p->user, errorKey); case KEY_NS_SYSTEM: resolverInit (&p->system, path); elektraResolveSystem (&p->system, errorKey); case KEY_NS_PROC: case KEY_NS_EMPTY: case KEY_NS_NONE: case KEY_NS_META: case KEY_NS_CASCADING: break; } elektraPluginSetData (handle, p); return 0; /* success */ }