]> git.tue.mpg.de Git - paraslash.git/log
paraslash.git
2 years agomp4: Simplify and doxify meta tag accessors.
Andre Noll [Fri, 13 Aug 2021 18:51:38 +0000 (20:51 +0200)]
mp4: Simplify and doxify meta tag accessors.

The integer return value is redundant, so get rid of the value
parameter and simplify meta_find_by_name() accordingly. Document that
tag values are allocated on the heap and should be freed by the caller.

2 years agomp4: Simplify parse_tag().
Andre Noll [Fri, 13 Aug 2021 18:19:43 +0000 (20:19 +0200)]
mp4: Simplify parse_tag().

We don't care about arbitrarily named tags, and those tags we're
interested in are generally present in form of the standard tags
(ATOM_TITLE, ATOM_ARTIST etc.).

Since we now always call get_metadata_name() to get the string
representation of the tag, we don't need to make a copy any more,
just pass the const pointer directly to tag_add_field().

With this change in place it is obvious that we never pass a NULL or
empty tag name to tag_add_field(), and we don't pass a NULL pointer
for the value argument either, so remove the safety check.

2 years agomp4: Simplify parse_tag().
Andre Noll [Thu, 12 Aug 2021 17:32:51 +0000 (19:32 +0200)]
mp4: Simplify parse_tag().

paraslash fundamentally cares only about five metatags. So remove
all code from parse_tag() which handles the tags we don't care about.

2 years agomp4: Rename and simplify set_metadata_name()
Andre Noll [Wed, 11 Aug 2021 20:52:11 +0000 (22:52 +0200)]
mp4: Rename and simplify set_metadata_name()

This function is an atrocious mess. For one, the naming is confusing
because the function does not set the atom name, it *returns* it.
More importantly, the function defines a static array for no good
reason and then hard-codes the array indices in a large switch
statement.

It's much easier to simply return a pointer to a string literal and
perform the strdup operation in the single caller.

2 years agomp4: Mark callback function pointers as const.
Andre Noll [Wed, 11 Aug 2021 19:56:09 +0000 (21:56 +0200)]
mp4: Mark callback function pointers as const.

The code in mp4.c never modifies any of the members of the callback
structure.

2 years agomp4: Use uniform names for callback and mp4 structures.
Andre Noll [Wed, 11 Aug 2021 19:45:12 +0000 (21:45 +0200)]
mp4: Use uniform names for callback and mp4 structures.

Currently it's a confusing mess, with callbacks called f, ff, or
stream, where the former two are also used for pointers to struct
mp4. Let's call a spade a spade and use cb everywhere for the callbacks
while f is reserved to denote an mp4 pointer.

2 years agomp4: Hide ->read_error.
Andre Noll [Wed, 11 Aug 2021 19:37:16 +0000 (21:37 +0200)]
mp4: Hide ->read_error.

This does not belong into the callback structure whose fields are
supposed to get initialized by the audio format handler. Move it to
the internal struct mp4 instead, next to the existing error counter.

2 years agomp4: Open-code pointless truncate_stream().
Andre Noll [Wed, 11 Aug 2021 19:30:14 +0000 (21:30 +0200)]
mp4: Open-code pointless truncate_stream().

This trivial one-liner has only a single caller.

2 years agomp4: Don't store the sample size in the mp4 structure.
Andre Noll [Wed, 11 Aug 2021 19:14:06 +0000 (21:14 +0200)]
mp4: Don't store the sample size in the mp4 structure.

Currently it is set but never read. We need to keep the read_int16()
call, however, to advance the file offset.

2 years agomp4: Don't store the stsd entry count.
Andre Noll [Wed, 11 Aug 2021 19:12:13 +0000 (21:12 +0200)]
mp4: Don't store the stsd entry count.

A local variable in read_stsd() will do as well.

2 years agomp4: Remove two unused fields of struct mp4.
Andre Noll [Wed, 11 Aug 2021 19:04:38 +0000 (21:04 +0200)]
mp4: Remove two unused fields of struct mp4.

These are neither set nor read.

2 years agomp4: Don't parse the ctts atom any more.
Andre Noll [Wed, 11 Aug 2021 19:02:33 +0000 (21:02 +0200)]
mp4: Don't parse the ctts atom any more.

The ctts sample offsets are useless for paraslash, so get rid of
the parser.

2 years agomp4: Don't parse the movie header any more.
Andre Noll [Wed, 11 Aug 2021 18:49:21 +0000 (20:49 +0200)]
mp4: Don't parse the movie header any more.

The duration and time scale are taken from the audio track while the
values stored in the movie header (if present) are ignored anyway.

