paraslash.git
16 years agovss.c: Trivial whitespace cleanup.
Andre Noll [Thu, 17 Jan 2008 20:50:36 +0000 (21:50 +0100)]
vss.c: Trivial whitespace cleanup.

16 years agovcc.c: Fix a memory leak in recv_afs_result().
Andre Noll [Thu, 17 Jan 2008 20:50:20 +0000 (21:50 +0100)]
vcc.c: Fix a memory leak in recv_afs_result().

This function contained a code path that allocated
the buffer for the chunk table and then returned an error
(due to a failing fstat()) without freeing the chunk table
buffer.

16 years agonet.c: Fix a memory leak in makesock().
Andre Noll [Thu, 17 Jan 2008 20:40:38 +0000 (21:40 +0100)]
net.c: Fix a memory leak in makesock().

"port" was allocated dynamically but never freed. Fix it by
using a static buffer instead. This buffer can not overflow as
"port_number" is an unsigned short, so its decimal representation
consists of at most 5 digits.

16 years agosend.h: Simplify sender command enum.
Andre Noll [Thu, 17 Jan 2008 19:21:15 +0000 (20:21 +0100)]
send.h: Simplify sender command enum.

Also add GPL header while we're at it.

16 years agoserver.c: Initialize vss _after_ afs.
Andre Noll [Thu, 17 Jan 2008 18:29:23 +0000 (19:29 +0100)]
server.c: Initialize vss _after_ afs.

This way, afs doesn't inherit the open fds of the senders. This fixes

sender http off

Without this patch, para_audiod wouldn't notice that the http sender
has closed its listening fd because afs still has this fd open.

16 years agohttp_send.c: Rename open_tcp_port() to http_open().
Andre Noll [Thu, 17 Jan 2008 18:07:19 +0000 (19:07 +0100)]
http_send.c: Rename open_tcp_port() to http_open().

16 years agoringbuffer improvements.
Andre Noll [Mon, 14 Jan 2008 19:05:24 +0000 (20:05 +0100)]
ringbuffer improvements.

Introduce struct ringbuffer. This allows to get rid of the void* pointers
of the ringbuffer implementation.

16 years agoringbuffer.h: Add GPL header.
Andre Noll [Mon, 14 Jan 2008 18:19:32 +0000 (19:19 +0100)]
ringbuffer.h: Add GPL header.

16 years agoMerge commit 'remotes/meins/master'
Andre Noll [Mon, 14 Jan 2008 09:15:39 +0000 (10:15 +0100)]
Merge commit 'remotes/meins/master'

16 years agoacl.h: Add GPL header and doxygen file comment.
Andre Noll [Sun, 13 Jan 2008 16:27:42 +0000 (17:27 +0100)]
acl.h: Add GPL header and doxygen file comment.

16 years agoAdd pointer to documentation of the new acl functions.
Andre Noll [Sun, 13 Jan 2008 16:16:03 +0000 (17:16 +0100)]
Add pointer to documentation of the new acl functions.

16 years agodoxify acl.c.
Andre Noll [Sun, 13 Jan 2008 16:10:03 +0000 (17:10 +0100)]
doxify acl.c.

16 years agoRename acl functions.
Andre Noll [Sun, 13 Jan 2008 15:46:28 +0000 (16:46 +0100)]
Rename acl functions.

Prefix public functions with acl.

16 years agoMove acl functions to separate file acl.c.
Andre Noll [Sun, 13 Jan 2008 15:41:36 +0000 (16:41 +0100)]
Move acl functions to separate file acl.c.

16 years agohttp_send: Make add_perm_list_entry() and del_perm_list_entry() generic.
Andre Noll [Sun, 13 Jan 2008 15:26:17 +0000 (16:26 +0100)]
http_send: Make add_perm_list_entry() and del_perm_list_entry() generic.

16 years agohttp_send.c: Add get_acl_contents() helper.
Andre Noll [Sun, 13 Jan 2008 15:13:27 +0000 (16:13 +0100)]
http_send.c: Add get_acl_contents() helper.

16 years agohttp_send.c: Make host_in_acl() generic.
Andre Noll [Sun, 13 Jan 2008 15:04:54 +0000 (16:04 +0100)]
http_send.c: Make host_in_acl() generic.

Add an additional parameter for the list head that defines the acl.

