paraslash.git
6 years agogui: Get rid of do_select()'s mode parameter and call it only once.
Andre Noll [Sat, 29 Mar 2014 12:48:03 +0000 (13:48 +0100)]
gui: Get rid of do_select()'s mode parameter and call it only once.

The current code calls do_select() from three different locations. The
mode parameter indicates whether a command is currently running
and if it is a display command or an external command (where curses
is disabled).  This is unnecessarily complex as we can tell from the
values of the command_fd[] array and the cmd_pid variable which mode
we are in.

This commit introduces get_select_mode() which looks at these variables
and returns the current mode. This allows to get rid of the mode
parameter of do_select() and to call do_select() only once at startup
from main(). It now runs in an endless loop, checking the current mode
in each iteration. The other two call sites, exec_and_display_cmd()
and external_cmd(), don't need to call do_select() any more.

This change removes more lines than it adds and makes the logic
of para_gui much simpler to follow. It is also the last big step
to replace the do_select() loop in favor of the standard paraslash
scheduler.

6 years agogui: Reorder functions.
Andre Noll [Sat, 29 Mar 2014 10:34:02 +0000 (11:34 +0100)]
gui: Reorder functions.

As a preparation for the removal of do_select() we need various
functions of gui.c to be in a different order. Specifically,
input_post_select() will soon call handle_command(), so the latter
function will need to be declared before the former.

Patches which move functions around are generally hard to
read, so this commit performs pure code movement only. However,
as exec_and_display_cmd() still calls do_select() we introduce a
temporary forward declaration for do_select(). It will be removed
in the next patch.

6 years agogui: Move signal handling code out of do_select().
Andre Noll [Fri, 3 Jan 2014 19:03:22 +0000 (19:03 +0000)]
gui: Move signal handling code out of do_select().

As a further preparation for employing the standard paraslash scheduler
within para_gui, this simple patch introduces signal_pre_select()
and renames handle_signal() to signal_post_select().

The signal related part of do_select() is moved to these two functions
so that do_select() is reduced to the bare minimum: one call to each
of the two new functions.

6 years agogui: Move input related code out of do_select().
Andre Noll [Fri, 3 Jan 2014 18:49:19 +0000 (18:49 +0000)]
gui: Move input related code out of do_select().

This moves the relevant part of do_select() into the new functions
input_pre_select() and input_post_select().

6 years agogui: Move external command handling out of do_select().
Andre Noll [Fri, 3 Jan 2014 18:16:51 +0000 (18:16 +0000)]
gui: Move external command handling out of do_select().

This commit moves the part of do_select() that deals with
external commands to separate functions, command_pre_select() and
command_post_select().

This change shortens do_select() considerably and is another step
towards the goal of using the paraslash scheduling system also for
para_gui.

One thing to note is that the new command_post_select() returns -1 if
both both fds are closed, i.e. when the currently running command has
terminated. This value gets translated back to zero in do_select(),
preserving the current semantics.

6 years agogui: Introduce status_post_select().
Andre Noll [Sun, 26 Jan 2014 17:14:34 +0000 (18:14 +0100)]
gui: Introduce status_post_select().

This moves stat pipe error handling into read_stat_pipe() and renames
the function to status_post_select(), which is more to the point. It
shortens do_select() a bit.

Since status_post_select() now calls print_all_items() and
clear_all_items() it had to be moved down to avoid a forward
declaration.

6 years agogui: Improve config reload.
Andre Noll [Thu, 13 Mar 2014 08:41:44 +0000 (09:41 +0100)]
gui: Improve config reload.

There are two ways to make para_gui reload its config file: Sending
SIGUSR1 and running the internal reread_conf command. When SIGUSR1
is received, signal_post_select() calls com_reread_conf(). This is
a layer violation since command handlers should only be called from
the input task.

This patch provides the generic function reread_conf() which is called
from both the command handler and from signal_post_select().

6 years agogui: Unify config file parsing.
Andre Noll [Tue, 7 Jan 2014 22:04:21 +0000 (22:04 +0000)]
gui: Unify config file parsing.

The gui config file is parsed on startup, when the reload command
is executed or when SIGUSR1 is received. In all cases we set up a
gengetopt params structure and pass its address to the gengetopt
command line parser.

This commit moves the common code to the new parse_config_file_or_die()
which does the right thing for both the startup and the reload
case. The new function also contains the logic of configfile_exists(),
so this latter function can be removed.

6 years agogui: Remove ->cols and ->lines of struct gui_window.
Andre Noll [Thu, 9 Jan 2014 23:34:11 +0000 (23:34 +0000)]
gui: Remove ->cols and ->lines of struct gui_window.

The curses library provides the getmaxyx() macro to obtain the window
geometry. It's better to use these instead of storing the number of
lines and columns in the gui_window structure because with getmaxyx()
there is no risk to have stale values gui_window structure.

While the ncurses implementation provides getmaxx() and getmaxy()
to get only the number of lines or columns, respectively, only
getmaxyx() is described in the XSI Curses standard. Hence we provide
our own version of the former two functions. These call getmaxyx()
and return one of the two numbers.

