summaryrefslogtreecommitdiff
path: root/src/daisy-player.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2018-12-19 19:14:32 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2018-12-19 19:14:32 +0100
commitce6f922de24f004f9c108fc6d921ec141fb7818c (patch)
tree2e1e1b1012fb0a2f2f8cb212d8de4834b3207295 /src/daisy-player.c
parent102e19229600ac49dcfc6373ccc4ce3b135b62c8 (diff)
New upstream version 11.6.2.1
Diffstat (limited to 'src/daisy-player.c')
-rw-r--r--src/daisy-player.c193
1 files changed, 126 insertions, 67 deletions
diff --git a/src/daisy-player.c b/src/daisy-player.c
index e4bc43a..a417df5 100644
--- a/src/daisy-player.c
+++ b/src/daisy-player.c
@@ -59,7 +59,7 @@ void put_bookmark (misc_t *misc)
void get_clips (misc_t *misc, my_attribute_t *my_attribute)
{
char begin_str[MAX_STR], *begin, *orig_begin, *end;
-
+
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
return;
orig_begin = my_attribute->clip_begin;
@@ -129,6 +129,7 @@ void get_bookmark (misc_t *misc, my_attribute_t *my_attribute,
snprintf (name, len, "%s/.daisy-player/%s%s",
pw->pw_dir, misc->bookmark_title, get_mcn (misc));
local_doc = htmlParseFile (name, "UTF-8");
+ free (name);
if (! (local_reader = xmlReaderWalker (local_doc)))
{
xmlFreeDoc (local_doc);
@@ -154,7 +155,7 @@ void get_bookmark (misc_t *misc, my_attribute_t *my_attribute,
misc->elapsed_seconds = time (NULL) - misc->elapsed_seconds;
return;
} // if
- id = my_attribute->id;
+ id = strdup (my_attribute->id);
open_clips_file (misc, my_attribute, daisy[misc->current].clips_file,
daisy[misc->current].clips_anchor);
while (1)
@@ -182,8 +183,9 @@ void get_next_clips (misc_t *misc, my_attribute_t *my_attribute,
eof = 1 - get_tag_or_label (misc, my_attribute, misc->reader);
if (strcasecmp (misc->tag, "audio") == 0)
{
- misc->current_audio_file =
- malloc (strlen (misc->daisy_mp) + strlen (my_attribute->src) + 5);
+ misc->current_audio_file = realloc
+ (misc->current_audio_file,
+ strlen (misc->daisy_mp) + strlen (my_attribute->src) + 5);
get_path_name (misc->daisy_mp, convert_URL_name (misc,
my_attribute->src), misc->current_audio_file);
get_clips (misc, my_attribute);
@@ -220,14 +222,15 @@ void get_next_clips (misc_t *misc, my_attribute_t *my_attribute,
char *name;
pw = getpwuid (geteuid ());
- quit_daisy_player (misc, daisy);
+ quit_daisy_player (misc, my_attribute, daisy);
len = strlen (pw->pw_dir) + strlen (misc->bookmark_title) +
strlen (get_mcn (misc)) + 100;
name = malloc (len);
snprintf (name, len, "%s/.daisy-player/%s%s",
pw->pw_dir, misc->bookmark_title, get_mcn (misc));
unlink (name);
- _exit (EXIT_FAILURE);
+ free (name);
+ _exit (EXIT_SUCCESS);
} // if
if (daisy[misc->playing].level <= misc->level)
misc->displaying = misc->current = misc->playing;
@@ -270,7 +273,7 @@ void view_page (misc_t *misc, daisy_t *daisy)
void view_time (misc_t *misc, daisy_t *daisy)
{
float remain_seconds = 0, elapsed_seconds = 0;
-
+
if (misc->playing == -1 ||
daisy[misc->current].screen != daisy[misc->playing].screen)
return;
@@ -400,9 +403,9 @@ void start_playing (misc_t *misc, daisy_t *daisy)
failure (misc, "fork ()", errno);
case 0: // child
snprintf (tempo_str, 10, "%lf", misc->speed);
- playfile (misc, misc->tmp_wav, "wav", misc->pulseaudio_device,
+ playfile (misc->tmp_wav, "wav", misc->pulseaudio_device,
"pulseaudio", tempo_str);
- exit (EXIT_SUCCESS);
+ _exit (EXIT_SUCCESS);
default: // parent
return;
} // switch
@@ -518,7 +521,7 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
endwin ();
beep ();
printf ("%s: %s\n", misc->current_audio_file, strerror (e));
- _exit (-1);
+ _exit (EXIT_FAILURE);
} // if
madplay (misc->current_audio_file, begin, duration, out_cdr);
r = open (out_cdr, O_RDONLY);
@@ -536,7 +539,7 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
misc->current += 1;
} // while
close (w);
- playfile (misc, complete_cdr, "cdr", out_file, "wav", "1");
+ playfile (complete_cdr, "cdr", out_file, "wav", "1");
free (out_file);
free (out_cdr);
free (complete_cdr);
@@ -547,7 +550,8 @@ void write_wav (misc_t *misc, my_attribute_t *my_attribute,
wmove (misc->screenwin, daisy[misc->playing].y, daisy[misc->playing].x);
} // write_wav
-void pause_resume (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
+void pause_resume (misc_t *misc, my_attribute_t *my_attribute,
+ daisy_t *daisy)
{
if (misc->playing < 0 && misc->pause_resume_playing < 0)
return;
@@ -556,7 +560,9 @@ void pause_resume (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
if (misc->playing > -1)
{
misc->pause_resume_playing = misc->playing;
- misc->pause_resume_id = misc->current_id;
+ misc->pause_resume_id = realloc (misc->pause_resume_id,
+ strlen (misc->current_id) + 10);
+ strcpy (misc->pause_resume_id, misc->current_id);
misc->playing = -1;
misc->pause_resume_lsn_cursor = misc->lsn_cursor;
kill_player (misc);
@@ -571,13 +577,14 @@ void pause_resume (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
misc->pause_resume_lsn_cursor - 75 * 4);
return;
} // if
+
open_clips_file (misc, my_attribute, daisy[misc->playing].clips_file,
daisy[misc->playing].clips_anchor);
while (1)
{
get_next_clips (misc, my_attribute, daisy);
if (strcmp (misc->pause_resume_id, misc->current_id) == 0)
- {
+ {
start_playing (misc, daisy);
view_screen (misc, daisy);
return;
@@ -608,6 +615,7 @@ void store_to_disk (misc_t *misc, my_attribute_t *my_attribute,
write_wav (misc, my_attribute, daisy, str);
if (playing > -1)
pause_resume (misc, my_attribute, daisy);
+ free (str);
view_screen (misc, daisy);
} // store_to_disk
@@ -676,6 +684,8 @@ void help (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
wprintw (misc->screenwin, "%s\n", gettext
("L - switch to previous level"));
wprintw (misc->screenwin, "%s\n", gettext
+ ("m - mute sound output on/off"));
+ wprintw (misc->screenwin, "%s\n", gettext
("n - search forwards"));
wprintw (misc->screenwin, "%s\n", gettext
("N - search backwards"));
@@ -704,7 +714,7 @@ void help (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy)
} // help
void previous_item (misc_t *misc, daisy_t *daisy)
-{
+{
if (misc->current == 0)
return;
while (daisy[misc->current].level > misc->level)
@@ -716,7 +726,7 @@ void previous_item (misc_t *misc, daisy_t *daisy)
} // previous_item
void next_item (misc_t *misc, daisy_t *daisy)
-{
+{
if (misc->current >= misc->total_items - 1)
{
beep ();
@@ -737,7 +747,7 @@ void next_item (misc_t *misc, daisy_t *daisy)
void calculate_times_3 (misc_t *misc, my_attribute_t *my_attribute,
daisy_t *daisy)
-{
+{
int x;
xmlTextReaderPtr parse;
htmlDocPtr doc;
@@ -819,7 +829,7 @@ void calculate_times_3 (misc_t *misc, my_attribute_t *my_attribute,
if (misc->total_time == 0)
{
beep ();
- quit_daisy_player (misc, daisy);
+ quit_daisy_player (misc, my_attribute, daisy);
printf ("%s\n", gettext (
"This book has no audio. Play this book with eBook-speaker"));
_exit (EXIT_FAILURE);
@@ -855,7 +865,7 @@ void change_level (misc_t *misc, my_attribute_t *my_attribute,
previous_item (misc, daisy);
view_screen (misc, daisy);
wmove (misc->screenwin, daisy[misc->current].y, daisy[misc->current].x);
-} // change_level
+} // change_level
void load_xml (misc_t *misc, my_attribute_t *my_attribute)
{
@@ -884,7 +894,7 @@ void load_xml (misc_t *misc, my_attribute_t *my_attribute)
} // load_xml
void save_xml (misc_t *misc)
-{
+{
struct passwd *pw;
char str[MAX_STR];
xmlTextWriterPtr writer;
@@ -908,19 +918,23 @@ void save_xml (misc_t *misc)
xmlFreeTextWriter (writer);
} // save_xml
-void quit_daisy_player (misc_t *misc, daisy_t *daisy)
+void quit_daisy_player (misc_t *misc, my_attribute_t *my_attribute,
+ daisy_t *daisy)
{
view_screen (misc, daisy);
endwin ();
+ system ("reset");
if (misc->cd_type != CDIO_DISC_MODE_CD_DA)
xmlTextReaderClose (misc->reader);
kill_player (misc);
put_bookmark (misc);
save_xml (misc);
- close (misc->tmp_wav_fd);
+ if (misc->tmp_wav_fd > -1)
+ close (misc->tmp_wav_fd);
unlink (misc->tmp_wav);
puts ("");
remove_tmp_dir (misc);
+ free_all (misc, my_attribute, daisy);
if (misc->mounted_by_daisy_player == 0)
return;
snprintf (misc->cmd, MAX_CMD,
@@ -1033,7 +1047,7 @@ void search (misc_t *misc, my_attribute_t *my_attribute, daisy_t *daisy,
} // search
void go_to_time (misc_t *misc, daisy_t *daisy, my_attribute_t *my_attribute)
-{
+{
char time_str[10];
int secs;
@@ -1080,6 +1094,7 @@ void go_to_time (misc_t *misc, daisy_t *daisy, my_attribute_t *my_attribute)
misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
daisy[misc->current].first_lsn + (secs * 75));
misc->elapsed_seconds = time (NULL) - secs;
+ free (misc->prev_id);
misc->prev_id = strdup (misc->current_id);
return;
} // if
@@ -1088,8 +1103,9 @@ void go_to_time (misc_t *misc, daisy_t *daisy, my_attribute_t *my_attribute)
open_clips_file (misc, my_attribute, daisy[misc->current].clips_file,
daisy[misc->current].clips_anchor);
+ free (misc->current_id);
misc->current_id = strdup (daisy[misc->current].first_id);
- do
+ do
{
get_next_clips (misc, my_attribute, daisy);
} while (misc->clip_begin / misc->speed < secs);
@@ -1148,6 +1164,7 @@ void skip_left (misc_t *misc, my_attribute_t *my_attribute,
misc->current_page_number = daisy[misc->current].page_number;
open_clips_file (misc, my_attribute, daisy[misc->playing].clips_file,
daisy[misc->playing].clips_anchor);
+ free (misc->current_id);
misc->current_id = strdup (daisy[misc->playing].first_id);
while (1)
{
@@ -1197,7 +1214,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
if (misc->cd_type != CDIO_DISC_MODE_CD_DA && misc->has_audio_tag == 0)
{
beep ();
- quit_daisy_player (misc, daisy);
+ quit_daisy_player (misc, my_attribute, daisy);
printf ("%s\n", gettext (
"This book has no audio. Play this book with eBook-speaker"));
_exit (-1);
@@ -1211,6 +1228,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
misc->just_this_item = -1;
view_screen (misc, daisy);
misc->playing = misc->displaying = misc->current;
+ free (misc->current_id);
misc->current_id = strdup ("");
misc->current_page_number = daisy[misc->playing].page_number;
if (misc->player_pid > -1)
@@ -1235,8 +1253,9 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
"cd \"%s\"; \"%s\" \"%s\" -d %s\n", wd, PACKAGE,
misc->daisy_mp, misc->pulseaudio_device);
switch (system (str));
- quit_daisy_player (misc, daisy);
- _exit (0);
+ free (str);
+ quit_daisy_player (misc, my_attribute, daisy);
+ _exit (EXIT_SUCCESS);
} // if
if (misc->cd_type == CDIO_DISC_MODE_CD_DA)
{
@@ -1285,7 +1304,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
beep ();
break;
} // if
- quit_daisy_player (misc, daisy);
+ quit_daisy_player (misc, my_attribute, daisy);
snprintf (misc->cmd, MAX_CMD, "eject -mp %s", misc->cd_dev);
switch (system (misc->cmd));
_exit (0);
@@ -1374,6 +1393,13 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
} // if
change_level (misc, my_attribute, daisy, 'L');
break;
+ case 'm':
+ if (fork () == 0)
+ {
+ pactl ("set-sink-mute", misc->pulseaudio_device, "toggle");
+ _exit (EXIT_SUCCESS);
+ } // if
+ break;
case 'n':
if (misc->discinfo)
{
@@ -1407,8 +1433,8 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
save_xml (misc);
break;
case 'q':
- quit_daisy_player (misc, daisy);
- exit (EXIT_SUCCESS);
+ quit_daisy_player (misc, my_attribute, daisy);
+ return;
case 's':
kill_player (misc);
if (misc->cd_type != CDIO_DISC_MODE_CD_DA)
@@ -1458,7 +1484,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
char *str;
pw = getpwuid (geteuid ());
- quit_daisy_player (misc, daisy);
+ quit_daisy_player (misc, my_attribute, daisy);
len = strlen (pw->pw_dir) +
strlen (misc->bookmark_title) +
strlen (get_mcn (misc) + 100);
@@ -1466,7 +1492,8 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
snprintf (str, len, "%s/.daisy-player/%s%s",
pw->pw_dir, misc->bookmark_title, get_mcn (misc));
unlink (str);
- _exit (0);
+ free (str);
+ _exit (EXIT_SUCCESS);
} // if
} // if
misc->player_pid = play_track (misc, misc->pulseaudio_device, "pulseaudio",
@@ -1561,18 +1588,18 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
case '1':
if (fork () == 0)
{
- pactl (misc->pulseaudio_device, "-5%");
- _exit (0);
+ pactl ("set-sink-volume", misc->pulseaudio_device, "-5%");
+ _exit (EXIT_SUCCESS);
} // if
break;
case 'V':
case '7':
if (fork () == 0)
{
- pactl (misc->pulseaudio_device, "+5%");
- _exit (0);
- } // if
- break;
+ pactl ("set-sink-volume", misc->pulseaudio_device, "+5%");
+ _exit (EXIT_SUCCESS);
+ } // if
+ break;
default:
beep ();
break;
@@ -1625,7 +1652,7 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
char *str;
pw = getpwuid (geteuid ());
- quit_daisy_player (misc, daisy);
+ quit_daisy_player (misc, my_attribute, daisy);
len = strlen (pw->pw_dir) +
strlen (misc->bookmark_title) +
strlen (get_mcn (misc)) + 100;
@@ -1633,7 +1660,8 @@ void browse (misc_t *misc, my_attribute_t *my_attribute,
snprintf (str, len, "%s/.daisy-player/%s%s",
pw->pw_dir, misc->bookmark_title, get_mcn (misc));
unlink (str);
- _exit (0);
+ free (str);
+ return;
} // if
if (misc->just_this_item > -1)
{
@@ -1683,8 +1711,10 @@ char *get_mount_point (misc_t *misc)
{
misc->daisy_mp = strdup (strchr (str, ' ') + 1);
*strchr (misc->daisy_mp, ' ') = 0;
+ free (str);
return misc->daisy_mp;
} // if
+ free (str);
return NULL;
} // get_mount_point
@@ -1777,9 +1807,8 @@ void handle_discinfo (misc_t *misc, my_attribute_t *my_attribute,
int main (int argc, char *argv[])
{
-
int opt;
- char str[MAX_STR], DISCINFO_HTML[MAX_STR], *start_wd;
+ char str[MAX_STR], DISCINFO_HTML[MAX_STR];
char *c_opt, *d_opt, cddb_opt;
misc_t misc;
my_attribute_t my_attribute;
@@ -1795,21 +1824,29 @@ int main (int argc, char *argv[])
misc.cd_type = -1;
misc.ignore_bookmark = 0;
*misc.bookmark_title = 0;
+ misc.daisy_mp = malloc (10);
+ *misc.daisy_mp = 0;;
misc.current_id = strdup ("");
- misc.prev_id = misc.audio_id = strdup ("");
+ misc.prev_id = strdup ("");
+ misc.audio_id = strdup ("");
+ misc.current_audio_file = strdup ("");
+ *misc.pulseaudio_device = 0;
+ misc.pause_resume_id = strdup ("");
+ *misc.search_str = 0;
misc.total_time = 0;
*misc.daisy_title = 0;
*misc.ncc_html = 0;
strncpy (misc.cd_dev, "/dev/sr0", MAX_STR - 1);
+ my_attribute.id = strdup ("");
+ my_attribute.idref = strdup ("");
+ my_attribute.src = strdup ("");
sigfillset (&usr_action.sa_mask);
usr_action.sa_handler = player_ended;
- usr_action.sa_flags = 0;
+ usr_action.sa_flags = SA_RESTART;
sigaction (SIGCHLD, &usr_action, NULL);
*misc.xmlversion = 0;
make_tmp_dir (&misc);
- misc.pulseaudio_device = strdup ("");
misc.cddb_flag = 'y';
- misc.pause_resume_id = strdup ("");
if (! setlocale (LC_ALL, ""))
failure (&misc, "setlocale ()", errno);
if (! setlocale (LC_NUMERIC, "C"))
@@ -1817,7 +1854,6 @@ int main (int argc, char *argv[])
textdomain (PACKAGE);
snprintf (str, MAX_STR, "%s/", LOCALEDIR);
bindtextdomain (PACKAGE, str);
- start_wd = strdup (get_current_dir_name ());
opterr = 0;
misc.use_OPF = misc.use_NCX = 0;
c_opt = d_opt = NULL;
@@ -1831,11 +1867,10 @@ int main (int argc, char *argv[])
c_opt = strdup (misc.cd_dev);
break;
case 'd':
- misc.pulseaudio_device = strdup (optarg);
+ strcpy (misc.pulseaudio_device, optarg);
d_opt = strdup (misc.pulseaudio_device);
break;
case 'h':
- free (start_wd);
remove_tmp_dir (&misc);
usage (0);
break;
@@ -1877,7 +1912,7 @@ int main (int argc, char *argv[])
if (c_opt)
strncpy (misc.cd_dev, c_opt, MAX_STR - 1);
if (d_opt)
- misc.pulseaudio_device = strdup (d_opt);
+ strcpy (misc.pulseaudio_device, d_opt);
if (cddb_opt)
misc.cddb_flag = cddb_opt;
initscr ();
@@ -1911,7 +1946,7 @@ int main (int argc, char *argv[])
beep ();
remove_tmp_dir (&misc);
printf ("%s: %s\n", argv[optind], strerror (e));
- _exit (1);
+ _exit (EXIT_FAILURE);
} // if
// determine filetype
@@ -1941,11 +1976,10 @@ int main (int argc, char *argv[])
else
{
// relative path
- misc.daisy_mp = malloc (strlen (start_wd) +
- strlen (argv[optind]) + 5);
- strcpy (misc.daisy_mp, start_wd);
- strcat (misc.daisy_mp, "/");
- strcat (misc.daisy_mp, argv[optind]);
+ misc.daisy_mp = realloc (misc.daisy_mp,
+ strlen (get_current_dir_name ()) + strlen (argv[optind]) + 5);
+ sprintf (misc.daisy_mp, "%s/%s",
+ get_current_dir_name (), argv[optind]);
} // if
} // directory
else
@@ -1977,8 +2011,8 @@ int main (int argc, char *argv[])
if (strcasecmp (dirent->d_name, ".") == 0 ||
strcasecmp (dirent->d_name, "..") == 0)
continue;
- misc.daisy_mp =
- malloc (strlen (misc.tmp_dir) + strlen (dirent->d_name) + 5);
+ misc.daisy_mp = realloc (misc.daisy_mp,
+ strlen (misc.tmp_dir) + strlen (dirent->d_name) + 5);
sprintf (misc.daisy_mp, "%s/%s", misc.tmp_dir, dirent->d_name);
entries++;
} // while
@@ -2018,10 +2052,12 @@ int main (int argc, char *argv[])
misc.cd_dev);
printf ("\n%s: %s\n", misc.str, strerror (e));
fflush (stdout);
- _exit (-1);
+ _exit (EXIT_FAILURE);
} // if
if (stat (misc.cd_dev, &buf) == -1)
+ {
failure (&misc, misc.cd_dev, errno);
+ } // if
if (((buf.st_mode & S_IFMT) == S_IFBLK) != 1)
{
endwin ();
@@ -2032,7 +2068,7 @@ int main (int argc, char *argv[])
remove_tmp_dir (&misc);
printf ("\n%s is not a cd device\n", misc.cd_dev);
fflush (stdout);
- _exit (-1);
+ _exit (EXIT_FAILURE);
} // if
snprintf (misc.cmd, MAX_CMD, "eject -tp %s", misc.cd_dev);
switch (system (misc.cmd));
@@ -2048,7 +2084,7 @@ int main (int argc, char *argv[])
endwin ();
printf ("%s\n", gettext ("No Daisy CD in drive."));
remove_tmp_dir (&misc);
- _exit (0);
+ _exit (EXIT_FAILURE);
} // if
cd = cdio_open (misc.cd_dev, DRIVER_UNKNOWN);
} while (cd == NULL);
@@ -2060,7 +2096,7 @@ int main (int argc, char *argv[])
endwin ();
printf ("%s\n", gettext ("No Daisy CD in drive."));
remove_tmp_dir (&misc);
- _exit (0);
+ _exit (EXIT_FAILURE);
} // if
switch (misc.cd_type = cdio_get_discmode (cd))
{
@@ -2090,7 +2126,7 @@ int main (int argc, char *argv[])
endwin ();
printf ("%s\n", gettext ("No Daisy CD in drive."));
remove_tmp_dir (&misc);
- _exit (0);
+ _exit (EXIT_FAILURE);
} // if
snprintf (misc.cmd, MAX_CMD,
"udisksctl mount -b %s > /dev/null", misc.cd_dev);
@@ -2113,6 +2149,14 @@ int main (int argc, char *argv[])
daisy = get_number_of_tracks (&misc);
get_toc_audiocd (&misc, daisy);
misc.daisy_mp = strdup ("/tmp");
+ for (misc.current = 0; misc.current < misc.total_items; misc.current++)
+ {
+ daisy[misc.current].xml_file = strdup ("");
+ daisy[misc.current].anchor = strdup ("");
+ daisy[misc.current].clips_file = strdup ("");
+ daisy[misc.current].clips_anchor = strdup ("");
+ daisy[misc.current].orig_smil = strdup ("");
+ } // for
break;
} // TRACK_COUNT_AUDIO
case CDIO_DISC_MODE_CD_I:
@@ -2141,9 +2185,19 @@ int main (int argc, char *argv[])
remove_tmp_dir (&misc);
failure (&misc, str, e);
} // if
+ misc.current = 0;
+ misc.reader = FALSE;
if (misc.cd_type != CDIO_DISC_MODE_CD_DA)
{
daisy = create_daisy_struct (&misc, &my_attribute, daisy);
+ for (misc.current = 0; misc.current < misc.total_items; misc.current++)
+ {
+ daisy[misc.current].xml_file = strdup ("");
+ daisy[misc.current].anchor = strdup ("");
+ daisy[misc.current].clips_file = strdup ("");
+ daisy[misc.current].clips_anchor = strdup ("");
+ daisy[misc.current].orig_smil = strdup ("");
+ } // for
snprintf (DISCINFO_HTML, MAX_STR - 1, "discinfo.html");
if (access (DISCINFO_HTML, R_OK) == 0)
handle_discinfo (&misc, &my_attribute, daisy, DISCINFO_HTML);
@@ -2198,9 +2252,13 @@ int main (int argc, char *argv[])
xmlTextReaderPtr last;
if (! (doc = htmlParseFile (daisy[i].xml_file, "UTF-8")))
+ {
failure (&misc, daisy[i].xml_file, errno);
+ } // if
if (! (last = xmlReaderWalker (doc)))
+ {
failure (&misc, daisy[i].xml_file, errno);
+ } // if
while (1)
{
if (! get_tag_or_label (&misc, &my_attribute, last))
@@ -2248,14 +2306,15 @@ int main (int argc, char *argv[])
"----------------------------------------");
wprintw (misc.titlewin, "----------------------------------------");
mvwprintw (misc.titlewin, 1, 0, "%s ", gettext ("Press 'h' for help"));
- misc.level = 1;
- misc.search_str = strdup ("");
+ misc.level = 1;
snprintf (misc.tmp_wav, MAX_STR, "%s/daisy-player.wav", misc.tmp_dir);
if ((misc.tmp_wav_fd = mkstemp (misc.tmp_wav)) == 01)
+ {
failure (&misc, "mkstemp ()", errno);
+ } // if
misc.pause_resume_playing = -1;
if (misc.ignore_bookmark)
select_next_output_device (&misc, daisy);
- browse (&misc, &my_attribute, daisy, start_wd);
- return 0;
+ browse (&misc, &my_attribute, daisy, get_current_dir_name ());
+ return EXIT_SUCCESS;
} // main