2 years agomp4: Simplify atom_compare().
Andre Noll [Wed, 11 Aug 2021 17:40:03 +0000 (19:40 +0200)]
mp4: Simplify atom_compare().

No need for a condition here. Change the return type to bool, and
remove the pointless and misspelt comment.

2 years agomp4: Don't store track type anymore.
Andre Noll [Wed, 11 Aug 2021 17:36:59 +0000 (19:36 +0200)]
mp4: Don't store track type anymore.

The only thing we care about is whether or not a track is an audio
track. Hence a simple boolean suffices and the "tracks" enum can
be removed.

2 years agomp4: Don't parse the esds atom any more.
Andre Noll [Wed, 11 Aug 2021 17:26:00 +0000 (19:26 +0200)]
mp4: Don't parse the esds atom any more.

With the decoder specific config no longer in use, we can simplify
mp4.c further by getting rid of some cryptic and underdocumented code
which no longer does anything useful for us.

2 years agomp4: Introduce mp4_is_audio_track().
Andre Noll [Wed, 11 Aug 2021 17:12:07 +0000 (19:12 +0200)]
mp4: Introduce mp4_is_audio_track().

Currently the aac audio format handler iterates over the tracks
in an mp4 file. For each track it tries to get the audio-specific
configuration by calling mp4_get_decoder_config() and calls into faad
to check whether it is a valid configuration for the aac decoder.

We can simplify all this because the mp4 code already knows the type
of each track, albeit it does not expose this information yet. So
provide the new mp4_is_audio_track() helper and let the aac audio
format handler pick the first track for which this helper returns true.

As an additional benefit, we can remove the now unused
mp4_get_decoder_config().

2 years agomp4: Replace mp4ff prefix by mp4.
Andre Noll [Wed, 11 Aug 2021 16:31:55 +0000 (18:31 +0200)]
mp4: Replace mp4ff prefix by mp4.

The additional "ff" does not convey any useful information.

This patch was produced by running

sed -i 's/mp4ff/mp4/g' mp4.c mp4.h aac_afh.c

followed by

sed -i 's/MP4FF/MP4/g' aac_afh.c error.h

and the manual removal of the "ff" suffix in the error strings.

2 years agomp4: Rename mp4ff_open_read_metaonly() -> mp4ff_open_meta().
Andre Noll [Wed, 11 Aug 2021 14:56:57 +0000 (16:56 +0200)]
mp4: Rename mp4ff_open_read_metaonly() -> mp4ff_open_meta().

The old name is misleading because the returned file handle is by no
means opened read-only. In fact we call mp4ff_meta_update() on it,
which alters the file to store the modified metadata.

2 years agomp4: Introduce mp4ff_get_duration().
Andre Noll [Wed, 11 Aug 2021 13:41:37 +0000 (15:41 +0200)]
mp4: Introduce mp4ff_get_duration().

This allows us to get rid of an ugly hack in aac_afh.c where we peeked
at the audio-specific config structure to get the scaling factor which
was needed to compute the duration.

2 years agomp4: Prefer para_realloc() over plain realloc().
Andre Noll [Tue, 10 Aug 2021 17:08:41 +0000 (19:08 +0200)]
mp4: Prefer para_realloc() over plain realloc().

This allows us to skip the NULL check, which simplifies the code a bit.

2 years agomp4: Remove const qualifier from non-pointer function arguments.
Andre Noll [Tue, 10 Aug 2021 16:57:42 +0000 (18:57 +0200)]
mp4: Remove const qualifier from non-pointer function arguments.

In contrast to the pointer case, it's generally not very interesting
to know whether a function will modify the automatic variable which
corresponds to a non-pointer argument.

2 years agomp4: Whitespace and indentation cleanups for create_ilst().
Andre Noll [Mon, 9 Aug 2021 22:23:52 +0000 (00:23 +0200)]
mp4: Whitespace and indentation cleanups for create_ilst().

The only non-trivial cleanup is the reversed logic to reduce the
indentation of the code in the body of the for loop.

2 years agomp4: Remove pointless casts in create_ilst().
Andre Noll [Mon, 9 Aug 2021 22:19:56 +0000 (00:19 +0200)]
mp4: Remove pointless casts in create_ilst().

They have no effect because membuffer_write_int16_tag() takes a
unit16_t value anyway.

2 years agomp4: Reduce indentation of create_ilst().
Andre Noll [Mon, 9 Aug 2021 22:14:53 +0000 (00:14 +0200)]
mp4: Reduce indentation of create_ilst().

This function contained an indented block for no good reason. No real
change except that a few variables are exposed to the code below the
former block, but this is not a problem.

