This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.18-317-g484c12f


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  484c12fb1e3664fb434291234ea5787c5e3df4f5 (commit)
      from  de5d4f4c8a426564690197469b0beacfc31a5e35 (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=484c12fb1e3664fb434291234ea5787c5e3df4f5

commit 484c12fb1e3664fb434291234ea5787c5e3df4f5
Author: Carlos O'Donell <carlos@redhat.com>
Date:   Fri Oct 18 23:41:30 2013 -0400

    Enhance localedef --list-archive option.
    
    The localedef --list-archive option claims that it can
    accept a [file] argument and list the contents of that
    archive. The support was never implemented. This patch
    adds that support and allows --list-archive to work as
    expected. You can now use localedef to list the contents
    of arbitrary locale archives by using:
    ./localedef --list-archive file

diff --git a/ChangeLog b/ChangeLog
index cb3651a..c72611e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2013-10-18  Carlos O'Donell  <carlos@redhat.com>
+
+	* locale/locarchive.h (struct locarhandle): Add fname.
+	* locale/programs/localedef.c (main): Pass ARGV[remaining]
+	if an optional argument was specified to --list-archive,
+	otherwise NULL.
+	* locale/programs/locarchive.c (show_archive_content): Take new
+	argument fname and pass it via ah.fname to open_archive.
+	* locale/programs/localedef.h: Update decl.
+	(open_archive): If AH->fname is non-null, open that file
+	rather than the default file name, and don't ignore ENOENT.
+	(create_archive): Set AH.fname to NULL.
+	(delete_locales_from_archive): Likewise.
+	(add_locales_to_archive): Likewise.
+	* locale/programs/locfile.c (write_all_categories): Likewise.
+
 2013-10-18  Joseph Myers  <joseph@codesourcery.com>
 	    Aldy Hernandez  <aldyh@redhat.com>
 
diff --git a/locale/locarchive.h b/locale/locarchive.h
index f2d8477..fec3b1a 100644
--- a/locale/locarchive.h
+++ b/locale/locarchive.h
@@ -80,6 +80,8 @@ struct locrecent
 
 struct locarhandle
 {
+  /* Full path to the locale archive file.  */
+  const char *fname;
   int fd;
   void *addr;
   size_t mmaped;
diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c
index 8b9866a..d664232 100644
--- a/locale/programs/localedef.c
+++ b/locale/programs/localedef.c
@@ -209,7 +209,7 @@ main (int argc, char *argv[])
 
   /* Handle a few special cases.  */
   if (list_archive)
-    show_archive_content (verbose);
+    show_archive_content (remaining > 1 ? argv[remaining] : NULL, verbose);
   if (add_to_archive)
     return add_locales_to_archive (argc - remaining, &argv[remaining],
 				   replace_archive);
diff --git a/locale/programs/localedef.h b/locale/programs/localedef.h
index e010c72..5a05a2e 100644
--- a/locale/programs/localedef.h
+++ b/locale/programs/localedef.h
@@ -170,7 +170,9 @@ extern int add_locales_to_archive (size_t nlist, char *list[], bool replace);
 /* Removed named locales from archive.  */
 extern int delete_locales_from_archive (size_t nlist, char *list[]);
 
-/* List content of locale archive.  */
-extern void show_archive_content (int verbose) __attribute__ ((noreturn));
+/* List content of locale archive. If FNAME is non-null use that as
+   the locale archive to list, otherwise the default.  */
+extern void show_archive_content (const char *fname,
+				  int verbose) __attribute__ ((noreturn));
 
 #endif /* localedef.h */
diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
index e2a30b5..e796865 100644
--- a/locale/programs/locarchive.c
+++ b/locale/programs/locarchive.c
@@ -223,6 +223,7 @@ create_archive (const char *archivefname, struct locarhandle *ah)
 	     _("cannot change mode of new locale archive"));
     }
 
+  ah->fname = NULL;
   ah->fd = fd;
   ah->mmap_base = mmap_base;
   ah->mmap_len = mmap_len;
@@ -562,11 +563,17 @@ open_archive (struct locarhandle *ah, bool readonly)
   struct locarhead head;
   int retry = 0;
   size_t prefix_len = output_prefix ? strlen (output_prefix) : 0;
-  char archivefname[prefix_len + sizeof (ARCHIVE_NAME)];
+  char default_fname[prefix_len + sizeof (ARCHIVE_NAME)];
+  char *archivefname = ah->fname;
 
-  if (output_prefix)
-    memcpy (archivefname, output_prefix, prefix_len);
-  strcpy (archivefname + prefix_len, ARCHIVE_NAME);
+  /* If ah has a non-NULL fname open that otherwise open the default.  */
+  if (archivefname == NULL)
+    {
+      archivefname = default_fname;
+      if (output_prefix)
+        memcpy (archivefname, output_prefix, prefix_len);
+      strcpy (archivefname + prefix_len, ARCHIVE_NAME);
+    }
 
   while (1)
     {
@@ -574,8 +581,11 @@ open_archive (struct locarhandle *ah, bool readonly)
       fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR);
       if (fd == -1)
 	{
-	  /* Maybe the file does not yet exist.  */
-	  if (errno == ENOENT)
+	  /* Maybe the file does not yet exist? If we are opening
+	     the default locale archive we ignore the failure and
+	     list an empty archive, otherwise we print an error
+	     and exit.  */
+	  if (errno == ENOENT && archivefname == default_fname)
 	    {
 	      if (readonly)
 		{
@@ -1329,6 +1339,7 @@ add_locales_to_archive (nlist, list, replace)
 
   /* Open the archive.  This call never returns if we cannot
      successfully open the archive.  */
+  ah.fname = NULL;
   open_archive (&ah, false);
 
   while (nlist-- > 0)
@@ -1528,6 +1539,7 @@ delete_locales_from_archive (nlist, list)
 
   /* Open the archive.  This call never returns if we cannot
      successfully open the archive.  */
+  ah.fname = NULL;
   open_archive (&ah, false);
 
   head = ah.addr;
@@ -1617,7 +1629,7 @@ dataentcmp (const void *a, const void *b)
 
 
 void
-show_archive_content (int verbose)
+show_archive_content (const char *fname, int verbose)
 {
   struct locarhandle ah;
   struct locarhead *head;
@@ -1627,6 +1639,7 @@ show_archive_content (int verbose)
 
   /* Open the archive.  This call never returns if we cannot
      successfully open the archive.  */
+  ah.fname = fname;
   open_archive (&ah, true);
 
   head = ah.addr;
diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
index 3e76ec9..ef7adbf 100644
--- a/locale/programs/locfile.c
+++ b/locale/programs/locfile.c
@@ -343,6 +343,7 @@ write_all_categories (struct localedef_t *definitions,
 
       /* Open the archive.  This call never returns if we cannot
 	 successfully open the archive.  */
+      ah.fname = NULL;
       open_archive (&ah, false);
 
       if (add_locale_to_archive (&ah, locname, to_archive, true) != 0)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                    |   16 ++++++++++++++++
 locale/locarchive.h          |    2 ++
 locale/programs/localedef.c  |    2 +-
 locale/programs/localedef.h  |    6 ++++--
 locale/programs/locarchive.c |   27 ++++++++++++++++++++-------
 locale/programs/locfile.c    |    1 +
 6 files changed, 44 insertions(+), 10 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]