16 years agohttp_send.c: Only pass the fd to host_in_access_perm_list().
Andre Noll [Sun, 13 Jan 2008 15:02:39 +0000 (16:02 +0100)]
http_send.c: Only pass the fd to host_in_access_perm_list().

No need to pass a pointer to struct http_client as only its ->fd member
is used. Rename this function to host_in_acl while we're at it.

16 years agohttp_send.c: Make init_access_control_list() generic.
Andre Noll [Sun, 13 Jan 2008 14:58:20 +0000 (15:58 +0100)]
http_send.c: Make init_access_control_list() generic.

16 years agohttp_send: Rename access_perm_list to http_acl.
Andre Noll [Sun, 13 Jan 2008 14:49:51 +0000 (15:49 +0100)]
http_send: Rename access_perm_list to http_acl.

16 years agonew codename, reset version to git
Andre Noll [Sat, 12 Jan 2008 22:23:18 +0000 (23:23 +0100)]
new codename, reset version to git

16 years agothe paraslash-0.3.0 release tarball
Andre Noll [Sat, 12 Jan 2008 22:04:55 +0000 (23:04 +0100)]
the paraslash-0.3.0 release tarball

16 years agoparaslash 0.3.0 v0.3.0
Andre Noll [Sat, 12 Jan 2008 22:03:57 +0000 (23:03 +0100)]
paraslash 0.3.0

16 years agomake all: Also build man pages.
Andre Noll [Sat, 12 Jan 2008 21:26:49 +0000 (22:26 +0100)]
make all: Also build man pages.

Without this patch, man pages are built during make install. It's more
natural to build them at make time.

16 years agomake clean: Remove man dir.
Andre Noll [Sat, 12 Jan 2008 21:05:20 +0000 (22:05 +0100)]
make clean: Remove man dir.

16 years agoINSTALL: Replace "para" by "para_client".
Andre Noll [Fri, 11 Jan 2008 16:06:58 +0000 (17:06 +0100)]
INSTALL: Replace "para" by "para_client".

The para alias is only introduced in README.afs. Reported by
Johannes Wörner.

16 years agoRemove man pages from tarball.
Andre Noll [Fri, 11 Jan 2008 13:15:41 +0000 (14:15 +0100)]
Remove man pages from tarball.

Since they are re-created at make install time anyway and help2man
is now considered a required tool for building paraslash, there is
no reason to ship the pre-generated man pages with the tarball. This
reduces the size of the tarball by about 2k.

Thanks to Johannes Wörner for pointing out this inconsistency.

16 years agoREQUIREMENTS: Move help2man to the list of required software.
Andre Noll [Fri, 11 Jan 2008 13:03:49 +0000 (14:03 +0100)]
REQUIREMENTS: Move help2man to the list of required software.

The man pages depend on the executables, i.e. make rebuilds a man page
whenever the corresponding executable changes. Therefore help2man is
required even when installing from tarballs.

16 years agoREQUIREMENTS: Link to the english version of the linphone pages.
Andre Noll [Fri, 11 Jan 2008 13:01:57 +0000 (14:01 +0100)]
REQUIREMENTS: Link to the english version of the linphone pages.

16 years agofade.c: Don't include curses.h.
Andre Noll [Thu, 10 Jan 2008 09:48:44 +0000 (10:48 +0100)]
fade.c: Don't include curses.h.

para_fade does not depend on curses. Including curses.h leads to an
error at compile time on linux if the curses headers are not installed.

Thanks to Johannes Wörner for reporting.

16 years agoNEWS: Fix a typo.
Andre Noll [Wed, 9 Jan 2008 08:10:35 +0000 (09:10 +0100)]
NEWS: Fix a typo.

16 years agoChange year in Copyright comment from 2007 to 2008.
Andre Noll [Tue, 8 Jan 2008 19:47:06 +0000 (20:47 +0100)]
Change year in Copyright comment from 2007 to 2008.

16 years agoconfigure.ac: Improve alsa checks.
Andre Noll [Mon, 7 Jan 2008 16:50:15 +0000 (17:50 +0100)]
configure.ac: Improve alsa checks.

On non-Linux systems, do not check for alsa, and do not print the
warning message stating that alsa could not be found.

Also, skip further alsa-checks on the first failure.

