[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