With the ->cols and ->lines fields of struct gui_window gone, all
callers had to be adjusted to use either getmaxyx() or one of the
new functions.

6 years agogui: Move call to print_all_items() into init_wins().
Andre Noll [Sun, 26 Jan 2014 19:08:05 +0000 (20:08 +0100)]
gui: Move call to print_all_items() into init_wins().

All three callers of init_wins() called print_all_items() directly
thereafter. init_wins() had to be moved below print_all_items().

6 years agogui: Improve check_key_map_args().
Andre Noll [Tue, 7 Jan 2014 18:52:26 +0000 (18:52 +0000)]
gui: Improve check_key_map_args().

Simplify the code a bit, make it call die() on errors and print
the invalid key map in the error case.

6 years agogui: Combine exit functions.
Andre Noll [Tue, 7 Jan 2014 17:35:08 +0000 (17:35 +0000)]
gui: Combine exit functions.

Currently we have kill_pg_and_die(), finish(), msg_n_exit(), which
is kind of excessive. This patch replaces these three functions by
the single die() which does the right thing in all cases.

6 years agogui: Make curses_log() work also when curses is not active.
Andre Noll [Tue, 7 Jan 2014 16:55:32 +0000 (16:55 +0000)]
gui: Make curses_log() work also when curses is not active.

This allows to get rid of all fprintf(stderr, ...) constructs and
simplifies the code a bit.

6 years agogui: Parse command line options only once.
Andre Noll [Tue, 7 Jan 2014 15:59:27 +0000 (15:59 +0000)]
gui: Parse command line options only once.

There is no point in calling gui_cmdline_parser_ext() when rereading
the configuration since this parser only looks at the command line
options which never change.

Removing the call in com_reread_conf() also allows to get rid of the
global _argc and _argv variables.

6 years agogui: Clear top window only once on resize.
Andre Noll [Mon, 6 Jan 2014 18:08:16 +0000 (18:08 +0000)]
gui: Clear top window only once on resize.

init_wins() already clears the top window.

6 years agogui: Replace global variable curses_active by a function.
Andre Noll [Sun, 5 Jan 2014 20:48:29 +0000 (20:48 +0000)]
gui: Replace global variable curses_active by a function.

There is no need to store this information as we can easily compute it.

shutdown_curses() needed to be changed to cope with early failures:
On fatal errors that happen after initscr() was called but before
the top window exists, we must shut down the curses subsystem albeit
curses_active() returns false in this case.

6 years agogui: Kill struct gui_window->beg{xy}.
Andre Noll [Mon, 6 Jan 2014 16:11:56 +0000 (16:11 +0000)]
gui: Kill struct gui_window->beg{xy}.

These values are only needed in init_wins(), so we might as well use
local variables for them.

6 years agogui: Remove change_theme().
Andre Noll [Tue, 7 Jan 2014 22:08:00 +0000 (22:08 +0000)]
gui: Remove change_theme().

It's silly to have a function for this.

6 years agogui: Move windows *after* resizing them.
Andre Noll [Sun, 26 Jan 2014 19:18:00 +0000 (20:18 +0100)]
gui: Move windows *after* resizing them.

This appeared to be the reason why refresh() was needed twice.

6 years agogui: Rename public gui theme functions.
Andre Noll [Tue, 7 Jan 2014 00:40:20 +0000 (00:40 +0000)]
gui: Rename public gui theme functions.

Prefix all functions related to themes with "theme_".

6 years agoRemove chop().
Andre Noll [Tue, 7 Jan 2014 00:25:38 +0000 (00:25 +0000)]
Remove chop().

In curses_log() we currently we call chop(), which calls strlen()
to find the last character of the given string. This is unnecessary
since xvasprintf() returns this information anyway, we just have to
remember it.

With this change the last user of chop() is gone, so this patch
removes chop() from string.c.

6 years agogui: Use whline() for drawing the separator.
Andre Noll [Mon, 6 Jan 2014 02:45:28 +0000 (02:45 +0000)]
gui: Use whline() for drawing the separator.

This should be slightly more efficient.

This patch also changes the type of struct gui_theme->sep_str from
const char * to plain char and renames the field to sep_char. It must
be a single-character string anyway.

For the colorful blackness theme we now use the default character
from curses.h rather than '-'. This looks nicer. Tested with ncurses
on Linux and the curses implementation that ships with NetBSD.

6 years agogui: Remove welcome message.
Andre Noll [Tue, 7 Jan 2014 19:20:13 +0000 (19:20 +0000)]
gui: Remove welcome message.

The only information shown by print_welcome() that is not already
contained in the status bar is the name of the current theme. This
is not very interesting, so remove the function and the corresponding
color pair.

6 years agogui: Simplify print_status_bar().
Andre Noll [Sun, 26 Jan 2014 17:39:56 +0000 (18:39 +0100)]
gui: Simplify print_status_bar().

