From f59b7d92eff7ffd8c96e809aa214232cb579f309 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Sat, 14 Jan 2023 00:39:06 +0100 Subject: [PATCH] Delete meta file if becomes zero. Signed-off-by: Pol Henarejos --- src/fs/file.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/fs/file.c b/src/fs/file.c index 72752e0..1bfdd36 100644 --- a/src/fs/file.c +++ b/src/fs/file.c @@ -353,17 +353,21 @@ int meta_delete(uint16_t fid) { uint16_t cfid = (tag_data[0] << 8 | tag_data[1]); if (cfid == fid) { size_t new_len = data_len-1-tag_len-format_tlv_len(tag_len, NULL); - fdata = (uint8_t *)calloc(1, new_len); - if (tpos > data) { - memcpy(fdata, data, tpos-data); + if (new_len == 0) + flash_clear_file(ef); + else { + fdata = (uint8_t *)calloc(1, new_len); + if (tpos > data) { + memcpy(fdata, data, tpos-data); + } + if (data+data_len > p) { + memcpy(fdata+(tpos-data), p, data+data_len-p); + } + int r = flash_write_data_to_file(ef, fdata, new_len); + free(fdata); + if (r != CCID_OK) + return CCID_EXEC_ERROR; } - if (data+data_len > p) { - memcpy(fdata+(tpos-data), p, data+data_len-p); - } - int r = flash_write_data_to_file(ef, fdata, new_len); - free(fdata); - if (r != CCID_OK) - return CCID_EXEC_ERROR; low_flash_available(); break; }