2 years agomp4: Kill pointless stricmp macro.
Andre Noll [Mon, 9 Aug 2021 22:12:31 +0000 (00:12 +0200)]
mp4: Kill pointless stricmp macro.

Just call strcasecmp() directly.

2 years agomp4: Make struct mp4ff opaque, hide struct mp4ff_track.
Andre Noll [Mon, 9 Aug 2021 22:06:48 +0000 (00:06 +0200)]
mp4: Make struct mp4ff opaque, hide struct mp4ff_track.

For the former, code outside of mp4.c only needs a pointer while the
latter does not need to be exposed at all.

Fix the indentation of the two declarations while at it.

2 years agomp4: Avoid typedefs for data structures.
Andre Noll [Mon, 9 Aug 2021 21:55:12 +0000 (23:55 +0200)]
mp4: Avoid typedefs for data structures.

They only obfuscate the type.

2 years agomp4: Fix trivial coding style issues in read_mvhd().
Andre Noll [Mon, 9 Aug 2021 21:31:38 +0000 (23:31 +0200)]
mp4: Fix trivial coding style issues in read_mvhd().

Some comments were located before the corresponding read statement,
some after, and some comments were indented weirdly.

No real change.

2 years agomp4: Prefer enums over defines.
Andre Noll [Mon, 9 Aug 2021 21:24:26 +0000 (23:24 +0200)]
mp4: Prefer enums over defines.

Just because the long list of macros clutters the taglist window
in vim.

2 years agomp4: Use read/write functions from portable_io.h.
Andre Noll [Mon, 9 Aug 2021 21:13:35 +0000 (23:13 +0200)]
mp4: Use read/write functions from portable_io.h.

This removes quite a bit of ugly code. In particular, atom_get_size()
is completely unnecessary and can be removed. Since there is no
function in portable_io.h to read a 24 bit integer, we have to add
read_u24_be().

2 years agomp4: Strip mp4ff_ prefix from static functions.
Andre Noll [Mon, 9 Aug 2021 20:11:48 +0000 (22:11 +0200)]
mp4: Strip mp4ff_ prefix from static functions.

This way it is clear from the name which functions are internal.

2 years agomp4: Introduce track helper variables.
Andre Noll [Mon, 9 Aug 2021 19:39:31 +0000 (21:39 +0200)]
mp4: Introduce track helper variables.

This reduces the line length and thus improves the readability of the
code.

2 years agomp4: Introduce min_body_size() helper.
Andre Noll [Mon, 9 Aug 2021 19:08:16 +0000 (21:08 +0200)]
mp4: Introduce min_body_size() helper.

This increases readability a lot and brings the line length of
mp4ff_parse_tag() down to a reasonable number of characters.

2 years agomp4: Remove useless casts in mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 18:48:23 +0000 (20:48 +0200)]
mp4: Remove useless casts in mp4ff_parse_tag().

These casts have no effect because "len" and the second argument of
mp4ff_read_string() are of type uint32_t.

2 years agomp4: Rename overlong variable in mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 18:42:17 +0000 (20:42 +0200)]
mp4: Rename overlong variable in mp4ff_parse_tag().

The new "parent" name is just as descriptive and saves a few
characters.

2 years agomp4: Remove always true condition in mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 18:39:05 +0000 (20:39 +0200)]
mp4: Remove always true condition in mp4ff_parse_tag().

The parentheses are redundant, and "done" can never be true here.

2 years agomp4: Trivial cleanups of mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 18:36:32 +0000 (20:36 +0200)]
mp4: Trivial cleanups of mp4ff_parse_tag().

The sprintf statement fits in a single line and the curly braces
are redundant.

2 years agomp4: Further reduce the indentation of mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 18:27:28 +0000 (20:27 +0200)]
mp4: Further reduce the indentation of mp4ff_parse_tag().

Handle the easy cases first. Again, this patch looks unreviewable,
but it in essence it is only one large block that is shifted to the
left with no other changes.

2 years agomp4: Use a for-loop in mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 18:22:16 +0000 (20:22 +0200)]
mp4: Use a for-loop in mp4ff_parse_tag().

This is equivalent but will allow us to further reduce the indentation
because we now can easily continue the loop.

2 years agomp4: Use para_strdup().
Andre Noll [Mon, 9 Aug 2021 18:05:10 +0000 (20:05 +0200)]
mp4: Use para_strdup().

Like malloc(), strdup() may fail. The current code does not always
check that. Using the paraslash wrapper avoids the issue and has the
additional benefit that para_strdup(NULL) does not segfault.

2 years agomp4: free(NULL) is OK.
Andre Noll [Mon, 9 Aug 2021 17:59:41 +0000 (19:59 +0200)]
mp4: free(NULL) is OK.