Curses is always active at this point, so remove the check. Moreover,
refreshing of all other windows is performed in init_wins(), so move
the call to wrefresh() there to be consistent. Finally, the comment
of this function is rather pointless, so remove that as well.

6 years agogui: Print the status bar only once.
Andre Noll [Mon, 6 Jan 2014 17:56:20 +0000 (17:56 +0000)]
gui: Print the status bar only once.

Currently we print it twice on startup. Remove the redundant call
to print_status_bar().

6 years agogui: Remove macro STANDARD_STATUS_BAR.
Andre Noll [Sun, 5 Jan 2014 05:03:32 +0000 (05:03 +0000)]
gui: Remove macro STANDARD_STATUS_BAR.

It's only referenced once in print_status_bar(), so we may as well
print the text there without defining a macro for it.

6 years agogui: Simplify display command execution.
Andre Noll [Fri, 3 Jan 2014 20:58:24 +0000 (20:58 +0000)]
gui: Simplify display command execution.

para_cmd() and display_cmd() are almost identical. Move the
command part into send_output() and rename this function to
exec_and_display_cmd().

6 years agogui: Don't close command fds if a key was pressed.
Andre Noll [Fri, 3 Jan 2014 18:25:44 +0000 (18:25 +0000)]
gui: Don't close command fds if a key was pressed.

Killing the command is enough, as command_post_select() will notice
the EOF condition and close these fds.

6 years agogui: Avoid magic number in enum gui_color_pair.
Andre Noll [Tue, 7 Jan 2014 17:43:58 +0000 (17:43 +0000)]
gui: Avoid magic number in enum gui_color_pair.

This way it works also if the set of status items is extended.

6 years agogui: Kill pointless initialization of top.lines in main().
Andre Noll [Mon, 6 Jan 2014 16:24:13 +0000 (16:24 +0000)]
gui: Kill pointless initialization of top.lines in main().

init_curses() sets this value anyway.

6 years agogui: Make curses_active a bool.
Andre Noll [Fri, 3 Jan 2014 22:24:25 +0000 (22:24 +0000)]
gui: Make curses_active a bool.

This variable is only used as a boolean.

6 years agogui: Rename label of check_key_map_args()
Andre Noll [Tue, 7 Jan 2014 17:47:20 +0000 (17:47 +0000)]
gui: Rename label of check_key_map_args()

The old name is misleading since the code starting at this label will
be executed unconditionally.

6 years agogui: Rename struct win_data to gui_window.
Andre Noll [Mon, 6 Jan 2014 03:33:03 +0000 (03:33 +0000)]
gui: Rename struct win_data to gui_window.

We will pass around pointers to these structures eventually, so let's
choose a better name.

6 years agogui: Add trailing newline to all log messages.
Andre Noll [Sun, 26 Jan 2014 16:00:20 +0000 (17:00 +0100)]
gui: Add trailing newline to all log messages.

Currently we have a funny mixture of the two styles. This is no problem
since curses_log() will chop the trailing newline. But let's better
be consistent.

6 years agogui: Fix some trivial whitespace and spelling issues.
Andre Noll [Sat, 29 Mar 2014 12:49:16 +0000 (13:49 +0100)]
gui: Fix some trivial whitespace and spelling issues.

6 years agogui: Remove unused struct stat_item.
Andre Noll [Sat, 4 Jan 2014 15:45:47 +0000 (15:45 +0000)]
gui: Remove unused struct stat_item.

6 years agogui: Initialize command_fds to -1.
Andre Noll [Sat, 29 Mar 2014 12:48:40 +0000 (13:48 +0100)]
gui: Initialize command_fds to -1.

We check at various locations whether the two members of the
command_fds array are negative to tell if an external command or a
display command is currently running. At startup, there is no such
command, hence the two integers of the array should be initialized
to a negative value.

6 years agogui: Use proper column number in print_in_bar().
Andre Noll [Mon, 6 Jan 2014 17:54:59 +0000 (17:54 +0000)]
gui: Use proper column number in print_in_bar().

This function modifies the input window, not the status bar
window. This bug is benign because both windows have the same number
of columns.

6 years agogui: Reset command buf offset on errors.
Andre Noll [Fri, 3 Jan 2014 23:42:38 +0000 (23:42 +0000)]
gui: Reset command buf offset on errors.

On read errors or EOF we close the pipe that corresponds to
stdout/stderr of the current display command. However, we miss to
reset the offset value of the command buffer in this case. If this
offset was positive at the time the read error occurred, we skip the
first part of the output of the next command.

Fix this by always resetting the offset after closing the pipe.

6 years agogui: Shut down curses before rereading the config file.
Andre Noll [Tue, 7 Jan 2014 16:14:12 +0000 (16:14 +0000)]
gui: Shut down curses before rereading the config file.

If the config file contains errors, gui_cmdline_parser_config_file()
calls exit() while curses is still active, leading to messed up
terminal settings. Fix this by calling shutdown_curses() before
parsing the config file, and init_curses() thereafter.

