diff options
Diffstat (limited to 'src/idop.c')
-rw-r--r-- | src/idop.c | 24 |
1 files changed, 20 insertions, 4 deletions
@@ -15,6 +15,7 @@ along with Idest. If not, see <http://www.gnu.org/licenses/>. */ #include "idest.h" +#include <signal.h> void set_frame_value(struct id3_frame *frame, const char *value) @@ -71,6 +72,21 @@ set_frame_value(struct id3_frame *frame, const char *value) } void +safe_id3_file_update_and_close(struct id3_file *file) +{ + sigset_t set, oldset; + + sigemptyset(&set); + sigaddset(&set, SIGINT); + sigaddset(&set, SIGTERM); + + sigprocmask(SIG_BLOCK, &set, &oldset); + id3_file_update(file); + id3_file_close(file); + sigprocmask(SIG_SETMASK, &oldset, NULL); +} + +void set_tags(const char *name) { struct id3_file *file; @@ -129,8 +145,9 @@ set_tags(const char *name) modified |= 1; } if (modified) - id3_file_update(file); - id3_file_close(file); + safe_id3_file_update_and_close(file); + else + id3_file_close(file); } void @@ -148,8 +165,7 @@ del_tags(const char *name) id3_tag_options(tag, ID3_TAG_OPTION_ID3V1|ID3_TAG_OPTION_NO_ID3V2, ID3_TAG_OPTION_NO_ID3V2); - id3_file_update(file); - id3_file_close(file); + safe_id3_file_update_and_close(file); } |