16 years agoMerge commit 'remotes/yangtse/master'
Andre Noll [Mon, 7 Jan 2008 16:21:21 +0000 (17:21 +0100)]
Merge commit 'remotes/yangtse/master'

16 years agoFix gcc-warning on Solaris.
Andre Noll [Mon, 7 Jan 2008 16:20:49 +0000 (17:20 +0100)]
Fix gcc-warning on Solaris.

net.c:334: warning: missing braces around initializer

16 years agoMerge commit 'remotes/yangtse/master'
Andre Noll [Mon, 7 Jan 2008 15:32:02 +0000 (16:32 +0100)]
Merge commit 'remotes/yangtse/master'

16 years agoFix configure on Solaris.
Andre Noll [Mon, 7 Jan 2008 15:27:31 +0000 (16:27 +0100)]
Fix configure on Solaris.

Without this patch, configure fails on Solaris because it doesn't find
inet_ntoa() and socket(). These are in libnsl and libsocket
respectively, but AC_CHECK_FUNCS() doesn't know this.

16 years agogui.c: Change para command to "para_client --".
Andre Noll [Sun, 6 Jan 2008 13:13:09 +0000 (14:13 +0100)]
gui.c: Change para command to "para_client --".

16 years agoReformat gui.ggo.
Andre Noll [Sun, 6 Jan 2008 13:12:34 +0000 (14:12 +0100)]
Reformat gui.ggo.

16 years agogui.ggo: Kill --auto_decode.
Andre Noll [Sun, 6 Jan 2008 00:47:23 +0000 (01:47 +0100)]
gui.ggo: Kill --auto_decode.

This option is unused for ages..

16 years agocom_ls(): Always print the basename as the subject if -lv was given.
Andre Noll [Sat, 29 Dec 2007 20:44:28 +0000 (21:44 +0100)]
com_ls(): Always print the basename as the subject if -lv was given.

16 years agoFix a doxygen warning.
Andre Noll [Sat, 29 Dec 2007 20:43:50 +0000 (21:43 +0100)]
Fix a doxygen warning.

16 years agoCosmetics.
Andre Noll [Sat, 29 Dec 2007 20:43:36 +0000 (21:43 +0100)]
Cosmetics.

16 years agoSimplify para_basename().
Andre Noll [Sat, 29 Dec 2007 20:43:13 +0000 (21:43 +0100)]
Simplify para_basename().

No need to allocate additional memory. This saves a malloc/free
in the hot path of com_ls(), the only caller. Also take care for
the case basename == NULL.

16 years agoUpdate bash_completion to v0.3 commands.
Andre Noll [Fri, 28 Dec 2007 16:03:02 +0000 (17:03 +0100)]
Update bash_completion to v0.3 commands.

It doesn't care about options, and it's slow.  But it's better than
what was there before.

16 years agoTurn PARA_STRERROR into an inline function.
Andre Noll [Fri, 28 Dec 2007 13:36:10 +0000 (14:36 +0100)]
Turn PARA_STRERROR into an inline function.

Add documentation and an assertion for (num > 0).

16 years agoFix typo in the help text of the ls command.
Andre Noll [Fri, 28 Dec 2007 13:07:04 +0000 (14:07 +0100)]
Fix typo in the help text of the ls command.

16 years agocom_lsatt(): Fix error message.
Andre Noll [Fri, 28 Dec 2007 13:05:53 +0000 (14:05 +0100)]
com_lsatt(): Fix error message.

We must not use PARA_STRERROR(-ret) if ret is zero.

16 years agoMakefile.in: Fix OS detection.
Andre Noll [Fri, 28 Dec 2007 13:02:55 +0000 (14:02 +0100)]
Makefile.in: Fix OS detection.

The uname_s variable was never defined. Define it and rename SYSTEM
to UNAME_RS while we are at it.

16 years agomood.c: Only print log message if we are actually reloading a mood.
Andre Noll [Fri, 28 Dec 2007 12:59:46 +0000 (13:59 +0100)]
mood.c: Only print log message if we are actually reloading a mood.

16 years agoROUND_UP: Add missing parentheses().
Andre Noll [Fri, 28 Dec 2007 12:54:53 +0000 (13:54 +0100)]
ROUND_UP: Add missing parentheses().