6 years agoMerge branch 't/alsa_improvements'
Andre Noll [Sat, 3 May 2014 17:56:01 +0000 (19:56 +0200)]
Merge branch 't/alsa_improvements'

Was cooking for almost two months.

* t/alsa_improvements:
  alsa: Remove pointless initialization.
  alsa_mix: Allow non-positive mixer values.
  alsa: New writer option: --buffer-time.
  alsa: Work around poll fd problems.
  alsa: Set period time.
  alsa: Also dump hardware params.
  alsa: Improve help text of --device.
  alsa: Improve documentation of struct private_alsa_write_data.
  alsa: Don't set t->error in ->pre_select().

6 years agoRemove client_disconnect().
Andre Noll [Tue, 31 Dec 2013 15:44:24 +0000 (15:44 +0000)]
Remove client_disconnect().

Everything this function does can be done as well when the task
terminates by returning negative in ->post_select().

This also avoids to leak the stream cipher structure of the previous
connection when running in interactive mode.

1,032 bytes in 1 blocks are definitely lost in loss record 61 of 85
   at 0x402994A: malloc (vg_replace_malloc.c:263)
   by 0x804C689: para_malloc (string.c:71)
   by 0x804FF87: sc_new (crypt.c:268)
   by 0x804E204: client_post_select (client_common.c:370)
   by 0x804D203: schedule (sched.c:59)
   by 0x804A2E7: main (client.c:500)

1,032 bytes in 1 blocks are definitely lost in loss record 62 of 85
   at 0x402994A: malloc (vg_replace_malloc.c:263)
   by 0x804C689: para_malloc (string.c:71)
   by 0x804FF87: sc_new (crypt.c:268)
   by 0x804E217: client_post_select (client_common.c:371)
   by 0x804D203: schedule (sched.c:59)
   by 0x804A2E7: main (client.c:500)

6 years agoFix memory leak in btr_splice_out_node().
Andre Noll [Tue, 31 Dec 2013 13:29:16 +0000 (13:29 +0000)]
Fix memory leak in btr_splice_out_node().

Commit 072391fc (Improve btr_splice_out_node(), 2013-03) modified this
function to take a pointer to a buffer tree node pointer so that the
node pointer can be invalidated after it is spliced out. However, this
also means the caller can no longer free its resources. Hence we must
free the btrn in btr_splice_out_node() in order to avoid memory leaks.

6 years agoMerge branch 't/rl_free_keymap'
Andre Noll [Tue, 22 Apr 2014 00:30:02 +0000 (02:30 +0200)]
Merge branch 't/rl_free_keymap'

Cooking since 2014-03-10.

* t/rl_free_keymap:
  build: Check whether rl_free_keymap is declared.

6 years agoversion.c: Fix year in version_text().
Andre Noll [Mon, 21 Apr 2014 04:39:52 +0000 (04:39 +0000)]
version.c: Fix year in version_text().

We want a single year here. The string got converted to a range by
mistake in commit 027f2c12.

6 years agoflac afh: Fix off-by-one bug in meta_eof_cb().
Andre Noll [Tue, 24 Dec 2013 17:49:41 +0000 (17:49 +0000)]
flac afh: Fix off-by-one bug in meta_eof_cb().

After the full file has been read, the file position equals the number
of available bytes. The eof callback did not report EOF in this case.

6 years agowma afh: Read the description field as the comment tag.
Andre Noll [Fri, 1 Nov 2013 18:11:23 +0000 (19:11 +0100)]
wma afh: Read the description field as the comment tag.

The wma audio format handler parses the entries of the ASF content
description object and interprets its fifth field as the comment tag.

This is wrong, since this field actually corresponds to the rating
information, which is usually unused. The correct field to examine
is #4.

6 years agooggdec: Remove noisy debug message.
Andre Noll [Tue, 15 Apr 2014 12:22:06 +0000 (12:22 +0000)]
oggdec: Remove noisy debug message.

Also improve the comment for this code block.

6 years agoreset version to 'git'
Andre Noll [Fri, 11 Apr 2014 12:18:57 +0000 (14:18 +0200)]
reset version to 'git'

6 years agoparaslash 0.5.2 v0.5.2
Andre Noll [Fri, 11 Apr 2014 11:52:04 +0000 (13:52 +0200)]
paraslash 0.5.2

6 years agoMerge branch 't/oggdec_latency_improvements'
Andre Noll [Wed, 9 Apr 2014 18:07:07 +0000 (20:07 +0200)]
Merge branch 't/oggdec_latency_improvements'

A single commit which was cooking since 2014-03-11.

* t/oggdec_latency_improvements:
  oggdec: Decode only OGGDEC_OUTPUT_CHUNK_SIZE many bytes per iteration.

6 years agoMerge branch 't/opusdec_busy_loop_fix'
Andre Noll [Tue, 8 Apr 2014 17:20:35 +0000 (19:20 +0200)]
Merge branch 't/opusdec_busy_loop_fix'

A single fix that was cooking since 2014-03-02.

* t/opusdec_busy_loop_fix:
  opusdec: Fix busy loop.

