summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/filters.cc31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/filters.cc b/src/filters.cc
index aa532ab6..2926eb08 100644
--- a/src/filters.cc
+++ b/src/filters.cc
@@ -793,18 +793,25 @@ void transfer_details::operator()(post_t& post)
break;
case SET_ACCOUNT: {
- account_t * prev_account = temp.account;
- temp.account->remove_post(&temp);
-
- std::list<string> account_names;
- split_string(substitute.to_string(), ':', account_names);
- temp.account = create_temp_account_from_path(account_names, temps,
- xact.journal->master);
- temp.account->add_post(&temp);
-
- temp.account->add_flags(prev_account->flags());
- if (prev_account->has_xdata())
- temp.account->xdata().add_flags(prev_account->xdata().flags());
+ string account_name = substitute.to_string();
+ if (! account_name.empty() &&
+ account_name[account_name.length() - 1] != ':') {
+ account_t * prev_account = temp.account;
+ temp.account->remove_post(&temp);
+
+ account_name += ':';
+ account_name += prev_account->fullname();
+
+ std::list<string> account_names;
+ split_string(account_name, ':', account_names);
+ temp.account = create_temp_account_from_path(account_names, temps,
+ xact.journal->master);
+ temp.account->add_post(&temp);
+
+ temp.account->add_flags(prev_account->flags());
+ if (prev_account->has_xdata())
+ temp.account->xdata().add_flags(prev_account->xdata().flags());
+ }
break;
}