Also remove a initialization to NULL after the free() because it is
immediately followed by an assignment to the same variable.

2 years agomp4: Reduce indentation of mp4ff_parse_tag().
Andre Noll [Mon, 9 Aug 2021 17:50:25 +0000 (19:50 +0200)]
mp4: Reduce indentation of mp4ff_parse_tag().

Reverse the condition and continue with the next iteration
if "done" is true.

The patch is large, but it's trivial because the only change is that
one code block has been shifted to the left.

2 years agomp4: Use para_{c,m}alloc() to allocate memory.
Andre Noll [Mon, 9 Aug 2021 17:43:36 +0000 (19:43 +0200)]
mp4: Use para_{c,m}alloc() to allocate memory.

With mp4ff being internal we can afford to just abort if allocations
fail (which is what the para_ wrappers do). This allows us to simplify
the code quite a bit.

The code used to cast the pointer returned from malloc(). This is
unnecessary, so drop these casts.

2 years agomp4: Remove member moov_read of struct mp4ff.
Andre Noll [Mon, 9 Aug 2021 17:18:01 +0000 (19:18 +0200)]
mp4: Remove member moov_read of struct mp4ff.

It is set but never read.

2 years agomp4: Simplify and rename mp4ff_read_sample_getsize().
Andre Noll [Mon, 9 Aug 2021 17:10:46 +0000 (19:10 +0200)]
mp4: Simplify and rename mp4ff_read_sample_getsize().

The new code is much shorter. It is equivalent because the single
caller only checks whether the return value is less or equal then zero,
and does not use the return value in this case.

2 years agoaac: Let mp4ff_set_sample_position() return void.
Andre Noll [Mon, 9 Aug 2021 16:45:34 +0000 (18:45 +0200)]
aac: Let mp4ff_set_sample_position() return void.

The function used to always return zero.

2 years agoaac: Move declaration of mp4ff_set_sample_position() to mp4.h.
Andre Noll [Mon, 9 Aug 2021 16:43:44 +0000 (18:43 +0200)]
aac: Move declaration of mp4ff_set_sample_position() to mp4.h.

We used to provide the declaration of mp4ff_set_sample_position()
in aac_afh.c. With the internal mp4.c this is no longer necessary as
we may as well declare the function in mp4.h.

Remove the documentation since it has become stale.

2 years agomp4: Kill pointless macro membuffer_write_data.
Andre Noll [Mon, 9 Aug 2021 16:29:34 +0000 (18:29 +0200)]
mp4: Kill pointless macro membuffer_write_data.

All callers can instead call membuffer_write() directly.

2 years agomp4: Remove some dead code.
Andre Noll [Mon, 9 Aug 2021 16:22:35 +0000 (18:22 +0200)]
mp4: Remove some dead code.

Commented out code, pointless preprocessor directives and a condition
with empty body.

2 years agomp4: Make non-public functions static.
Andre Noll [Sun, 8 Aug 2021 20:09:28 +0000 (22:09 +0200)]
mp4: Make non-public functions static.

It's generally a good thing to reduce the scope to the compilation
unit where possible. Static functions also reduce the number of
symbols and help the compiler to optimize the generated code.

2 years agomp4: Wire it in and make it compile cleanly.
Andre Noll [Thu, 21 Oct 2021 17:09:59 +0000 (19:09 +0200)]
mp4: Wire it in and make it compile cleanly.

This switches to our local copy of libmp4ff. The configure script
now turns on support for the aac audio format even if libmp4ff is
not installed.

Some changes to mp4.c were necessary to silence warnings, most of
which are trivial. The single notably non-trivial change is the missing
initialization of chunk_sample and chunk in mp4ff_chunk_of_sample().

2 years agomp4: Run indent on mp4.c.
Andre Noll [Sun, 8 Aug 2021 19:37:27 +0000 (21:37 +0200)]
mp4: Run indent on mp4.c.

This transforms the newly added code to a form which matches the
paraslash coding style.

The patch was produced with

indent -kr -i8 -ts8 -sob -l80 -ss -bs

followed by a some manual cleanups.

2 years agoProvide our own copy of libmp4ff.
Andre Noll [Sun, 8 Aug 2021 19:13:41 +0000 (21:13 +0200)]
Provide our own copy of libmp4ff.

This library was removed from the faad repository in 2017. This
commit put everything we need from the libmp4ff code base into the
new mp4.c and mp4.h files. All content was taken unmodified from
commit 1cf5a505daf0 of the faad2 repo, the last commit that contains
the library.

