struct binding *binding;
const char *categoryname;
const char *categoryvalue;
- char *dirname, *xdomainname;
+ const char *dirname;
+ char *xdomainname;
char *single_locale;
char *retval;
size_t retlen;
}
if (binding == NULL)
- dirname = (char *) _nl_default_dirname;
- else if (IS_ABSOLUTE_PATH (binding->dirname))
- dirname = binding->dirname;
+ dirname = _nl_default_dirname;
else
{
- /* We have a relative path. Make it absolute now. */
- size_t dirname_len = strlen (binding->dirname) + 1;
- size_t path_max;
- char *ret;
+ dirname = binding->dirname;
+ if (!IS_ABSOLUTE_PATH (dirname))
+ {
+ /* We have a relative path. Make it absolute now. */
+ size_t dirname_len = strlen (dirname) + 1;
+ size_t path_max;
+ char *resolved_dirname;
+ char *ret;
- path_max = (unsigned int) PATH_MAX;
- path_max += 2; /* The getcwd docs say to do this. */
+ path_max = (unsigned int) PATH_MAX;
+ path_max += 2; /* The getcwd docs say to do this. */
- for (;;)
- {
- dirname = (char *) alloca (path_max + dirname_len);
- ADD_BLOCK (block_list, dirname);
+ for (;;)
+ {
+ resolved_dirname = (char *) alloca (path_max + dirname_len);
+ ADD_BLOCK (block_list, tmp_dirname);
- __set_errno (0);
- ret = getcwd (dirname, path_max);
- if (ret != NULL || errno != ERANGE)
- break;
+ __set_errno (0);
+ ret = getcwd (resolved_dirname, path_max);
+ if (ret != NULL || errno != ERANGE)
+ break;
- path_max += path_max / 2;
- path_max += PATH_INCR;
- }
+ path_max += path_max / 2;
+ path_max += PATH_INCR;
+ }
- if (ret == NULL)
- /* We cannot get the current working directory. Don't signal an
- error but simply return the default string. */
- goto return_untranslated;
+ if (ret == NULL)
+ /* We cannot get the current working directory. Don't signal an
+ error but simply return the default string. */
+ goto return_untranslated;
- stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+ stpcpy (stpcpy (strchr (resolved_dirname, '\0'), "/"), dirname);
+ dirname = resolved_dirname;
+ }
}
/* Now determine the symbolic name of CATEGORY and its value. */