From 5f268913ddfac25f8d16c3216bba23535e2bd798 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 11 May 2021 19:17:09 +0200 Subject: [PATCH] return NO if forgetting did not work because it was already forgotten earlier --- src/include/taler_json_lib.h | 4 +++- src/json/json.c | 45 +++++++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h index f61e2c0fd..bf8c22177 100644 --- a/src/include/taler_json_lib.h +++ b/src/include/taler_json_lib.h @@ -215,7 +215,9 @@ TALER_JSON_contract_mark_forgettable (json_t *json, * * @param[in,out] json some JSON object to modify * @param field name of the field to forget - * @return #GNUNET_OK on success, #GNUNET_SYSERR on error + * @return #GNUNET_OK on success, + * #GNUNET_NO if the field was already forgotten before + * #GNUNET_SYSERR on error */ int TALER_JSON_contract_part_forget (json_t *json, diff --git a/src/json/json.c b/src/json/json.c index 4b91c0c52..2c3d4a2c0 100644 --- a/src/json/json.c +++ b/src/json/json.c @@ -445,6 +445,37 @@ TALER_JSON_contract_part_forget (json_t *json, field); return GNUNET_SYSERR; } + rx = json_object_get (json, + "_forgotten"); + if (NULL == rx) + { + rx = json_object (); + if (0 != + json_object_set_new (json, + "_forgotten", + rx)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + } + if (NULL != + json_object_get (rx, + field)) + { + if (! json_is_null (json_object_get (json, + field))) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Field `%s' market as forgotten, but still exists!\n", + field); + return GNUNET_SYSERR; + } + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Already forgot field `%s'\n", + field); + return GNUNET_NO; + } salt = json_string_value (json_object_get (fg, field)); if (NULL == salt) @@ -482,20 +513,6 @@ TALER_JSON_contract_part_forget (json_t *json, return GNUNET_SYSERR; } - rx = json_object_get (json, - "_forgotten"); - if (NULL == rx) - { - rx = json_object (); - if (0 != - json_object_set_new (json, - "_forgotten", - rx)) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - } /* remember field as 'forgotten' */ if (0 != json_object_set_new (rx,