about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-09-28 10:01:13 -0400
committerUlrich Drepper <drepper@gmail.com>2011-09-28 10:01:13 -0400
commit68577918437e2ccfd6bd2836892f59ef42994963 (patch)
tree6c4999f4afb4b6b809ec3bb3b93a656f82e16aeb
parent68822d74268d003ba9dec772f5f11c8b670ca136 (diff)
downloadglibc-68577918437e2ccfd6bd2836892f59ef42994963.tar.gz
glibc-68577918437e2ccfd6bd2836892f59ef42994963.tar.xz
glibc-68577918437e2ccfd6bd2836892f59ef42994963.zip
Optimize libnss_files initialization
-rw-r--r--ChangeLog5
-rw-r--r--nss/nss_files/files-init.c53
2 files changed, 23 insertions, 35 deletions
diff --git a/ChangeLog b/ChangeLog
index d50b768acc..a8ccdacc77 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-28  Ulrich Drepper  <drepper@gmail.com>
+
+	* nss/nss_files/files-init.c (_nss_files_init): Use static
+	initialization for all the *_traced_file variables.
+
 2011-09-28  Andreas Schwab  <schwab@redhat.com>
 
 	* sysdeps/powerpc/fpu/libm-test-ulps: Adjust ULPs for jn tests.
diff --git a/nss/nss_files/files-init.c b/nss/nss_files/files-init.c
index cc6822d305..b33cc3e88f 100644
--- a/nss/nss_files/files-init.c
+++ b/nss/nss_files/files-init.c
@@ -20,53 +20,36 @@
 #include <nscd/nscd.h>
 
 
-static union
-{
-  struct traced_file file;
-  char buf[sizeof (struct traced_file) + sizeof ("/etc/passwd")];
-} pwd_traced_file;
-
-static union
-{
-  struct traced_file file;
-  char buf[sizeof (struct traced_file) + sizeof ("/etc/group")];
-} grp_traced_file;
-
-static union
-{
-  struct traced_file file;
-  char buf[sizeof (struct traced_file) + sizeof ("/etc/hosts")];
-} hst_traced_file;
-
-static union
-{
-  struct traced_file file;
-  char buf[sizeof (struct traced_file) + sizeof ("/etc/resolv.conf")];
-} resolv_traced_file;
-
-static union
-{
-  struct traced_file file;
-  char buf[sizeof (struct traced_file) + sizeof ("/etc/services")];
-} serv_traced_file;
+#define TF(id, filename, ...)					\
+static union							\
+{								\
+  struct traced_file file;					\
+  char buf[sizeof (struct traced_file) + sizeof (filename)];	\
+} id##_traced_file =						\
+  {								\
+    .file =							\
+    {								\
+      .fname = filename, ## __VA_ARGS__				\
+    }								\
+  }
+
+TF (pwd, "/etc/passwd");
+TF (grp, "/etc/group");
+TF (hst, "/etc/hosts");
+TF (resolv, "/etc/resolv.conf", .call_res_init = 1);
+TF (serv, "/etc/services");
 
 
 void
 _nss_files_init (void (*cb) (size_t, struct traced_file *))
 {
-  strcpy (pwd_traced_file.file.fname, "/etc/passwd");
   cb (pwddb, &pwd_traced_file.file);
 
-  strcpy (grp_traced_file.file.fname, "/etc/group");
   cb (grpdb, &grp_traced_file.file);
 
-  strcpy (hst_traced_file.file.fname, "/etc/hosts");
   cb (hstdb, &hst_traced_file.file);
 
-  resolv_traced_file.file.call_res_init = 1;
-  strcpy (resolv_traced_file.file.fname, "/etc/resolv.conf");
   cb (hstdb, &resolv_traced_file.file);
 
-  strcpy (serv_traced_file.file.fname, "/etc/services");
   cb (servdb, &serv_traced_file.file);
 }