16 years agochunk_queue.c: Fix some typos.
Andre Noll [Thu, 27 Dec 2007 22:36:46 +0000 (23:36 +0100)]
chunk_queue.c: Fix some typos.

16 years agoaft.c: Rename save_audio_file_info() and enum aft_row_offsets.
Andre Noll [Thu, 27 Dec 2007 22:15:19 +0000 (23:15 +0100)]
aft.c: Rename save_audio_file_info() and enum aft_row_offsets.

16 years agoaft.c: Improve documentation of the add command.
Andre Noll [Thu, 27 Dec 2007 22:13:23 +0000 (23:13 +0100)]
aft.c: Improve documentation of the add command.

16 years agoserver.ggo: Remove unused selector option.
Andre Noll [Thu, 27 Dec 2007 14:13:40 +0000 (15:13 +0100)]
server.ggo: Remove unused selector option.

16 years agoChange syntax for selecting moods or playlists.
Andre Noll [Thu, 27 Dec 2007 14:13:12 +0000 (15:13 +0100)]
Change syntax for selecting moods or playlists.

Use m/foo, p/bar instead of m:foo and p:bar. This is much friendlier
to bash completion.

16 years agoCosmetics.
Andre Noll [Thu, 27 Dec 2007 14:11:41 +0000 (15:11 +0100)]
Cosmetics.

16 years agoMakefile.in: Change type of variables to simply expanded type.
Andre Noll [Thu, 27 Dec 2007 14:10:58 +0000 (15:10 +0100)]
Makefile.in: Change type of variables to simply expanded type.

16 years agoconfigure.ac: Add some missing checks.
Andre Noll [Sat, 22 Dec 2007 13:55:21 +0000 (14:55 +0100)]
configure.ac: Add some missing checks.

Noted by autoscan.

16 years agoMake client_pre_select() and client_post_select() static.
Andre Noll [Sat, 22 Dec 2007 13:29:02 +0000 (14:29 +0100)]
Make client_pre_select() and client_post_select() static.

Move functions around a bit to avoid forward-declarations.

16 years agoclient_common.c: Trivial cosmetic cleanups.
Andre Noll [Sat, 22 Dec 2007 13:21:43 +0000 (14:21 +0100)]
client_common.c: Trivial cosmetic cleanups.

16 years agoChange default loglevel for para_fsck from 4 to 3.
Andre Noll [Sat, 22 Dec 2007 13:01:16 +0000 (14:01 +0100)]
Change default loglevel for para_fsck from 4 to 3.

16 years agofsck.c: Improve log messages.
Andre Noll [Sat, 22 Dec 2007 13:00:12 +0000 (14:00 +0100)]
fsck.c: Improve log messages.

16 years agofsck.c: Fix NULL-pointer dereference.
Andre Noll [Sat, 22 Dec 2007 12:58:01 +0000 (13:58 +0100)]
fsck.c: Fix NULL-pointer dereference.

fsck_cleanup() might be called with t == NULL.

16 years agofsck.c: Loglevel adjustments.
Andre Noll [Sat, 22 Dec 2007 12:56:43 +0000 (13:56 +0100)]
fsck.c: Loglevel adjustments.

16 years agoclient_common.c: Kill invalid FIXME.
Andre Noll [Sat, 22 Dec 2007 12:54:58 +0000 (13:54 +0100)]
client_common.c: Kill invalid FIXME.

Short writes can not happen here.

16 years agoclient_common.c: Add a comment to client_connect().
Andre Noll [Sat, 22 Dec 2007 12:54:24 +0000 (13:54 +0100)]
client_common.c: Add a comment to client_connect().

16 years agoREADME.afs: Add some information on para_fsck.
Andre Noll [Sat, 22 Dec 2007 12:53:30 +0000 (13:53 +0100)]
README.afs: Add some information on para_fsck.

16 years agoFix para_client hangs.
Andre Noll [Sat, 22 Dec 2007 12:52:51 +0000 (13:52 +0100)]
Fix para_client hangs.

In the client event handler we have to set the eof variable
to a negative value in order to shut down the stdout task.

Rename eof to error while at it.

16 years agoReplace funny statement in para_next_signal() by readable code.
Andre Noll [Tue, 18 Dec 2007 07:19:29 +0000 (08:19 +0100)]
Replace funny statement in para_next_signal() by readable code.

