From e8d5aff3543de39d5c1ab89988de26fe71110460 Mon Sep 17 00:00:00 2001 From: Andreas Waidler Date: Fri, 24 Jun 2011 16:24:55 +0200 Subject: [PATCH] Now failing cleanly when feed has two titles. --- src/fs.c | 19 ++++++++++++++----- tests_usr/{feed_title_broken.sh => feed_broken.sh} | 6 ++++++ tests_usr/feed_two_titles.rss | 10 ++++++++++ tests_usr/{item_title_broken.sh => item_broken.sh} | 0 tests_usr/tests | 4 ++-- 5 files changed, 32 insertions(+), 7 deletions(-) rename tests_usr/{feed_title_broken.sh => feed_broken.sh} (75%) create mode 100644 tests_usr/feed_two_titles.rss rename tests_usr/{item_title_broken.sh => item_broken.sh} (100%) diff --git a/src/fs.c b/src/fs.c index 79661f0..bb0fbd3 100644 --- a/src/fs.c +++ b/src/fs.c @@ -31,7 +31,6 @@ char feed_title[TEXT_BUFFER_SIZE] = { 0 }; time_t feed_date = 0; time_t feed_date_new = 0; -bool feed_is_open = false; char item_title[TEXT_BUFFER_SIZE] = { 0 }; char item_link [TEXT_BUFFER_SIZE] = { 0 }; @@ -96,13 +95,23 @@ void feed_open(const char* title) { struct stat st; + if (feed_title[0]) { + /* Feed contained title twice. The + * directory may just have been created. + * Deletion may lead to loss of previous + * mtime. We don't care; that feed is + * fucked up anyways. */ + chdir(".."); + rmdir(feed_title); + fail(111); + } + fs_buffer(feed_title, title, TEXT_BUFFER_SIZE); sanitize(feed_title); if (!stat(feed_title, &st)) feed_date = st.st_mtime; mkdir(feed_title, 0755); assert(!chdir(feed_title)); - feed_is_open = true; } @@ -115,11 +124,11 @@ void feed_flush() times[1].tv_sec = feed_date_new; times[1].tv_usec = 0; - if (!feed_is_open) return; + if (!feed_title[0]) return; assert(!chdir("..")); assert(!utimes(feed_title, times)); - feed_is_open = false; + feed_title[0] = '\0'; } @@ -143,7 +152,7 @@ void item_flush() struct timeval times[2]; char buf[FILE_NAME_LENGTH + 1] = { 0 }; const char* name_src; - assert(feed_is_open); + assert(feed_title[0]); /* snip: from set_item_date */ /* assert(item_title[0]); */ diff --git a/tests_usr/feed_title_broken.sh b/tests_usr/feed_broken.sh similarity index 75% rename from tests_usr/feed_title_broken.sh rename to tests_usr/feed_broken.sh index c80ec89..ac8d7ac 100755 --- a/tests_usr/feed_title_broken.sh +++ b/tests_usr/feed_broken.sh @@ -9,6 +9,8 @@ . ./libtests.sh feed_missing() { assert_missing feed; } +feed_exists() { assert_exists feed; } +item_missing() { assert_missing feed/item; } echo "Running agg on feed without title..." BEFORE="`ls`" @@ -18,3 +20,7 @@ agg_fail no_feed_title.rss echo "Running agg on feed with title after items..." agg_fail feed_title_after_items.rss t feed_missing + +echo "Running agg on feed with two titles..." +agg_fail feed_two_titles.rss +t feed_missing diff --git a/tests_usr/feed_two_titles.rss b/tests_usr/feed_two_titles.rss new file mode 100644 index 0000000..93dfbeb --- /dev/null +++ b/tests_usr/feed_two_titles.rss @@ -0,0 +1,10 @@ + + + + feed + feed + + item + + + diff --git a/tests_usr/item_title_broken.sh b/tests_usr/item_broken.sh similarity index 100% rename from tests_usr/item_title_broken.sh rename to tests_usr/item_broken.sh diff --git a/tests_usr/tests b/tests_usr/tests index b93bd9c..65edd8e 100755 --- a/tests_usr/tests +++ b/tests_usr/tests @@ -23,8 +23,8 @@ simple_t.sh simple_d.sh sample.sh long_item_title.sh -feed_title_broken.sh -item_title_broken.sh +feed_broken.sh +item_broken.sh sanity_f.sh sanity_t.sh sanity_d.sh -- 2.11.4.GIT