The code needs a lot of cleanup and does not compile without warnings.
We commit it as-is to track what exactly has been copied from
libmp4ff. The new mp4.c has not been included into the build system,
however, so this commit has no effect yet.

2 years agoRevert "Makefile: Fix compilation after header removal."
Andre Noll [Mon, 30 May 2022 19:06:32 +0000 (21:06 +0200)]
Revert "Makefile: Fix compilation after header removal."

This reverts commit 3bc858ee0d9b929f4cbca61cf5ed8d3184d0cf78.

It is broken because the recipe for the .d files does not honor
CPPFLAGS since we only modify the CPPFLAGS variable for the .o
targets. Adding the corresponding .d targets would be too ugly,
so revert the commit for now until a better solution has been found.

2 years agomood.c: Improve documentation of reload_current_mood().
Andre Noll [Thu, 19 May 2022 16:58:53 +0000 (18:58 +0200)]
mood.c: Improve documentation of reload_current_mood().

The old text was a bit clumsy and too short.

2 years agoRemove E_PERM.
Andre Noll [Tue, 17 May 2022 14:17:32 +0000 (16:17 +0200)]
Remove E_PERM.

There is only one user which may as well use the standard error code.

2 years agoMakefile: Fix compilation after header removal.
Andre Noll [Mon, 14 Mar 2022 21:28:27 +0000 (22:28 +0100)]
Makefile: Fix compilation after header removal.

When switching from an older git version which still contains some
header file to a newer version where it got removed, a .d file remains
in build/deps which lists the no longer existing header file as a
prerequisite. This causes the build to fail because the prerequisite
cannot be created. The problem can be worked around by removing the
stale .d file, for example by running make clean, but this is no real
fix, and is inefficient.

The root of the matter is that .d files depend on their .c counterpart,
but this dependency is not stated anywhere in the Makefile. Thus, we
need a rule for the .d target with the same prerequisites and the same
recipe as the object file target. GNU make supports multiple targets,
but the feature does not seem to work as advertised, regardless of
whether rules with independent targets or rules with grouped targets
(using the &: separator) are employed. Thus we bite the bullet and
use two separate rules.

2 years agoAdd test to check whether empty mood arguments are rejected.
Andre Noll [Sat, 12 Mar 2022 03:29:03 +0000 (04:29 +0100)]
Add test to check whether empty mood arguments are rejected.

To make sure a recent bug won't be re-introduced. The test succeeds
but fails with commit

2c2d3a6ec34d983cb698b245facb8d6240aec1b3

reverted.

We have to add at least one mood to trigger the bug. Since addmood is
a stdin command we must redirect stdin for the para_client command. It
does not hurt to do this for all commands, not just the new one.

2 years agoMinor log severity adjustments.
Andre Noll [Wed, 16 Mar 2022 18:21:24 +0000 (19:21 +0100)]
Minor log severity adjustments.

Two small changes which improve the error output of para_audiod. The
first makes sure we get a message when hitting ctrl+c when audiod
is running in forground mode. The second decreases the severity of
the log message which is shown when a client connection terminates,
since this is not necessarily an error.

2 years agoserver: Early vss shutdown for command handlers.
Andre Noll [Wed, 20 Oct 2021 19:13:58 +0000 (21:13 +0200)]
server: Early vss shutdown for command handlers.

Command must communicate with the vss through the shared memory area
(mmd). Deallocating all resources early in the command handler makes
the code more robust and saves some memory.

2 years agoMerge branch 'maint'
Andre Noll [Sat, 14 May 2022 15:21:42 +0000 (17:21 +0200)]
Merge branch 'maint'

To get the single fix that was just merged to maint.

* maint:
  server: Fix memory leak at exit.

2 years agoMerge branch 'maint'
Andre Noll [Mon, 4 Apr 2022 19:28:37 +0000 (21:28 +0200)]
Merge branch 'maint'

A single urgent fix for a server crash.

* maint:
  vss: Reset afhi.chunks_total on eof.

2 years agoafh: Limit chunk numbers to 32 bit.
Andre Noll [Fri, 27 Aug 2021 13:12:34 +0000 (15:12 +0200)]
afh: Limit chunk numbers to 32 bit.

The number of chunks and the chunk offsets are stored in the audio
file table as 32 bit unsigned integers. Thus, chunk numbers and
sizes cannot exceed 2^32 - 1. Make this fact obvious by changing
the corresponding parameters of aac_afh_get_chunk() from size_t or
unsigned long to uint32_t.

2 years agoaudiod: Stop stream immediately when being switched off.
Andre Noll [Wed, 9 Mar 2022 22:56:56 +0000 (23:56 +0100)]
audiod: Stop stream immediately when being switched off.

