diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-03-20 13:06:46 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-03-20 13:06:46 +0200 |
commit | 929d8a0d47e8741093bbfd024715a1c7a08cae9e (patch) | |
tree | d1d5d0f01e43e265d4b870fb81a3e822237eca09 /src/idop.c | |
parent | 764d7a8a1204ad4a623a051e1751d5809c40b8a8 (diff) | |
download | idest-929d8a0d47e8741093bbfd024715a1c7a08cae9e.tar.gz idest-929d8a0d47e8741093bbfd024715a1c7a08cae9e.tar.bz2 |
Improve signal handling; new option --verbose
* NEWS: Update.
* src/cmdline.opt: New option --version
* src/idop.c (safe_id3_file_update_and_close): New function.
(set_tags, del_tags): Use safe_id3_file_update_and_close.
* src/main.c (verbose_option): New variable.
(main): Print name of the file being processed, if verbose_option
is set.
Diffstat (limited to 'src/idop.c')
-rw-r--r-- | src/idop.c | 22 |
1 files changed, 19 insertions, 3 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,7 +145,8 @@ set_tags(const char *name) modified |= 1; } if (modified) - id3_file_update(file); + safe_id3_file_update_and_close(file); + else id3_file_close(file); } @@ -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); } |