This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.25-543-g9695dd0
- From: fw at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Jun 2017 14:51:25 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.25-543-g9695dd0
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 9695dd0c9309712ed8e9c17a7040fe7af347f2dc (commit)
from e535139e82e5a4bb0ed63b0b5165f03a9b2d0e52 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=9695dd0c9309712ed8e9c17a7040fe7af347f2dc
commit 9695dd0c9309712ed8e9c17a7040fe7af347f2dc
Author: Florian Weimer <fweimer@redhat.com>
Date: Wed Jun 21 16:31:31 2017 +0200
DCIGETTEXT: Use getcwd, asprintf to construct absolute pathname
diff --git a/ChangeLog b/ChangeLog
index 22889ee..2d07c20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-06-21 Florian Weimer <fweimer@redhat.com>
+
+ * intl/dcigettext.c (DCIGETTEXT): Use getcwd (NULL, 0) and
+ asprintf to construct an absolute pathname.
+
2017-06-21 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* misc/tst-preadvwritev2-common.c: New file.
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
index d97746c..f63b34b 100644
--- a/intl/dcigettext.c
+++ b/intl/dcigettext.c
@@ -59,6 +59,7 @@ extern int errno;
#include <stddef.h>
#include <stdlib.h>
+#include <stdio.h>
#include <string.h>
#if defined HAVE_UNISTD_H || defined _LIBC
@@ -495,6 +496,7 @@ DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
const char *categoryname;
const char *categoryvalue;
const char *dirname;
+ char *xdirname = NULL;
char *xdomainname;
char *single_locale;
char *retval;
@@ -624,35 +626,17 @@ DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
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. */
-
- for (;;)
- {
- resolved_dirname = (char *) alloca (path_max + dirname_len);
- ADD_BLOCK (block_list, tmp_dirname);
-
- __set_errno (0);
- ret = getcwd (resolved_dirname, path_max);
- if (ret != NULL || errno != ERANGE)
- break;
-
- 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. */
+ char *cwd = getcwd (NULL, 0);
+ if (cwd == 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 (resolved_dirname, '\0'), "/"), dirname);
- dirname = resolved_dirname;
+ int ret = __asprintf (&xdirname, "%s/%s", cwd, dirname);
+ free (cwd);
+ if (ret < 0)
+ return NULL;
+ dirname = xdirname;
}
#ifndef IN_LIBGLOCALE
}
@@ -767,6 +751,7 @@ DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
{
/* Found the translation of MSGID1 in domain DOMAIN:
starting at RETVAL, RETLEN bytes. */
+ free (xdirname);
FREE_BLOCKS (block_list);
if (foundp == NULL)
{
@@ -850,6 +835,7 @@ DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
return_untranslated:
/* Return the untranslated MSGID. */
+ free (xdirname);
FREE_BLOCKS (block_list);
gl_rwlock_unlock (_nl_state_lock);
#ifdef _LIBC
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 5 +++++
intl/dcigettext.c | 42 ++++++++++++++----------------------------
2 files changed, 19 insertions(+), 28 deletions(-)
hooks/post-receive
--
GNU C Library master sources