odt: Restore writing creator metadata.
authorBen Pfaff <blp@gnu.org>
Fri, 12 Feb 2010 05:53:38 +0000 (21:53 -0800)
committerBen Pfaff <blp@gnu.org>
Fri, 12 Feb 2010 05:53:38 +0000 (21:53 -0800)
Commit 4d7a2ed5 "odt: Remove dependency on <pwd.h> because mingw32 does
not have it" stopped writing creator metadata to ODT output files.  This
commit adds it back, but only on systems that have <pwd.h>.

This commit also adds avoids a null pointer dereference if getpwuid()
returns NULL.  That should happen only rarely, but it is best to handle it
properly.

At John Darrington's request.

configure.ac
src/output/odt.c

index e5eb13a9ada57ffbfa7426469005cb4207593709..55bb24e4dda8068ae445c04972f72b7712060a8c 100644 (file)
@@ -194,7 +194,7 @@ fi
 PSPP_READLINE
 
 dnl Checks for header files.
-AC_CHECK_HEADERS([sys/wait.h fpu_control.h ieeefp.h fenv.h])
+AC_CHECK_HEADERS([sys/wait.h fpu_control.h ieeefp.h fenv.h pwd.h])
 
 # For gnulib.
 gl_INIT
index 66e986be71270d5beb5d1f4240915c5148d5d373..99f5e60d6ec7cb8fdb45265f424b16a37f18d133 100644 (file)
@@ -21,6 +21,9 @@
 #include <errno.h>
 #include <libgen.h>
 #include <libxml/xmlwriter.h>
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <time.h>
@@ -268,6 +271,22 @@ write_meta_data (struct odt_driver *odt)
     xmlTextWriterEndElement (w);
   }
 
+#ifdef HAVE_PWD_H
+  {
+    struct passwd *pw = getpwuid (getuid ());
+    if (pw != NULL)
+      {
+        xmlTextWriterStartElement (w, _xml ("meta:initial-creator"));
+        xmlTextWriterWriteString (w, _xml (strtok (pw->pw_gecos, ",")));
+        xmlTextWriterEndElement (w);
+
+        xmlTextWriterStartElement (w, _xml ("dc:creator"));
+        xmlTextWriterWriteString (w, _xml (strtok (pw->pw_gecos, ",")));
+        xmlTextWriterEndElement (w);
+      }
+  }
+#endif
+
   xmlTextWriterEndElement (w);
   xmlTextWriterEndElement (w);
   xmlTextWriterEndDocument (w);