When para_audiod enters off/standby mode, we stop the receiver
but continue to filter and write data already received until the
input queue has drained. This can take several seconds, which may
be annoying.

To stop the stream immediately, stop the writer(s) rather than the
receiver. We still only stop the receiver when the server has paused
or stopped the stream because we don't want to discard any data in
this case.

2 years agoserver: Fix memory leak at exit.
Andre Noll [Tue, 22 Mar 2022 20:05:19 +0000 (21:05 +0100)]
server: Fix memory leak at exit.

If command_post_select() returns failure because of a notification we
leak the array of listening fds. No big deal, but worth to fix anyway.

2 years agovss: Reset afhi.chunks_total on eof.
Andre Noll [Sat, 19 Mar 2022 22:48:18 +0000 (23:48 +0100)]
vss: Reset afhi.chunks_total on eof.

Without this, the server can be crashed by running

para_client nomore # set the nomore flag
# wait for eof
para_client jmp 50 # set the repos flag, clear the next flag
para_client play # boom

The problem is that the command handler of the jmp command checks
afhi.chunks_total to determine if some audio file is currently
open. Since vss_eof() did not reset chunks_total, the command handler
wrongly believes that there is an open audio file, sets the repos
flag and clears the next flag. When streaming is resumed later, the
virtual streaming system attempts to access the chunk table which
was freed earlier in vss_eof().

2 years agoafs.c: Improve documentation of callback_query.
Andre Noll [Thu, 17 Mar 2022 21:44:11 +0000 (22:44 +0100)]
afs.c: Improve documentation of callback_query.

It had some language issues and focussed too much on details rather than
explaining the big picture. The new text is shorter and should be much easier
to understand.

2 years agoafs.c: Improve documentation of activate_mood_or_playlist().
Andre Noll [Thu, 17 Mar 2022 19:36:06 +0000 (20:36 +0100)]
afs.c: Improve documentation of activate_mood_or_playlist().

It is not obvious when arg and current_mop can alias each other so
add an explanatory comment.

2 years agoafs.c: Replace underscore by space in log message text.
Andre Noll [Wed, 16 Mar 2022 18:31:55 +0000 (19:31 +0100)]
afs.c: Replace underscore by space in log message text.

2 years agoafs.c: Improve documentation of score table.
Andre Noll [Wed, 9 Mar 2022 21:43:26 +0000 (22:43 +0100)]
afs.c: Improve documentation of score table.

The text focussed on implementation details rather than describing the
purpose of the table. It was also slightly incorrect because playlists
also use the score tables, albeit in a much simpler way and without
"Gaussian normal distributions".

2 years agoscore.c: Don't try to document possible error codes.
Andre Noll [Fri, 18 Mar 2022 19:55:48 +0000 (20:55 +0100)]
score.c: Don't try to document possible error codes.

Every single one of these was incomplete or outdated.

2 years agoscore.c: Remove pointless comments.
Andre Noll [Mon, 7 Mar 2022 21:30:26 +0000 (22:30 +0100)]
score.c: Remove pointless comments.

Static functions don't need doxygen comments. The two comments removed
by this commit did not add any value anyway.

2 years agoscore.c: Improve documentation of score_compare().
Andre Noll [Tue, 15 Mar 2022 20:47:08 +0000 (21:47 +0100)]
score.c: Improve documentation of score_compare().

Reword the text to focus on why we dance twice. Also put it on dedox
because it is static.

2 years agoscore.c: Shorten documentation of get_score_of_row().
Andre Noll [Mon, 7 Mar 2022 21:25:24 +0000 (22:25 +0100)]
score.c: Shorten documentation of get_score_of_row().

This function is static, and its implementation is shorter than its
documentation, which mostly consists of pointless boilerplate text.

2 years agoattribute.c: De-doxify static functions.
Andre Noll [Tue, 15 Mar 2022 20:33:03 +0000 (21:33 +0100)]
attribute.c: De-doxify static functions.

Because static functions don't need doxygen comments. The existing
comments for attribute_close() and attribute_open() did not contain
useful information, so remove these,

2 years agoMerge branch 'maint'
Andre Noll [Thu, 24 Mar 2022 18:58:12 +0000 (19:58 +0100)]
Merge branch 'maint'

A single fix for a benign bug.

* maint:
  afs: Update dummy mood assumptions to reflect the reality.

2 years agoafs: Update dummy mood assumptions to reflect the reality.
Andre Noll [Mon, 14 Mar 2022 18:52:46 +0000 (19:52 +0100)]
afs: Update dummy mood assumptions to reflect the reality.