6 years agoRevert "Add -Wdeclaration-after-statement."
Andre Noll [Sun, 6 Apr 2014 16:52:31 +0000 (18:52 +0200)]
Revert "Add -Wdeclaration-after-statement."

This reverts commit cf517575ef0e501c963964ba4fd62aadaf795af8. It
broke our promise that paraslash still compiles with gcc-3.3.3.

6 years agoMerge branch 'maint'
Andre Noll [Sun, 6 Apr 2014 06:19:26 +0000 (08:19 +0200)]
Merge branch 'maint'

6 years agoaudiod: Avoid segfault on exit.
Andre Noll [Fri, 4 Apr 2014 12:23:44 +0000 (14:23 +0200)]
audiod: Avoid segfault on exit.

When para_audiod terminates, it calls clean_exit() which closes
all slots unconditionally, regardless of whether they are in use.
This may lead to a segfault due to an invalid read:

==25253== Invalid read of size 4
==25253==    at 0x40EBEA: close_slot (audiod.c:443)
==25253==    by 0x40FCE8: clean_exit (audiod.c:1163)
==25253==    by 0x40FD7D: signal_post_select (audiod.c:1014)
==25253==    by 0x41490A: schedule (sched.c:65)
==25253==    by 0x406BC3: main (audiod.c:1436)
==25253==  Address 0x5c19d8 is not stack'd, malloc'd or (recently) free'd

This bug was introduced 9 month ago in commit eec23a69 (audiod:
Fix memory leak on exit: close slots). Fix it by calling
close_unused_slots(). This also simplifies clean_exit() a bit.

6 years agoMerge branch 't/misc'
Andre Noll [Sun, 30 Mar 2014 16:31:57 +0000 (18:31 +0200)]
Merge branch 't/misc'

Various fixes, improvements, cleanups. Cooking since 2014-02-22.

* t/misc: (29 commits)
  build: Don't link with -lreadline if readline was not found.
  audiod: Skip NULL pointer check in compute_time_diff().
  audiod: Make compute_time_diff() return void.
  com_stat(): Remove pointless uptime variable.
  gcrypt: Fix gcc warning on Ubuntu Lucid.
  flac: Try to link also without -logg.
  version.c: Fix comment of version_single_line().
  doxygen: Expand all macros, in particular config.h.
  recv_common.c: Improve documentation of check_receiver_arg().
  audiod: get_time_string() comment fix.
  configure: Really print opus audio file handler if opus lib was found.
  Overhaul doxygen main page.
  afs.h: Don't try to list all supported audio formats.
  Change copyright year to 2014.
  Add link to sideband.h in doxygen main page.
  Doxify error2.c and add GPL header.
  Add -Wdeclaration-after-statement.
  Add some missing includes.
  Makefile.real: Add clean2 to the list of phony targets.
  mood.c: Fix a trivial whitespace issue.
  ...

6 years agoMerge branch 't/fade_improvements'
Andre Noll [Sun, 23 Mar 2014 18:21:37 +0000 (19:21 +0100)]
Merge branch 't/fade_improvements'

Cooking since 2014-02-08.

* t/fade_improvements:
  fade: Improve error diagnostics.
  fade: Switch to the fade-in mood *before* sleeping.
  fade: Allow to set more than one channel in sleep mode.
  fade: Implement new mode "set".
  fade: Log to stderr.

Conflicts:
error.h

6 years agoMerge branch 't/aes'
Andre Noll [Sun, 16 Mar 2014 16:49:59 +0000 (17:49 +0100)]
Merge branch 't/aes'

Cooking since 2014-02-02.

* t/aes:
  Implement aes_ctr128 and prefer it over RC4.
  server: Lookup user only once.

6 years agoMerge branch 't/manual_improvements'
Andre Noll [Sun, 9 Mar 2014 14:37:18 +0000 (15:37 +0100)]
Merge branch 't/manual_improvements'

Cooking since 2014-01-25.

* t/manual_improvements:
  manual: Remove outdated sentence about para_afh.
  manual: Add description of ogg/opus.
  manual: Improve troubleshooting section.
  manual: Minor filter text improvement.

6 years agooggdec: Decode only OGGDEC_OUTPUT_CHUNK_SIZE many bytes per iteration.
Andre Noll [Mon, 23 Dec 2013 19:15:39 +0000 (19:15 +0000)]
oggdec: Decode only OGGDEC_OUTPUT_CHUNK_SIZE many bytes per iteration.

This avoids buffer underruns on slow hardware and simplifies
ogg_post_select() a bit.

6 years agoalsa: Remove pointless initialization.
Andre Noll [Fri, 27 Dec 2013 23:57:31 +0000 (23:57 +0000)]
alsa: Remove pointless initialization.

The value stored in msg is never read. Found by the clang analyzer.

6 years agoalsa_mix: Allow non-positive mixer values.
Andre Noll [Sun, 8 Sep 2013 00:36:35 +0000 (00:36 +0000)]
alsa_mix: Allow non-positive mixer values.

