diff options
author | Ji-Haeng Huh <jhhuh.note@gmail.com> | 2017-03-01 16:22:25 +0100 |
---|---|---|
committer | Jörg Thalheim <joerg@thalheim.io> | 2017-03-03 16:33:16 +0100 |
commit | 85d0348e2aea1b68c9ea83daf56c6f59eb0d4a16 (patch) | |
tree | 66b52a3399bbdf6aa8541caad7b1de767cbc753a /pkgs/applications/audio/eflite | |
parent | bcef9f83c00905cfc95b00698a99ac2fa7702210 (diff) |
eflite: init at 0.4.1
fixes #23336
Diffstat (limited to 'pkgs/applications/audio/eflite')
-rw-r--r-- | pkgs/applications/audio/eflite/buf-overflow.patch | 22 | ||||
-rw-r--r-- | pkgs/applications/audio/eflite/cvs-update.patch | 98 | ||||
-rw-r--r-- | pkgs/applications/audio/eflite/default.nix | 32 | ||||
-rw-r--r-- | pkgs/applications/audio/eflite/format.patch | 11 | ||||
-rw-r--r-- | pkgs/applications/audio/eflite/link.patch | 11 |
5 files changed, 174 insertions, 0 deletions
diff --git a/pkgs/applications/audio/eflite/buf-overflow.patch b/pkgs/applications/audio/eflite/buf-overflow.patch new file mode 100644 index 0000000000000..8873aa77b0e69 --- /dev/null +++ b/pkgs/applications/audio/eflite/buf-overflow.patch @@ -0,0 +1,22 @@ +Fix buffer overflow + +--- eflite-0.4.1.orig/es.c ++++ eflite-0.4.1/es.c +@@ -329,7 +329,7 @@ + char *p; + + p = getenv("HOME"); +- sprintf(buf, "%s/.es.conf", p); ++ snprintf(buf, sizeof(buf), "%s/.es.conf", p); + fp = fopen(buf, "r"); + if (!fp) fp = fopen("/etc/es.conf", "r"); + if (!fp) return 1; +@@ -438,7 +438,7 @@ + char logname[200]; + + if ((flags & 0xffff) > DEBUG) return; +- sprintf(logname, "%s/es.log", getenv("HOME")); ++ snprintf(logname, sizeof(logname), "%s/es.log", getenv("HOME")); + va_start(arg, text); + vsnprintf(buf, 200, text, arg); + va_end(arg); diff --git a/pkgs/applications/audio/eflite/cvs-update.patch b/pkgs/applications/audio/eflite/cvs-update.patch new file mode 100644 index 0000000000000..1ceace83aa5dc --- /dev/null +++ b/pkgs/applications/audio/eflite/cvs-update.patch @@ -0,0 +1,98 @@ +--- eflite-0.4.1.orig/fs.c ++++ eflite-0.4.1/fs.c +@@ -9,7 +9,7 @@ + * GNU General Public License, as published by the Free Software + * Foundation. Please see the file COPYING for details. + * +- * $Id: fs.c,v 1.19 2007/01/18 23:58:42 mgorse Exp $ ++ * $Id: fs.c,v 1.22 2008/03/05 15:21:43 mgorse Exp $ + * + * Notes: + * +@@ -505,19 +505,6 @@ + } + } + +- +- +-static void play_audio_close(void *cancel) +-{ +- if (audiodev) +- { +- audio_drain(audiodev); +- close_audiodev(); +- // usleep(5000); +- } +-} +- +- + static inline void determine_playlen(int speed, cst_wave *wptr, int type, int *pl, int *s) + { + int playlen, skip; +@@ -573,12 +560,12 @@ + type = ac[ac_head].type; + WAVE_UNLOCK; + pthread_testcancel(); +- pthread_cleanup_push(play_audio_close, NULL); +- ++ + es_log(2, "Opening audio device."); + /* We abuse the wave mutex here to avoid being canceled + * while the audio device is being openned */ + WAVE_LOCK; ++ assert(audiodev == NULL); + audiodev = audio_open(wptr->sample_rate, wptr->num_channels, CST_AUDIO_LINEAR16); + WAVE_UNLOCK; + if (audiodev == NULL) +@@ -606,8 +593,8 @@ + #ifdef DEBUG + start_time = get_ticks_count(); + #endif +- pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); + audio_write(audiodev, wptr->samples + skip, playlen * 2); ++ pthread_testcancel(); + es_log(2, "Write took %.2f seconds.", get_ticks_count() - start_time); + } + es_log(2, "play: syncing."); +@@ -617,16 +604,16 @@ + audio_flush(audiodev); + pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); + es_log(2, "Flush took %.2f seconds.", get_ticks_count() - start_time); +- es_log(2, "play: Closing audio device"); +- close_audiodev(); +- pthread_cleanup_pop(0); +- pthread_testcancel(); +- TEXT_LOCK; ++ pthread_testcancel(); ++ ++ TEXT_LOCK; + time_left -= ((float)playlen) / wptr->sample_rate; + pthread_cond_signal(&text_condition); + TEXT_UNLOCK; + + WAVE_LOCK; ++ es_log(2, "play: Closing audio device"); ++ close_audiodev(); + ac_destroy(&ac[ac_head]); + ac_head++; + if (ac_head == ac_tail) +@@ -894,6 +881,7 @@ + WAVE_LOCK_NI; + pthread_cond_signal(&wave_condition); // necessary because we inhibit cancellation while waiting + pthread_cancel(wave_thread); ++ if (audiodev != NULL) audio_drain(audiodev); + WAVE_UNLOCK_NI; + } + +@@ -917,7 +905,10 @@ + } + + /* At this point, no thread is running */ +- ++ ++ // Make sure audio device is closed ++ close_audiodev(); ++ + /* Free any wave data */ + es_log(2, "s_clear: freeing wave data: %d", ac_tail); + for (i = 0; i < ac_tail; i++) diff --git a/pkgs/applications/audio/eflite/default.nix b/pkgs/applications/audio/eflite/default.nix new file mode 100644 index 0000000000000..36fbdbc2cc9e1 --- /dev/null +++ b/pkgs/applications/audio/eflite/default.nix @@ -0,0 +1,32 @@ +{stdenv,fetchurl,flite,alsaLib,debug ? false}: + +stdenv.mkDerivation rec { + name = "eflite-${version}"; + version = "0.4.1"; + src = fetchurl { + url = "https://sourceforge.net/projects/eflite/files/eflite/${version}/${name}.tar.gz"; + sha256 = "088p9w816s02s64grfs28gai3lnibzdjb9d1jwxzr8smbs2qbbci"; + }; + buildInputs = [ flite alsaLib ]; + configureFlags = "flite_dir=${flite} --with-audio=alsa --with-vox=cmu_us_kal16"; + patches = [ + ./buf-overflow.patch + ./cvs-update.patch + ./link.patch + ./format.patch + ]; # Patches are taken from debian. + CFLAGS = stdenv.lib.optionalString debug " -DDEBUG=2"; + meta = { + homepage = http://eflite.sourceforge.net; + description = "EFlite is a speech server for screen readers"; + longDescription = '' + EFlite is a speech server for Emacspeak and other screen + readers that allows them to interface with Festival Lite, + a free text-to-speech engine developed at the CMU Speech + Center as an off-shoot of Festival. + ''; + license = stdenv.lib.licenses.gpl2; + platforms = stdenv.lib.platforms.linux; + maintainers = with stdenv.lib.maintainers; [ jhhuh ]; + }; +} diff --git a/pkgs/applications/audio/eflite/format.patch b/pkgs/applications/audio/eflite/format.patch new file mode 100644 index 0000000000000..d1a81aac48012 --- /dev/null +++ b/pkgs/applications/audio/eflite/format.patch @@ -0,0 +1,11 @@ +--- eflite-0.4.1.orig/es.c 2017-03-02 14:38:36.009731423 +0100 ++++ eflite-0.4.1/es.c 2017-03-02 14:39:06.285894934 +0100 +@@ -449,7 +449,7 @@ + fclose(fp); + if (flags & LOG_STDERR) + { +- fprintf(stderr, buf); ++ fprintf(stderr, "%s", buf); + fprintf(stderr, "\n"); + } + #endif diff --git a/pkgs/applications/audio/eflite/link.patch b/pkgs/applications/audio/eflite/link.patch new file mode 100644 index 0000000000000..73c69da965c30 --- /dev/null +++ b/pkgs/applications/audio/eflite/link.patch @@ -0,0 +1,11 @@ +--- eflite-0.4.1/Makefile.in 2007-01-19 01:01:09.000000000 +0100 ++++ eflite-0.4.1-new/Makefile.in 2017-03-01 23:25:34.223615492 +0100 +@@ -34,7 +34,7 @@ + $(CC) $(LDFLAGS) -o $@ $^ -lm $(LIBS) $(FLITE_LIBS) $(AUDIOLIBS) + + fs.o: fs.c +- $(CC) $(CFLAGS) @AUDIODEFS@ -I. -I$(flite_include_dir) -DREGISTER_VOX=register_$(subst cmu_us_kal16,cmu_us_kal,$(FL_VOX)) -DSTANDALONE -DEFLITE -c -o $@ $< ++ $(CC) $(CFLAGS) @AUDIODEFS@ -I. -I$(flite_include_dir) -DREGISTER_VOX=register_$(FL_VOX) -DSTANDALONE -DEFLITE -c -o $@ $< + + tone.o: tone.c + $(CC) $(CFLAGS) -I$(flite_include_dir) -DEFLITE -c -o $@ $< |