The code in afs.c assumes that loading the dummy mood always succeeds,
and this is even documented in change_current_mood(). However, this
has never been true because we call into osl library functions which
may fail for various reasons. In particular, if the server is started
without a database the attempt to load the dummy mood fails because
the audio file table does not exist.

The current code was not prepared to handle this case, and does stupid
things like storing the negative error code in *num_admissible and
returning success.

Fix this confusion by adjusting the documentation and letting
activate_mood_or_playlist() fail early. One of its callers,
init_admissible_files(), needs also be adjusted because it asserted
in its error path that the mood which failed to load was not the
dummy mood.

This is a benign bug because the most common way to hit this is
at startup on a fresh install when the database does not exist. In
this case the caller, init_admissible_files(), ignores the negative
num_admissible value.

2 years agocom_ls(): Drop "audio file table syntax error" messsage.
Andre Noll [Sun, 13 Feb 2022 20:29:03 +0000 (21:29 +0100)]
com_ls(): Drop "audio file table syntax error" messsage.

This error message is printed if ls is called with an invalid argument
for the listing mode or sort order. That's not a syntax error, so
use the standard EINVAL error code instead.

2 years agoaac_afh: Be more lenient about zero sized reads.
Andre Noll [Wed, 18 Aug 2021 14:44:15 +0000 (16:44 +0200)]
aac_afh: Be more lenient about zero sized reads.

These actually happen for example when the file contains a meta
tag with an empty string value. POSIX says that the read() function
shall return zero and have no other results, so don't return -1 if
the number of bytes read is zero.

Similarly, return zero if the file offset is beyond EOF.

2 years agoparaslash 0.7.0 v0.7.0
Andre Noll [Sat, 12 Mar 2022 16:31:50 +0000 (17:31 +0100)]
paraslash 0.7.0

2 years agoMerge branch 'refs/heads/t/logo'
Andre Noll [Sat, 12 Mar 2022 16:22:15 +0000 (17:22 +0100)]
Merge branch 'refs/heads/t/logo'

The fancy new svg logo and a couple of changes which streamline
the look of the web pages.

Cooking for a month.

* refs/heads/t/logo:
  web: Add horizontal space between table columns.
  web: Clean up style sheet.
  web: Avoid bold face on main page.
  web: Add padding to all pages.
  web: Move navigation into top level table.
  web: Link to "./index.html" rather than to ".".
  web: Remove selected APIs page.
  web: Avoid "integrated" in feature list of main page.
  web: Shorten slogan.
  web: The new logo for paraslash-0.7.
  manual: Avoid vertical space between coding style items.

2 years agomood.c: Fix memory leak in error path of load_mood().
Andre Noll [Thu, 10 Mar 2022 20:32:22 +0000 (21:32 +0100)]
mood.c: Fix memory leak in error path of load_mood().

When an existing mood definition happens to be invalid so that
mp_init() fails, we return negative and leak the mood structure
just allocated.

This bug was introduced by the commit which removed version 1 moods.
It was found by code inspection.

Fixes: 184ea897a9b4
2 years agoMerge branch 'maint'
Andre Noll [Sat, 12 Mar 2022 15:55:45 +0000 (16:55 +0100)]
Merge branch 'maint'

A couple of urgent fixes for old bugs, the critical one being the
patch to reject empty mood arguments.

Cooking only for a few days to get these fixes merged ASAP.

* maint:
  com_addatt(): Fix memory leak.
  mood.c: Fix memory leak in change_current_mood().
  mp.c: Fix memory leak on parse errors.
  Reject empty mood arguments.

2 years agocom_addatt(): Fix memory leak.
Andre Noll [Mon, 7 Mar 2022 21:02:11 +0000 (22:02 +0100)]
com_addatt(): Fix memory leak.

We miss to free the lopsub parse result on exit. Found by valgrind.

2 years agomood.c: Fix memory leak in change_current_mood().
Andre Noll [Tue, 8 Mar 2022 22:37:08 +0000 (23:37 +0100)]
mood.c: Fix memory leak in change_current_mood().

In two error cases we return without freeing the bison mood parser
and the temporary array. Worse, in these cases we also expose the
partially loaded mood via the global current_mood.

The good news is that these errors should be "impossible" to trigger
in practice.

2 years agomp.c: Fix memory leak on parse errors.
Andre Noll [Thu, 10 Mar 2022 21:14:01 +0000 (22:14 +0100)]
mp.c: Fix memory leak on parse errors.

When mp_yyparse() fails we miss to free the abstract syntax tree.

Found by valgrind.

2 years agoserver: Loglevel adjustments for shutdown path.
Andre Noll [Thu, 21 Oct 2021 19:48:24 +0000 (21:48 +0200)]
server: Loglevel adjustments for shutdown path.

