summaryrefslogtreecommitdiffabout
path: root/src/idop.c
authorSergey Poznyakoff <gray@gnu.org.ua>2011-03-20 11:06:46 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2011-03-20 11:06:46 (GMT)
commit929d8a0d47e8741093bbfd024715a1c7a08cae9e (patch) (side-by-side diff)
treed1d5d0f01e43e265d4b870fb81a3e822237eca09 /src/idop.c
parent764d7a8a1204ad4a623a051e1751d5809c40b8a8 (diff)
downloadidest-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') (more/less context) (ignore whitespace changes)
-rw-r--r--src/idop.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/idop.c b/src/idop.c
index 07b4601..f7d9d4e 100644
--- a/src/idop.c
+++ b/src/idop.c
@@ -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);
}

Return to:

Send suggestions and report system problems to the System administrator.