For the rpi the PCM range is from -10239 to 400. The math in
->set_mixer works fine for negative values.

6 years agoalsa: New writer option: --buffer-time.
Andre Noll [Mon, 9 Sep 2013 03:53:32 +0000 (03:53 +0000)]
alsa: New writer option: --buffer-time.

This removes the old way of setting of private_alsa_write_data->buffer_time

Currently we set the buffer time to the minimum of the maximum
buffer time and 500ms. This results in different values for different
hardware. In view of the introduction of the sync filter it seems to
be desirable to have more control over this value.

This patch adds the --buffer-time config option to the alsa
writer which allows to specify a suitable value, the default being
170ms. The unit of private_alsa_write_data->buffer_time is changed
from microseconds to milliseconds as this avoids to divide by 1000
in ->pre_select().

6 years agoalsa: Work around poll fd problems.
Andre Noll [Thu, 13 Jun 2013 08:53:55 +0000 (10:53 +0200)]
alsa: Work around poll fd problems.

In its ->pre_select method the alsa writer adds the alsa poll file
descriptor to the set of fds to be monitored during the next select
call. When this fd is ready for I/O, select() returns and ->post_select
is called. Currently ->post_select checks if the alsa poll fd is set
and returns early if it is not.

The problem is that on some hardware/kernel/alsa-lib combinations,
the poll fd is never marked as ready for I/O. This happens at least
on the raspberry pi with linux-3.10.10 and alsa-lib-1.0.27. The result
is no audio at all.

We address this problem in two ways:

* In alsa_init() we remember the buffer duration for later use in
->pre_select where we ask the scheduler to impose half of the duration
as an upper bound on the select timeout.

* In ->post_select, if there is input data available, we don't
check any more whether the poll fd is ready but try to write
unconditionally. On EAGAIN, we read from the poll fd to discard any
pending events.

6 years agoalsa: Set period time.
Andre Noll [Tue, 7 May 2013 09:15:07 +0000 (11:15 +0200)]
alsa: Set period time.

This is probably not necessary, but since aplay from the alsa-utils
package sets it in the same way, it can't hurt to do this.

6 years agoalsa: Also dump hardware params.
Andre Noll [Wed, 15 May 2013 20:36:36 +0000 (22:36 +0200)]
alsa: Also dump hardware params.

Since this makes the alsa output even more verbose, let's downgrade
the loglevel of config dump messages to DEBUG.

6 years agoalsa: Improve help text of --device.
Andre Noll [Sun, 8 Sep 2013 22:52:47 +0000 (22:52 +0000)]
alsa: Improve help text of --device.

The new text gives the user a hint how to find out about the devices
ALSA knows about.

6 years agoalsa: Improve documentation of struct private_alsa_write_data.
Andre Noll [Thu, 5 Sep 2013 00:57:53 +0000 (00:57 +0000)]
alsa: Improve documentation of struct private_alsa_write_data.

Remove the stale reference to writer node groups and explain how
sample_rate and channel count are determined.

6 years agoalsa: Don't set t->error in ->pre_select().
Andre Noll [Thu, 13 Jun 2013 08:54:24 +0000 (10:54 +0200)]
alsa: Don't set t->error in ->pre_select().

->pre_select() methods should never fail, and tasks should not
set this variable at all. It is ignored anyway when set there.

6 years agoMerge branch 't/cmd_improvements'
Andre Noll [Thu, 27 Feb 2014 18:10:55 +0000 (19:10 +0100)]
Merge branch 't/cmd_improvements'

Cooking since 2014-01-16.

* t/cmd_improvements:
  afs.cmd: Strip redundant "sort" from ls help output.
  audiod.cmd: Improve grab client help text.
  afs.cmd: Improve second level indenting.
  afd.cmd: Fix a trivial whitespace issue.

6 years agobuild: Check whether rl_free_keymap is declared.
Andre Noll [Wed, 26 Feb 2014 18:16:03 +0000 (19:16 +0100)]
build: Check whether rl_free_keymap is declared.

Readline versions up to and including 6.2 miss to declare the public
symbol rl_free_keymap(). We currently work around this issue by
manually declaring the function in interactive.c.

The recently released readline-6.3, however, does declare that symbol.
Since we compile with -Wredundant-decls this leads to the following
warning:

interactive.c:239:6: warning: redundant redeclaration of 'rl_free_keymap' [-Wredundant-decls]
 void rl_free_keymap(Keymap keymap);

This patch gets rid of the warning by adding a check to configure.ac
which detects whether the symbol is declared in the readline header
file. Only if it is uncdelared we declare it manually as before.

6 years agoopusdec: Fix busy loop.
Andre Noll [Sun, 23 Feb 2014 12:44:19 +0000 (13:44 +0100)]
opusdec: Fix busy loop.

This braino caused the opus decoder to request a minimal timeout
most of the time.

The bug was introduced 2013-09 in commit 14c16b65.

6 years agoMerge branch 't/sync'
Andre Noll [Sat, 22 Feb 2014 16:29:10 +0000 (17:29 +0100)]
Merge branch 't/sync'