The log output of the server is rather verbose with respect to
shutdown messages. These not only occur when the server exits but
also in command handler context each time a command is executed.

This patch quietens these messages in two ways. For some messages we
simply reduce the log level. For others we print the message only in
server context, i.e. when process_is_command_handler() returns false.

2 years agoReject empty mood arguments.
Andre Noll [Fri, 11 Mar 2022 23:42:06 +0000 (00:42 +0100)]
Reject empty mood arguments.

Currently we crash in mood.c due to an assertion.

2 years agoMerge tag 'v0.6.4'
Andre Noll [Tue, 22 Feb 2022 08:17:23 +0000 (09:17 +0100)]
Merge tag 'v0.6.4'

paraslash-0.6.4

2 years agoMerge branch 'refs/heads/t/sha256'
Andre Noll [Mon, 21 Feb 2022 14:52:42 +0000 (15:52 +0100)]
Merge branch 'refs/heads/t/sha256'

A couple of changes which start to eliminate the use of sha1 in favor
of sha256. This series is only the first step, though, as we need to
keep sha1 for the time being to provide backward compatibility.

Cooking for four months.

* refs/heads/t/sha256:
  manual: Avoid sha1.
  upgrade_db: Add copyright and purpose to upgrade_db.c.
  web: Add link to the para_upgrade_db(1) man page.
  afs: Switch to sha256 and change default database path.
  Add para_upgrade_db.
  Use sha256 for the challenge response.
  Introduce hash2 (sha256).
  Assume sideband and aes_ctr128 are always supported/requested.

2 years agoaudiod: Avoid delay in status transition from standby to on.
Andre Noll [Thu, 25 Nov 2021 19:25:43 +0000 (20:25 +0100)]
audiod: Avoid delay in status transition from standby to on.

In close_receiver() we invalidate the current audio format value
to prevent the receiver from re-starting too quickly. See commit
2d61a8005c74 (audiod: Invalidate current audio format on close)
from seven years ago for details.

This invalidation happens in particular when the receiver is closed
because audiod was told to enter standby mode. If audiod is switched
back on shortly thereafter, no receiver can't be started because we
forgot the current audio format and must wait up to one minute until
the next status item dump arrives from the server which re-initializes
the current audio format value.

Fix this flaw by only invalidating the current audio format when
audiod operates in "on" mode.

Fixes: 2d61a8005c74
2 years agoweb: Add horizontal space between table columns.
Andre Noll [Sun, 14 Nov 2021 19:16:01 +0000 (20:16 +0100)]
web: Add horizontal space between table columns.

This tweaks the style sheet to make the rows of the tables easier to
read. It affects the topic list on the development page and the list
of files on the doxygen API page.

2 years agoweb: Clean up style sheet.
Andre Noll [Tue, 9 Nov 2021 17:16:15 +0000 (18:16 +0100)]
web: Clean up style sheet.

This removes some unnecessary cruft. The pages still look as before,
at least in elinks and firefox.

2 years agoweb: Avoid bold face on main page.
Andre Noll [Sun, 7 Nov 2021 22:21:03 +0000 (23:21 +0100)]
web: Avoid bold face on main page.

There is no reason to highlight this particular word.

2 years agoweb: Add padding to all pages.
Andre Noll [Sat, 6 Nov 2021 20:48:32 +0000 (21:48 +0100)]
web: Add padding to all pages.

Wrap text paragraphs in <p>...</p> and increase the margin value for
the html body in the css file. This looks much better in firefox.

No change to the contents.

2 years agoweb: Move navigation into top level table.
Andre Noll [Sat, 6 Nov 2021 20:28:10 +0000 (21:28 +0100)]
web: Move navigation into top level table.

Now the pages no longer look as if they were made in the nineties. More
like 2001 :)

2 years agoweb: Link to "./index.html" rather than to ".".
Andre Noll [Sat, 6 Nov 2021 20:31:59 +0000 (21:31 +0100)]
web: Link to "./index.html" rather than to ".".

When browsing the generated html locally, clicking the logo or the
about link may cause the browser to open the directory view, which
is annoying. This commit makes these links open the main page instead.

2 years agoweb: Remove selected APIs page.
Andre Noll [Sat, 6 Nov 2021 19:43:30 +0000 (20:43 +0100)]
web: Remove selected APIs page.

This list was outdated and not well maintained. Change the link on
the documentation page to point to the list of files instead.

2 years agoweb: Avoid "integrated" in feature list of main page.
Andre Noll [Sun, 14 Nov 2021 19:06:39 +0000 (20:06 +0100)]
web: Avoid "integrated" in feature list of main page.

It's not clear what this is supposed to mean.