[augeas-devel] [PATCH 2 of 2] Correctly handle saving to nonexistant files

David Lutterkort dlutter at redhat.com
Thu Jul 24 16:54:35 UTC 2008


3 files changed, 63 insertions(+), 4 deletions(-)
src/transform.c          |   11 ++++++---
tests/Makefile.am        |    2 -
tests/test-save-empty.sh |   54 ++++++++++++++++++++++++++++++++++++++++++++++


# HG changeset patch
# User David Lutterkort <dlutter at redhat.com>
# Date 1216918441 25200
# Node ID 48510fd51525cc169125cc72a8cfb97fe6049dac
# Parent  c6e4a3bef32dd9d4c04cc45bb69e757bad0d720a
Correctly handle saving to nonexistant files

diff -r c6e4a3bef32d -r 48510fd51525 src/transform.c
--- a/src/transform.c	Thu Jul 24 09:53:46 2008 -0700
+++ b/src/transform.c	Thu Jul 24 09:54:01 2008 -0700
@@ -448,8 +448,12 @@
     if (!(aug->flags & AUG_SAVE_NEWFILE)) {
         augorig_canon = canonicalize_file_name(augorig);
         if (augorig_canon == NULL) {
-            err_status = "canon_augorig";
-            goto done;
+            if (errno == ENOENT) {
+                augorig_canon = augorig;
+            } else {
+                err_status = "canon_augorig";
+                goto done;
+            }
         }
 
         if (aug->flags & AUG_SAVE_BACKUP) {
@@ -477,8 +481,9 @@
     lens_release(xform->lens);
     free(text);
     free(augnew);
+    if (augorig_canon != augorig)
+        free(augorig_canon);
     free(augorig);
-    free(augorig_canon);
     free(augsave);
     free_lns_error(err);
 
diff -r c6e4a3bef32d -r 48510fd51525 tests/Makefile.am
--- a/tests/Makefile.am	Thu Jul 24 09:53:46 2008 -0700
+++ b/tests/Makefile.am	Thu Jul 24 09:54:01 2008 -0700
@@ -10,7 +10,7 @@
 	libtool --mode=execute valgrind --quiet --leak-check=full ./fatest
 
 check_SCRIPTS=test-lenses.sh test-interpreter.sh test-get.sh \
-              test-put-symlink.sh
+              test-put-symlink.sh test-save-empty.sh
 
 EXTRA_DIST=augtest $(AUGTESTS) root \
 	   $(check_SCRIPTS) modules
diff -r c6e4a3bef32d -r 48510fd51525 tests/test-save-empty.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-save-empty.sh	Thu Jul 24 09:54:01 2008 -0700
@@ -0,0 +1,54 @@
+#! /bin/sh
+
+# Test that we report an error when writing to nonexistant dirs
+# but that we do create new files correctly
+
+save_hosts() {
+(augtool -r $ROOT | grep ^/augeas) <<EOF
+set /files/etc/hosts/1/ipaddr 127.0.0.1
+set /files/etc/hosts/1/canonical localhost
+save
+print /augeas/files/etc/hosts/error
+EOF
+}
+
+expected_errors() {
+cat <<EOF
+/augeas/files/etc/hosts/error = "open_augnew"
+/augeas/files/etc/hosts/error/message = "No such file or directory"
+EOF
+}
+
+ROOT=$abs_top_builddir/build/test-save-empty
+HOSTS=$ROOT/etc/hosts
+
+rm -rf $ROOT
+mkdir -p $ROOT
+ACTUAL=$(save_hosts)
+EXPECTED=$(expected_errors)
+
+if [ "$ACTUAL" != "$EXPECTED" ]
+then
+    echo "No error on missing /etc directory"
+    exit 1
+fi
+
+mkdir -p $ROOT/etc
+ACTUAL=$(save_hosts)
+if [ -n "$ACTUAL" ] ; then
+    echo "Error creating file:"
+    echo $ACTUAL
+    exit 1
+fi
+
+if [ ! -f $HOSTS ] ; then
+    echo "File ${HOSTS} was not created"
+    exit 1
+fi
+
+echo $'127.0.0.1\tlocalhost' > $HOSTS.expected
+
+if ! cmp $HOSTS $HOSTS.expected > /dev/null 2>&1 ; then
+    echo "Contents of $HOSTS are incorrect"
+    exit 1
+fi




More information about the augeas-devel mailing list