Cooking since 2014-01-14.

* t/sync:
  The sync filter.
  net: Let maksock() callers perform flowopt cleanup.
  net: makesock_addrinfo(): Make socketfd local to the loop.
  net: Let makesock() continue on setsockopt() failure.
  net: Reduce indentation level in makesock_addrinfo().
  net: Further simplify makesock_addrinfo().
  net: Replace the double loop of lookup_address() by a single loop.
  net: makesock(): Combine code for passive sockets.
  net: Change makesock_addrinfo() to set given flowopts before SO_REUSEADDR.
  net: Clarify code flow of makesock_addrinfo().
  net: Remove unnecessary condition in makesock_addrinfo().
  net: Remove pointless initialization in makesock_addrinfo().
  net: Kill dead code in makesock_addrinfo().
  net: Remove networking headers from para.h.
  net: Improve error handling of makesock_addrinfo().
  net: Split makesock(), part 2: Introduce makesock_addrinfo().
  net: Split makesock(), part 1: Introduce lookup_address().
  net: Simplify makesock().
  net: Fix parse_url().
  net: Correct \return text of parse_url().

6 years agobuild: Don't link with -lreadline if readline was not found.
Andre Noll [Thu, 13 Feb 2014 17:59:00 +0000 (18:59 +0100)]
build: Don't link with -lreadline if readline was not found.

Currently, if libreadline is not installed, linking fails with

ld: cannot find -lreadline

This patch makes the build succeed by linking para_client, para_audioc
and para_play without readline support in this case.

6 years agoaudiod: Skip NULL pointer check in compute_time_diff().
Andre Noll [Sun, 2 Feb 2014 19:45:08 +0000 (20:45 +0100)]
audiod: Skip NULL pointer check in compute_time_diff().

We never pass a NULL pointer to this function.

6 years agoaudiod: Make compute_time_diff() return void.
Andre Noll [Sun, 2 Feb 2014 19:43:55 +0000 (20:43 +0100)]
audiod: Make compute_time_diff() return void.

Its single caller does not care about the return value.

6 years agocom_stat(): Remove pointless uptime variable.
Andre Noll [Wed, 29 Jan 2014 00:26:28 +0000 (01:26 +0100)]
com_stat(): Remove pointless uptime variable.

This variable is set but the content is never used. Drop it.

6 years agogcrypt: Fix gcc warning on Ubuntu Lucid.
Andre Noll [Mon, 27 Jan 2014 13:35:55 +0000 (14:35 +0100)]
gcrypt: Fix gcc warning on Ubuntu Lucid.

For some reason the gcc-4.4.3 that ships with Ubuntu Lucid started
to complain recently:

gcrypt.c: In function ‘mgf1’:
gcrypt.c:101: warning: ISO C90 forbids mixed declarations and code

It turned out that a double semicolon is responsible for the
warning. This patch removes the duplicate.

6 years agoflac: Try to link also without -logg.
Andre Noll [Mon, 27 Jan 2014 12:54:49 +0000 (13:54 +0100)]
flac: Try to link also without -logg.

If libflac was compiled without ogg support, the build system should
include flac even if libogg is not installed. Currently this does
not work because the autoconf test tries to link with -logg, so it
always fails if libogg is not available.

Fix this by trying both with and without libogg.

6 years agoversion.c: Fix comment of version_single_line().
Andre Noll [Tue, 7 Jan 2014 19:13:41 +0000 (19:13 +0000)]
version.c: Fix comment of version_single_line().

Codenames are no longer used.

6 years agodoxygen: Expand all macros, in particular config.h.
Andre Noll [Mon, 20 Jan 2014 20:44:54 +0000 (21:44 +0100)]
doxygen: Expand all macros, in particular config.h.

This improves the generated documentation web pages since now all
HAVE_XXX macros of config.h are taken into account.

6 years agorecv_common.c: Improve documentation of check_receiver_arg().
Andre Noll [Wed, 8 Jan 2014 06:00:36 +0000 (06:00 +0000)]
recv_common.c: Improve documentation of check_receiver_arg().

Drop meaningless "and further are present", and note that the "real"
type of the returned pointer depends on the receiver.

6 years agoaudiod: get_time_string() comment fix.
Andre Noll [Thu, 2 Jan 2014 05:47:03 +0000 (05:47 +0000)]
audiod: get_time_string() comment fix.

6 years agoconfigure: Really print opus audio file handler if opus lib was found.
Andre Noll [Sun, 5 Jan 2014 21:59:55 +0000 (21:59 +0000)]
configure: Really print opus audio file handler if opus lib was found.

This is the second time this bug shows up. It was fixed ad0da073 but
re-introduced in the merge commit b5c6af5c. See also 40439a77.

6 years agoOverhaul doxygen main page.
Andre Noll [Fri, 3 Jan 2014 05:59:22 +0000 (05:59 +0000)]
Overhaul doxygen main page.

It got way too large, and contained quite a few links to .c files
whose doxygen page is not very interesting. For example, the doxygen
page of the .c files of filters, receivers and writers contain only
the init function since all other functions are static.

