static void expand P3C(fn_type *, expansion, const_string, start, const_string, end) { string value; unsigned len = end - start + 1; string var = xmalloc (len + 1); strncpy (var, start, len); var[len] = 0; if (expanding_p (var)) { WARNING1 ("kpathsea: variable `%s' references itself (eventually)", var); } else { #if 1 /* The mktex.c replacement for shell scripts needs a more sophisticated lookup for variables */ value = getval(var); #else /* Check for an environment variable. */ value = getenv (var); #endif /* If no envvar, check the config files. */ if (!value) value = kpse_cnf_get (var); if (value) { expanding (var, true); value = mktex_var_expand (value); expanding (var, false); fn_grow (expansion, value, strlen (value)); free (value); } free (var); } }
static boolean expand (kpathsea kpse, fn_type *expansion, const_string start, const_string end) { boolean ret = false; const_string value; unsigned len = end - start + 1; string var = (string)xmalloc (len + 1); strncpy (var, start, len); var[len] = 0; if (expanding_p (kpse, var)) { WARNING1 ("kpathsea: variable `%s' references itself (eventually)", var); } else { string vtry = concat3 (var, "_", kpse->program_name); /* Check for an environment variable. */ value = getenv (vtry); free (vtry); if (!value || !*value) value = getenv (var); /* If no envvar, check the config files. */ if (!value || !*value) value = kpathsea_cnf_get (kpse, var); if (value) { string tmp; ret = true; expanding (kpse, var, true); tmp = kpathsea_expand (kpse, value); expanding (kpse, var, false); fn_grow (expansion, tmp, strlen (tmp)); free (tmp); } } free (var); return ret; }