This happened to be correct only by coincidence. Quoting Linus:

Assignments inside tests should probably be relegated entirely
to loop constructs, where doing them outside the test changes
semantics.

16 years ago03_STAT_no-clients.diff
Gerrit Renker [Mon, 17 Dec 2007 12:12:25 +0000 (13:12 +0100)]
03_STAT_no-clients.diff

Avoids messages like
Dec 15 20:01:25 _tiptop 1 stat_client_write: 0 client(s)
which would otherwise flood the debug log.

16 years ago02_HTTP_access-list.diff
Gerrit Renker [Mon, 17 Dec 2007 12:12:25 +0000 (13:12 +0100)]
02_HTTP_access-list.diff

After adding IPv6 support the access list matching routine was left in
a broken state. This patch fixes the problem by continuing the support
for IPv4 address/netmask access lists.
The following problems are fixed:
 * support for a server listening to both IPv6 (AF_INET6) and IPv4 (AF_INET)
   address (since one can not assume that the server's address has AF_INET);
 * explicit support for addresses in network-byte-order (without having to reverse
   the netmask);
 * a routine to extract v6-mapped IPv4 addresses ("::FFFF:x.x.x.x") for IPv4
   clients connecting to a (dual-stack) IPv6 server.

When the access list is in use, the connection mode is automatically switched to
IPv4, i.e. IPv6 clients connecting to the server will be treated as if they were
in the deny-list.

16 years ago01_DCCP_shutdown-unnecessary.diff
Gerrit Renker [Mon, 17 Dec 2007 12:12:25 +0000 (13:12 +0100)]
01_DCCP_shutdown-unnecessary.diff

This calls shutdown(2) for unused communication paths in the DCCP sender/receiver:
 * the sender does not read data from the client and so calls shutdown(SHUT_RD);
 * the client does not send data to the server and so calls shutdown(SHUT_WR).
The advantage that this buys is a performance optimisation: using shutdown(2) in
DCCP means disabling the corresponding CCID kernel modules, which reduces the
processing costs, i.e.
 * when using SHUT_RD, the receiver congestion-control module is de-activated;
 * when using SHUT_WR, the sender congestion-control module is de-activated.

More information can be found on
http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/shutdown/

16 years agoa/command_util.sh: Convert template members also in the short description.
Andre Noll [Sun, 16 Dec 2007 18:34:56 +0000 (19:34 +0100)]
a/command_util.sh: Convert template members also in the short description.

16 years agoMinor documentation improvements.
Andre Noll [Sun, 16 Dec 2007 18:34:10 +0000 (19:34 +0100)]
Minor documentation improvements.

16 years agofilter.h: Trivial documentation cleanups.
Andre Noll [Sat, 15 Dec 2007 17:06:46 +0000 (18:06 +0100)]
filter.h: Trivial documentation cleanups.

16 years agoMore error cleanups.
Andre Noll [Sat, 15 Dec 2007 16:45:01 +0000 (17:45 +0100)]
More error cleanups.

16 years agoerror.h: Remove unused E_CHDIR.
Andre Noll [Sat, 15 Dec 2007 16:31:29 +0000 (17:31 +0100)]
error.h: Remove unused E_CHDIR.

16 years agoerror.h: Remove some unused errors.
Andre Noll [Sat, 15 Dec 2007 16:23:24 +0000 (17:23 +0100)]
error.h: Remove some unused errors.

16 years agoKill unused E_FSTAT.
Andre Noll [Sat, 15 Dec 2007 16:14:17 +0000 (17:14 +0100)]
Kill unused E_FSTAT.

16 years agoerror.h: Kill unused DCCP_ERRORS.
Andre Noll [Sat, 15 Dec 2007 16:11:48 +0000 (17:11 +0100)]
error.h: Kill unused DCCP_ERRORS.

16 years agoReplace eof by error in receivers/filters/writers.
Andre Noll [Sat, 15 Dec 2007 16:01:47 +0000 (17:01 +0100)]
Replace eof by error in receivers/filters/writers.

This way it's possible to tell at a later time why
the receiver/filter/writer terminated.

This allows to increase the delay for reconnecting in case
the receiver failed to connect to para_server: Let the receivers
set the error value to -E_RECV_EOF in case a normal end of file
event occurred and check this value when calculating the restart
barrier.

16 years agoFix some typos.
Andre Noll [Sat, 15 Dec 2007 15:49:47 +0000 (16:49 +0100)]
Fix some typos.

16 years agoMerge commit 'remotes/fml/master'
Andre Noll [Tue, 11 Dec 2007 20:17:01 +0000 (21:17 +0100)]
Merge commit 'remotes/fml/master'

16 years agoFix a gcc warning on MacOS.
Andre Noll [Tue, 11 Dec 2007 16:48:36 +0000 (17:48 +0100)]
Fix a gcc warning on MacOS.

16 years agoMakefile.in: Avoid gcc warnings on non-linux systems.
Andre Noll [Tue, 11 Dec 2007 16:48:11 +0000 (17:48 +0100)]
Makefile.in: Avoid gcc warnings on non-linux systems.

-fdata-sections, -ffunction-sections, -Wl,--gc-sections, -Wstrict-prototypes
and -Wshadow produce quite a lot of warnings on at least NetBSD and MacOS. So
use these flags only on Linux.

16 years agoFix SIGUSR1 handling on Solaris.
Andre Noll [Tue, 11 Dec 2007 16:42:24 +0000 (17:42 +0100)]
Fix SIGUSR1 handling on Solaris.

para_client dies the second time it receives SIGUSR1, because the signal action
is restored to the default state once the signal handler has been called.

16 years agoMerge commit 'remotes/fml/master'
Andre Noll [Tue, 11 Dec 2007 16:40:50 +0000 (17:40 +0100)]
Merge commit 'remotes/fml/master'

16 years agoserver.c: Check return value of signal().
Andre Noll [Tue, 11 Dec 2007 16:37:16 +0000 (17:37 +0100)]
server.c: Check return value of signal().

And replace the ugly code that counted the number of calls to
para_install_sighandler() by equivalent, but less ugly code.

16 years agoSimplify SIGUR1 handling.
Andre Noll [Tue, 11 Dec 2007 16:31:24 +0000 (17:31 +0100)]
Simplify SIGUR1 handling.

There's no need to catch this signal in server.c as it is unly used to notify
its children. So just ignore it.

16 years agostat.c: Simplify stat_client_write().
Andre Noll [Tue, 11 Dec 2007 12:08:04 +0000 (13:08 +0100)]
stat.c: Simplify stat_client_write().

Use write_ok() instead of open coding.

16 years agoMerge commit 'remotes/yangtse/master'
Andre Noll [Sun, 9 Dec 2007 21:02:06 +0000 (22:02 +0100)]
Merge commit 'remotes/yangtse/master'

16 years agoMerge commit 'remotes/fml/master'
Andre Noll [Sun, 9 Dec 2007 21:01:52 +0000 (22:01 +0100)]
Merge commit 'remotes/fml/master'

16 years agoafs.h: Doxify comment for struct audio_file_data.
Andre Noll [Sat, 8 Dec 2007 19:47:39 +0000 (20:47 +0100)]
afs.h: Doxify comment for struct audio_file_data.

16 years agoafs.h: Kill unused function declaration close_audio_file().
Andre Noll [Sat, 8 Dec 2007 19:46:44 +0000 (20:46 +0100)]
afs.h: Kill unused function declaration close_audio_file().

16 years agoAdd new "screenshots".
Andre Noll [Sat, 8 Dec 2007 18:47:54 +0000 (19:47 +0100)]
Add new "screenshots".

16 years agoAdd new status items num_chunks and chunk_time.
Andre Noll [Sat, 8 Dec 2007 18:14:50 +0000 (19:14 +0100)]
Add new status items num_chunks and chunk_time.

16 years agoMerge commit 'remotes/fml/master'
Andre Noll [Fri, 7 Dec 2007 16:34:38 +0000 (17:34 +0100)]
Merge commit 'remotes/fml/master'

16 years agoalsa_write.c: Don't abort on EAGAIN.
Andre Noll [Thu, 6 Dec 2007 21:12:03 +0000 (22:12 +0100)]
alsa_write.c: Don't abort on EAGAIN.

Just retry a bit later.

16 years agocommand_util.sh: Add missing newline.
Andre Noll [Wed, 5 Dec 2007 16:38:01 +0000 (17:38 +0100)]
command_util.sh: Add missing newline.