aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-03-20 13:06:46 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2011-03-20 13:06:46 +0200
commit929d8a0d47e8741093bbfd024715a1c7a08cae9e (patch)
treed1d5d0f01e43e265d4b870fb81a3e822237eca09
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.
-rw-r--r--NEWS5
-rw-r--r--src/cmdline.opt6
-rw-r--r--src/idop.c24
-rw-r--r--src/main.c9
4 files changed, 37 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index 03e4b6c..602a4b7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-IdEst -- history of user-visible changes. 2010-04-13
+IdEst -- history of user-visible changes. 2011-03-20
Copyright (C) 2009-2011 Sergey Poznyakoff
See the end of file for copying conditions.
@@ -7,6 +7,9 @@ Please send bug reports to <gray@gnu.org.ua>
Version 1.1.90 (Git)
+* New option --verbose
+* Improve signal handling
+
Version 1.1, 2009-03-29
diff --git a/src/cmdline.opt b/src/cmdline.opt
index df8e26c..686ca0a 100644
--- a/src/cmdline.opt
+++ b/src/cmdline.opt
@@ -81,6 +81,12 @@ BEGIN
latin1_option = 1;
END
+OPTION(verbose,v,,
+ [<verbosely list files processed>])
+BEGIN
+ verbose_option = 1;
+END
+
GROUP([<Backup options>])
OPTION(backup,,[CONTROL],
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);
}
diff --git a/src/main.c b/src/main.c
index c19cd6c..70d58f9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -21,6 +21,7 @@ unsigned convert_version;
int latin1_option = 0;
enum backup_type backup_type = no_backups;
char *backup_dir;
+int verbose_option = 0;
int all_frames = 0;
gl_list_t ed_list;
@@ -339,8 +340,12 @@ main(int argc, char **argv)
if (convert_version)
mode = MODE_MOD;
- while (argc--)
- id3_mode[mode](*argv++);
+ while (argc--) {
+ char *name = *argv++;
+ if (verbose_option)
+ printf("%s:\n", name);
+ id3_mode[mode](name);
+ }
exit(0);
}

Return to:

Send suggestions and report system problems to the System administrator.