Optimize libnss_files initialization
authorUlrich Drepper <drepper@gmail.com>
Wed, 28 Sep 2011 14:01:13 +0000 (10:01 -0400)
committerUlrich Drepper <drepper@gmail.com>
Wed, 28 Sep 2011 14:01:13 +0000 (10:01 -0400)
ChangeLog
nss/nss_files/files-init.c

index d50b768..a8ccdac 100644 (file)
--- 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.
index cc6822d..b33cc3e 100644 (file)
 #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);
 }