This commit limits the number of links on the main page considerably.
The new page tries to focus on important data structures and APIs
and does not strive for completeness.

6 years agoafs.h: Don't try to list all supported audio formats.
Andre Noll [Fri, 3 Jan 2014 05:52:22 +0000 (05:52 +0000)]
afs.h: Don't try to list all supported audio formats.

6 years agoChange copyright year to 2014.
Andre Noll [Wed, 1 Jan 2014 00:00:34 +0000 (00:00 +0000)]
Change copyright year to 2014.

This year, we're really on time. The changes in this patch were
created by the following silly script:

    files=$(git grep -l 'Copyright (C) [0-9]\{4\}\(-2013\)* Andre Noll')
    sed --in-place= -e 's/Copyright (C) \([0-9]\{4\}\)-2013 Andre Noll/Copyright (C) \1-2014 Andre Noll/1' $files
    sed --in-place= -e 's/Copyright (C) 2013 Andre Noll/Copyright (C) 2013-2014 Andre Noll/1' $files

6 years agoAdd link to sideband.h in doxygen main page.
Andre Noll [Sun, 29 Dec 2013 16:38:53 +0000 (16:38 +0000)]
Add link to sideband.h in doxygen main page.

It is an essential part of the client/server communication, and is
well documented to boot.

6 years agoDoxify error2.c and add GPL header.
Andre Noll [Sun, 29 Dec 2013 16:26:24 +0000 (16:26 +0000)]
Doxify error2.c and add GPL header.

Also add a link to the file in the doxygen main page.

6 years agoAdd -Wdeclaration-after-statement.
Andre Noll [Sun, 29 Dec 2013 14:53:15 +0000 (14:53 +0000)]
Add -Wdeclaration-after-statement.

We don't have (and don't want to have) declarations after
statements. This change helps to keep it this way.

6 years agoAdd some missing includes.
Andre Noll [Sun, 29 Dec 2013 14:32:43 +0000 (14:32 +0000)]
Add some missing includes.

Letting .c files include their "own" header file guarantees that the
declaration in the header file stays in sync with the definition.

Eventually we may even enable gcc's -Wmissing-declarations, but
we're not there yet, mainly due to command handlers, init functions
and completers.

Note that including signal.h in signal.c required two other includes
since the header file defines a task structure.

6 years agoMakefile.real: Add clean2 to the list of phony targets.
Andre Noll [Sun, 29 Dec 2013 13:35:07 +0000 (13:35 +0000)]
Makefile.real: Add clean2 to the list of phony targets.

We don't want to create a file named clean2.

6 years agomood.c: Fix a trivial whitespace issue.
Andre Noll [Sun, 29 Dec 2013 13:21:07 +0000 (13:21 +0000)]
mood.c: Fix a trivial whitespace issue.

6 years agoProvide new screenshots.
Andre Noll [Sun, 29 Dec 2013 13:20:41 +0000 (13:20 +0000)]
Provide new screenshots.

The old ones were more than 4 years old. There is no huge difference though.

6 years agoRemove old changelog files.
Andre Noll [Sun, 29 Dec 2013 01:45:49 +0000 (01:45 +0000)]
Remove old changelog files.

This simplifies Makefile.real a bit, and of course it's still in the
git history in case somebody is really that interested in the ancient
history of this project.

6 years agoRemove convert_0.3-0.4.sh.
Andre Noll [Sun, 29 Dec 2013 01:41:07 +0000 (01:41 +0000)]
Remove convert_0.3-0.4.sh.

The database layout hasn't changed since 0.4.0, and nobody should
run paraslash-3.x.x anymore.

6 years agoRename command_util.sh -> command_util.bash.
Andre Noll [Sun, 29 Dec 2013 01:39:36 +0000 (01:39 +0000)]
Rename command_util.sh -> command_util.bash.

It's a bash script which wouldn't run properly under general POSIX
shells.

6 years agoRemove __malloc attribute from para_realloc().
Andre Noll [Wed, 1 Jan 2014 20:14:42 +0000 (20:14 +0000)]
Remove __malloc attribute from para_realloc().

This attribute tells the compiler that the returned pointer cannot
alias any other pointer. This is not the case for para_realloc().

6 years agoweb: Remove "/" character in <br> elements.
Andre Noll [Mon, 30 Dec 2013 01:00:40 +0000 (01:00 +0000)]
web: Remove "/" character in <br> elements.

'br' is an empty element, i.e., it can take no content and it may not
have an end tag.  Indeed, the W3C Markup Validation Service complains
about this:

Line 33, Column 42: NET-enabling start-tag requires SHORTTAG YES

This bug was introduced in commit 607d79aa (web: Unify <br>
elements. 2013-08).

6 years agoNEWS: Add download links for 0.5.1.
Andre Noll [Sun, 29 Dec 2013 02:57:56 +0000 (02:57 +0000)]
NEWS: Add download links for 0.5.1.

This should have been done in the release commit of course.