Commit d94eaf58 authored by Led's avatar Led

0.8.2

parent 24721bba
ver 0.8.1 (2003/7/15) ver 0.8.2 (2003/7/22)
1) Increased the connection que for listen() from 0 to 5
2) Cleanup configure makefiles so that mpd uses MPD_LIBS and MPD_CFLAGS
rather than LIBS and CFLAGS
3) Put a cap on the number of commands per command list
4) Put a cap on the maximum number of buffered output lines
5) Get rid of TIME_WAIT/EADDRINUSE socket problem
6) Use asynchronious IO (i.e. trigger SIGIO instead so we can sleep in
select() calls longer)
ver 0.8.1 (2003/7/11)
1) FreeBSD fixes 1) FreeBSD fixes
2) Fix for rare segfault when updating 2) Fix for rare segfault when updating
3) Fix bug where client was being hungup on when done playing current song 3) Fix bug where client was being hungup on when done playing current song
......
...@@ -10,7 +10,7 @@ For Red Hat 8.0, the neccessary packages are: libao and libao-devel) ...@@ -10,7 +10,7 @@ For Red Hat 8.0, the neccessary packages are: libao and libao-devel)
zlib - http://www.gzip.org/zlib zlib - http://www.gzip.org/zlib
(This comes with all distributions. Make sure you have bot the zlib libs (This comes with all distributions. Make sure you have bot the zlib libs
and delevelopment packages for your distribution installed. For Red hat, and development packages for your distribution installed. For Red hat,
the neccessary packages are: zlib and zlib-devel) the neccessary packages are: zlib and zlib-devel)
Optional Optional
......
bin_PROGRAMS = mpd bin_PROGRAMS = mpd
SUBDIRS = $(ID3_SUBDIR) $(MAD_SUBDIR) SUBDIRS = $(ID3_SUBDIR) $(MAD_SUBDIR)
man_MANS = mpd.1
pkgdata_DATA = mpdconf.example README INSTALL pkgdata_DATA = mpdconf.example README INSTALL
EXTRA_DIST = COMMANDS UPGRADING $(pkgdata_DATA) EXTRA_DIST = COMMANDS UPGRADING $(pkgdata_DATA) $(man_MANS)
mpd_headers = buffer2array.h interface.h command.h playlist.h ls.h \ mpd_headers = buffer2array.h interface.h command.h playlist.h ls.h \
song.h list.h directory.h tables.h utils.h path.h flac_decode.h \ song.h list.h directory.h tables.h utils.h path.h flac_decode.h \
tag.h player.h listen.h conf.h ogg_decode.h volume.h mp3_decode.h \ tag.h player.h listen.h conf.h ogg_decode.h volume.h mp3_decode.h \
audio.h buffer.h stats.h myfprintf.h audio.h buffer.h stats.h myfprintf.h sig_handlers.h
mpd_SOURCES = main.c buffer2array.c interface.c command.c playlist.c ls.c \ mpd_SOURCES = main.c buffer2array.c interface.c command.c playlist.c ls.c \
song.c list.c directory.c tables.c utils.c path.c flac_decode.c\ song.c list.c directory.c tables.c utils.c path.c flac_decode.c\
tag.c player.c listen.c conf.c ogg_decode.c volume.c mp3_decode.c \ tag.c player.c listen.c conf.c ogg_decode.c volume.c mp3_decode.c \
audio.c buffer.c stats.c myfprintf.c $(mpd_headers) audio.c buffer.c stats.c myfprintf.c sig_handlers.c $(mpd_headers)
mpd_LDADD = $(ID3_LIB) $(MAD_LIB) CFLAGS = @CFLAGS@ $(MPD_CFLAGS)
mpd_LDADD = $(MPD_LIBS) $(ID3_LIB) $(MAD_LIB)
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
Music Player Daemon (MPD) Music Player Daemon (MPD)
http://musicpd.sourceforge.net http://musicpd.sourceforge.net
A daemon for playing music (currently mp3 and ogg vorbis). Music is played A daemon for playing music (mp3, ogg vorbis, and flac). Music is played
through the server's audio device. The daemon stores info about all available through the server's audio device. The daemon stores info about all available
music, and this info can be easily searched and retrieved. Player control, info music, and this info can be easily searched and retrieved. Player control, info
retrieval, and playlist management can all be managed remotely. retrieval, and playlist management can all be managed remotely.
......
...@@ -113,7 +113,7 @@ int processCommand(FILE * fp, int argArrayLength, char ** argArray) { ...@@ -113,7 +113,7 @@ int processCommand(FILE * fp, int argArrayLength, char ** argArray) {
} }
if(0==strcmp(argArray[0],COMMAND_PLAY)) { if(0==strcmp(argArray[0],COMMAND_PLAY)) {
int song; int song = 0;
char * test; char * test;
if(argArrayLength>2) { if(argArrayLength>2) {
myfprintf(fp,"%s too many arguments for \"%s\"\n",COMMAND_RESPOND_ERROR,argArray[0]); myfprintf(fp,"%s too many arguments for \"%s\"\n",COMMAND_RESPOND_ERROR,argArray[0]);
...@@ -126,7 +126,6 @@ int processCommand(FILE * fp, int argArrayLength, char ** argArray) { ...@@ -126,7 +126,6 @@ int processCommand(FILE * fp, int argArrayLength, char ** argArray) {
return -1; return -1;
} }
} }
else song = 0;
return playPlaylist(fp,song); return playPlaylist(fp,song);
} }
else if(0==strcmp(argArray[0],COMMAND_STOP)) { else if(0==strcmp(argArray[0],COMMAND_STOP)) {
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#define MAX_STRING_SIZE MAXPATHLEN+80 #define MAX_STRING_SIZE MAXPATHLEN+80
#define CONF_NUMBER_OF_PARAMS 11 #define CONF_NUMBER_OF_PARAMS 13
#define CONF_NUMBER_OF_PATHS 4 #define CONF_NUMBER_OF_PATHS 4
#define CONF_NUMBER_OF_REQUIRED 5 #define CONF_NUMBER_OF_REQUIRED 5
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#define CONF_MAX_PLAYLIST_LENGTH_DEFAULT "4096" #define CONF_MAX_PLAYLIST_LENGTH_DEFAULT "4096"
#define CONF_BUFFER_BEFORE_PLAY_DEFAULT "25%" #define CONF_BUFFER_BEFORE_PLAY_DEFAULT "25%"
#define CONF_STOP_ON_ERROR_DEFAULT "yes" #define CONF_STOP_ON_ERROR_DEFAULT "yes"
#define CONF_MAX_COMMAND_LIST_SIZE_DEFAULT "2048"
#define CONF_MAX_OUTPUT_BUFFER_SIZE_DEFAULT "2048"
char conf_strings[CONF_NUMBER_OF_PARAMS][24] = { char conf_strings[CONF_NUMBER_OF_PARAMS][24] = {
"port", "port",
...@@ -50,7 +52,9 @@ char conf_strings[CONF_NUMBER_OF_PARAMS][24] = { ...@@ -50,7 +52,9 @@ char conf_strings[CONF_NUMBER_OF_PARAMS][24] = {
"max_connections", "max_connections",
"max_playlist_length", "max_playlist_length",
"buffer_before_play", "buffer_before_play",
"stop_on_error" "stop_on_error",
"max_command_list_size",
"max_output_buffer_size"
}; };
int conf_absolutePaths[CONF_NUMBER_OF_PATHS] = { int conf_absolutePaths[CONF_NUMBER_OF_PATHS] = {
...@@ -82,6 +86,8 @@ void initConf() { ...@@ -82,6 +86,8 @@ void initConf() {
conf_params[CONF_MAX_PLAYLIST_LENGTH] = strdup(CONF_MAX_PLAYLIST_LENGTH_DEFAULT); conf_params[CONF_MAX_PLAYLIST_LENGTH] = strdup(CONF_MAX_PLAYLIST_LENGTH_DEFAULT);
conf_params[CONF_BUFFER_BEFORE_PLAY] = strdup(CONF_BUFFER_BEFORE_PLAY_DEFAULT); conf_params[CONF_BUFFER_BEFORE_PLAY] = strdup(CONF_BUFFER_BEFORE_PLAY_DEFAULT);
conf_params[CONF_STOP_ON_ERROR] = strdup(CONF_STOP_ON_ERROR_DEFAULT); conf_params[CONF_STOP_ON_ERROR] = strdup(CONF_STOP_ON_ERROR_DEFAULT);
conf_params[CONF_MAX_COMMAND_LIST_SIZE] = strdup(CONF_MAX_COMMAND_LIST_SIZE_DEFAULT);
conf_params[CONF_MAX_OUTPUT_BUFFER_SIZE] = strdup(CONF_MAX_OUTPUT_BUFFER_SIZE_DEFAULT);
} }
char ** readConf(char * file) { char ** readConf(char * file) {
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#define CONF_MAX_PLAYLIST_LENGTH 8 #define CONF_MAX_PLAYLIST_LENGTH 8
#define CONF_BUFFER_BEFORE_PLAY 9 #define CONF_BUFFER_BEFORE_PLAY 9
#define CONF_STOP_ON_ERROR 10 #define CONF_STOP_ON_ERROR 10
#define CONF_MAX_COMMAND_LIST_SIZE 11
#define CONF_MAX_OUTPUT_BUFFER_SIZE 12
/* do not free the return value, it is a static variable */ /* do not free the return value, it is a static variable */
char ** readConf(char * file); char ** readConf(char * file);
......
AC_INIT(main.c) AC_INIT(main.c)
AM_INIT_AUTOMAKE(mpd, 0.8.1) AM_INIT_AUTOMAKE(mpd, 0.8.2)
AC_PROG_CC AC_PROG_CC
AC_PROG_INSTALL AC_PROG_INSTALL
...@@ -8,13 +8,16 @@ AC_PROG_LIBTOOL ...@@ -8,13 +8,16 @@ AC_PROG_LIBTOOL
dnl MAD wants this stuff dnl MAD wants this stuff
AC_SUBST(CCAS) AC_SUBST(CCAS)
AC_SUBST(CCASFLAGS) AC_SUBST(CCASFLAGS)
AC_SUBST(MAD_SUBDIR) AC_SUBST(MAD_SUBDIR)
AC_SUBST(MAD_LIB) AC_SUBST(MAD_LIB)
AC_SUBST(ID3_SUBDIR) AC_SUBST(ID3_SUBDIR)
AC_SUBST(ID3_LIB) AC_SUBST(ID3_LIB)
AC_SUBST(MPD_LIBS)
AC_SUBST(MPD_CFLAGS)
set -- $CFLAGS MPD_CFLAGS="-Wall"
CFLAGS="-Wall $CFLAGS" MPD_LIBS=""
AC_ARG_ENABLE(ogg,[ --disable-ogg disable ogg support],,enable_ogg=yes) AC_ARG_ENABLE(ogg,[ --disable-ogg disable ogg support],,enable_ogg=yes)
AC_ARG_ENABLE(flac,[ --disable-flac disable flac support],,enable_flac=yes) AC_ARG_ENABLE(flac,[ --disable-flac disable flac support],,enable_flac=yes)
...@@ -23,8 +26,8 @@ AC_ARG_ENABLE(mpd_mad,[ --enable-mpd-mad use mpd libmad],use_mpd_mad=yes,) ...@@ -23,8 +26,8 @@ AC_ARG_ENABLE(mpd_mad,[ --enable-mpd-mad use mpd libmad],use_mpd_mad=yes,)
AC_ARG_ENABLE(id3,[ --disable-id3 disable id3 support],,enable_id3=yes) AC_ARG_ENABLE(id3,[ --disable-id3 disable id3 support],,enable_id3=yes)
AC_ARG_ENABLE(mpd_id3tag,[ --enable-mpd-id3tag use mpd libid3tag],use_mpd_id3tag=yes,) AC_ARG_ENABLE(mpd_id3tag,[ --enable-mpd-id3tag use mpd libid3tag],use_mpd_id3tag=yes,)
XIPH_PATH_AO(LIBS="$LIBS $AO_LIBS" CFLAGS="$CFLAGS $AO_CFLAGS",AC_MSG_ERROR(Must have libao installed!!!)) XIPH_PATH_AO(MPD_LIBS="$MPD_LIBS $AO_LIBS" MPD_CFLAGS="$MPD_CFLAGS $AO_CFLAGS",AC_MSG_ERROR(Must have libao installed!!!))
AC_CHECK_HEADER(sys/soundcard.h,CFLAGS="$CFLAGS",[CFLAGS="$CFLAGS -DNO_OSS_MIXER";AC_MSG_WARN(Soundcard headers not found -- disabling mixer)]) AC_CHECK_HEADER(sys/soundcard.h,,[MPD_CFLAGS="$MPD_CFLAGS -DNO_OSS_MIXER";AC_MSG_WARN(Soundcard headers not found -- disabling mixer)])
ID3_SUBDIR="" ID3_SUBDIR=""
...@@ -40,12 +43,12 @@ if test x$enable_id3 = xyes; then ...@@ -40,12 +43,12 @@ if test x$enable_id3 = xyes; then
CFLAGS=$oldcflags CFLAGS=$oldcflags
fi fi
if test x$use_mpd_id3tag = xyes; then if test x$use_mpd_id3tag = xyes; then
CFLAGS="$CFLAGS -DUSE_MPD_ID3TAG" MPD_CFLAGS="$MPD_CFLAGS -DUSE_MPD_ID3TAG"
ID3_LIB="libid3tag/libid3tag.la" ID3_LIB="libid3tag/libid3tag.la"
ID3_SUBDIR="libid3tag" ID3_SUBDIR="libid3tag"
AC_CONFIG_SUBDIRS(libid3tag) AC_CONFIG_SUBDIRS(libid3tag)
fi fi
CFLAGS="$CFLAGS -DHAVE_ID3TAG" MPD_CFLAGS="$MPD_CFLAGS -DHAVE_ID3TAG"
fi fi
MAD_SUBDIR="" MAD_SUBDIR=""
...@@ -58,44 +61,50 @@ if test x$enable_mp3 = xyes; then ...@@ -58,44 +61,50 @@ if test x$enable_mp3 = xyes; then
[use_libmad=no;use_mpd_mad=yes]) [use_libmad=no;use_mpd_mad=yes])
fi fi
if test x$use_mpd_mad = xyes; then if test x$use_mpd_mad = xyes; then
CFLAGS="$CFLAGS -DUSE_MPD_MAD" MPD_CFLAGS="$MPD_CFLAGS -DUSE_MPD_MAD"
MAD_LIB="libmad/libmad.la" MAD_LIB="libmad/libmad.la"
MAD_SUBDIR="libmad" MAD_SUBDIR="libmad"
AC_CONFIG_SUBDIRS(libmad) AC_CONFIG_SUBDIRS(libmad)
fi fi
CFLAGS="$CFLAGS -DHAVE_MAD" MPD_CFLAGS="$MPD_CFLAGS -DHAVE_MAD"
fi fi
if test x$enable_ogg = xyes; then if test x$enable_ogg = xyes; then
XIPH_PATH_OGG(LIBS="$LIBS $OGG_LIBS" CFLAGS="$CFLAGS $OGG_CFLAGS" enable_vorbistest=no,enable_ogg=no) XIPH_PATH_OGG(MPD_LIBS="$MPD_LIBS $OGG_LIBS" MPD_CFLAGS="$MPD_CFLAGS $OGG_CFLAGS" enable_vorbistest=no,enable_ogg=no)
fi fi
if test x$enable_ogg = xyes; then if test x$enable_ogg = xyes; then
XIPH_PATH_VORBIS(LIBS="$LIBS $VORBIS_LIBS $VORBISFILE_LIBS" CFLAGS="$CFLAGS $VORBIS_CFLAGS $VORBISFILE_CFLAGS",enable_ogg=no) XIPH_PATH_VORBIS(MPD_LIBS="$MPD_LIBS $VORBIS_LIBS $VORBISFILE_LIBS" MPD_CFLAGS="$MPD_CFLAGS $VORBIS_CFLAGS $VORBISFILE_CFLAGS",enable_ogg=no)
fi fi
if test x$enable_ogg = xyes; then if test x$enable_ogg = xyes; then
CFLAGS="$CFLAGS -DHAVE_OGG" MPD_CFLAGS="$MPD_CFLAGS -DHAVE_OGG"
fi fi
if test x$enable_flac = xyes; then if test x$enable_flac = xyes; then
oldcflags="$CFLAGS" oldmpdcflags="$MPD_CFLAGS"
oldlibs="$LIBS" oldmpdlibs="$MPD_LIBS"
AM_PATH_LIBFLAC(LIBS="$LIBS $LIBFLAC_LIBS" CFLAGS="$CFLAGS $LIBFLAC_CFLAGS",enable_flac=no) AM_PATH_LIBFLAC(MPD_LIBS="$MPD_LIBS $LIBFLAC_LIBS" MPD_CFLAGS="$MPD_CFLAGS $LIBFLAC_CFLAGS",enable_flac=no)
fi fi
if test x$enable_flac = xyes; then if test x$enable_flac = xyes; then
oldcflags="$CFLAGS"
oldlibs="$LIBS"
CFLAGS="$CFLAGS $MPD_CFLAGS"
LIBS="$LIBS $MPD_LIBS"
AC_CHECK_LIB(FLAC, FLAC__metadata_object_vorbiscomment_find_entry_from, AC_CHECK_LIB(FLAC, FLAC__metadata_object_vorbiscomment_find_entry_from,
,[enable_flac=no;AC_MSG_WARN(You need FLAC 1.1 -- disabling flac support)]) ,[enable_flac=no;AC_MSG_WARN(You need FLAC 1.1 -- disabling flac support)])
if test x$enable_flac = xno; then if test x$enable_flac = xno; then
CFLAGS="$oldcflags" MPD_CFLAGS="$oldmpdcflags"
LIBS="$oldlibs" MPD_LIBS="$oldmpdlibs"
fi fi
CFLAGS="$oldcflags"
LIBS="$oldlibs"
fi fi
if test x$enable_flac = xyes; then if test x$enable_flac = xyes; then
CFLAGS="$CFLAGS -DHAVE_FLAC" MPD_CFLAGS="$MPD_CFLAGS -DHAVE_FLAC"
fi fi
AC_OUTPUT(Makefile) AC_OUTPUT(Makefile)
#!/bin/sh #!/bin/sh
# #
# install - install a program, script, or datafile # install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
# #
# This originates from X11R5 (mit/util/scripts/install.sh), which was # Copyright 1991 by the Massachusetts Institute of Technology
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
# #
# Copyright (C) 1994 X Consortium # Permission to use, copy, modify, distribute, and sell this software and its
# # documentation for any purpose is hereby granted without fee, provided that
# Permission is hereby granted, free of charge, to any person obtaining a copy # the above copyright notice appear in all copies and that both that
# of this software and associated documentation files (the "Software"), to # copyright notice and this permission notice appear in supporting
# deal in the Software without restriction, including without limitation the # documentation, and that the name of M.I.T. not be used in advertising or
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # publicity pertaining to distribution of the software without specific,
# sell copies of the Software, and to permit persons to whom the Software is # written prior permission. M.I.T. makes no representations about the
# furnished to do so, subject to the following conditions: # suitability of this software for any purpose. It is provided "as is"
# # without express or implied warranty.
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
# #
# Calling this script install-sh is preferred over install.sh, to prevent # Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it # `make' implicit rules from creating a file called install from it
...@@ -74,7 +56,7 @@ dir_arg="" ...@@ -74,7 +56,7 @@ dir_arg=""
while [ x"$1" != x ]; do while [ x"$1" != x ]; do
case $1 in case $1 in
-c) instcmd="$cpprog" -c) instcmd=$cpprog
shift shift
continue;; continue;;
...@@ -97,7 +79,7 @@ while [ x"$1" != x ]; do ...@@ -97,7 +79,7 @@ while [ x"$1" != x ]; do
shift shift
continue;; continue;;
-s) stripcmd="$stripprog" -s) stripcmd=$stripprog
shift shift
continue;; continue;;
...@@ -124,7 +106,7 @@ done ...@@ -124,7 +106,7 @@ done
if [ x"$src" = x ] if [ x"$src" = x ]
then then
echo "install: no input file specified" echo "$0: no input file specified" >&2
exit 1 exit 1
else else
: :
...@@ -133,8 +115,8 @@ fi ...@@ -133,8 +115,8 @@ fi
if [ x"$dir_arg" != x ]; then if [ x"$dir_arg" != x ]; then
dst=$src dst=$src
src="" src=""
if [ -d $dst ]; then if [ -d "$dst" ]; then
instcmd=: instcmd=:
chmodcmd="" chmodcmd=""
else else
...@@ -143,20 +125,20 @@ if [ x"$dir_arg" != x ]; then ...@@ -143,20 +125,20 @@ if [ x"$dir_arg" != x ]; then
else else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad # might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'. # if $src (and thus $dsttmp) contains '*'.
if [ -f "$src" ] || [ -d "$src" ] if [ -f "$src" ] || [ -d "$src" ]
then then
: :
else else
echo "install: $src does not exist" echo "$0: $src does not exist" >&2
exit 1 exit 1
fi fi
if [ x"$dst" = x ] if [ x"$dst" = x ]
then then
echo "install: no destination specified" echo "$0: no destination specified" >&2
exit 1 exit 1
else else
: :
...@@ -165,16 +147,16 @@ else ...@@ -165,16 +147,16 @@ else
# If destination is a directory, append the input filename; if your system # If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic # does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ] if [ -d "$dst" ]
then then
dst="$dst"/`basename $src` dst=$dst/`basename "$src"`
else else
: :
fi fi
fi fi
## this sed command emulates the dirname command ## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists. # Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script # this part is taken from Noah Friedman's mkinstalldirs script
...@@ -183,69 +165,73 @@ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` ...@@ -183,69 +165,73 @@ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
if [ ! -d "$dstdir" ]; then if [ ! -d "$dstdir" ]; then
defaultIFS=' defaultIFS='
' '
IFS="${IFS-${defaultIFS}}" IFS="${IFS-$defaultIFS}"
oIFS="${IFS}" oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason. # Some sh's can't handle IFS=/ for some reason.
IFS='%' IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}" IFS=$oIFS
pathcomp='' pathcomp=''
while [ $# -ne 0 ] ; do while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}" pathcomp=$pathcomp$1
shift shift
if [ ! -d "${pathcomp}" ] ; if [ ! -d "$pathcomp" ] ;
then then
$mkdirprog "${pathcomp}" $mkdirprog "$pathcomp"
else else
: :
fi fi
pathcomp="${pathcomp}/" pathcomp=$pathcomp/
done done
fi fi
if [ x"$dir_arg" != x ] if [ x"$dir_arg" != x ]
then then
$doit $instcmd $dst && $doit $instcmd "$dst" &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
else else
# If we're going to rename the final executable, determine the name now. # If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ] if [ x"$transformarg" = x ]
then then
dstfile=`basename $dst` dstfile=`basename "$dst"`
else else
dstfile=`basename $dst $transformbasename | dstfile=`basename "$dst" $transformbasename |
sed $transformarg`$transformbasename sed $transformarg`$transformbasename
fi fi
# don't allow the sed command to completely eliminate the filename # don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ] if [ x"$dstfile" = x ]
then then
dstfile=`basename $dst` dstfile=`basename "$dst"`
else else
: :
fi fi
# Make a temp file name in the proper directory. # Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/#inst.$$# dsttmp=$dstdir/#inst.$$#
rmtmp=$dstdir/#rm.$$#
# Move or copy the file name to the temp name # Trap to clean up temp files at exit.
$doit $instcmd $src $dsttmp && trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
trap '(exit $?); exit' 1 2 13 15
trap "rm -f ${dsttmp}" 0 && # Move or copy the file name to the temp name
$doit $instcmd "$src" "$dsttmp" &&
# and set any options; do chmod last to preserve setuid bits # and set any options; do chmod last to preserve setuid bits
...@@ -253,17 +239,38 @@ else ...@@ -253,17 +239,38 @@ else
# ignore errors from any of these, just make sure not to ignore # ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command. # errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
# Now remove or move aside any old file at destination location. We try this
# two ways since rm can't unlink itself on some systems and the destination
# file might be busy for other reasons. In this case, the final cleanup
# might fail but the new file should still install successfully.
{
if [ -f "$dstdir/$dstfile" ]
then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
{
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit
}
else
:
fi
} &&
# Now rename the file to the real destination. # Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi && fi &&
# The final little trick to "correctly" pass the exit status to the exit trap.
exit 0 {
(exit 0); exit
}
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "conf.h" #include "conf.h"
#include "list.h" #include "list.h"
#include "myfprintf.h" #include "myfprintf.h"
#include "listen.h"
#include <unistd.h> #include <unistd.h>
#include <stdio.h> #include <stdio.h>
...@@ -30,9 +31,11 @@ ...@@ -30,9 +31,11 @@
#include <sys/time.h> #include <sys/time.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/param.h> #include <sys/param.h>
#include <sys/select.h>
#include <string.h> #include <string.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>
#include <signal.h>
#define GREETING "MPD" #define GREETING "MPD"
...@@ -42,6 +45,8 @@ ...@@ -42,6 +45,8 @@
int interface_max_connections; int interface_max_connections;
int interface_timeout; int interface_timeout;
unsigned long long interface_max_command_list_size;
unsigned long long interface_max_output_buffer_size;
typedef struct _Interface { typedef struct _Interface {
char buffer[INTERFACE_MAX_BUFFER_LENGTH+2]; char buffer[INTERFACE_MAX_BUFFER_LENGTH+2];
...@@ -51,24 +56,35 @@ typedef struct _Interface { ...@@ -51,24 +56,35 @@ typedef struct _Interface {
int open; /* open/used */ int open; /* open/used */
time_t lastTime; time_t lastTime;
List * commandList; /* for when in list mode */ List * commandList; /* for when in list mode */
unsigned long long commandListSize; /* mem commandList consumes */
List * bufferList; /* for output if client is slow */ List * bufferList; /* for output if client is slow */
unsigned long long outputBufferSize; /* mem bufferList consumes */
int expired; /* set wether this interface should be closed on next
check of old interfaces */
} Interface; } Interface;
Interface * interfaces = NULL; Interface * interfaces = NULL;
void flushInterfaceBuffer(Interface * interface);
void openInterface(Interface * interface, int fd) { void openInterface(Interface * interface, int fd) {
int flags;
assert(interface->open==0); assert(interface->open==0);
fcntl(fd,F_SETFD,FD_CLOEXEC);
interface->bufferLength = 0; interface->bufferLength = 0;
interface->fd = fd; interface->fd = fd;
fcntl(interface->fd,F_SETFL,O_NONBLOCK); fcntl(interface->fd,F_SETOWN,(int)getpid());
flags = fcntl(fd,F_GETFL);
flags|=O_NONBLOCK | O_ASYNC;
fcntl(interface->fd,F_SETFL,flags);
interface->fp = fdopen(fd,"rw"); interface->fp = fdopen(fd,"rw");
interface->open = 1; interface->open = 1;
interface->lastTime = time(NULL); interface->lastTime = time(NULL);
interface->commandList = NULL; interface->commandList = NULL;
interface->bufferList = NULL; interface->bufferList = NULL;
interface->expired = 0;
interface->outputBufferSize = 0;
myfprintf(interface->fp,"%s %s %s\n",COMMAND_RESPOND_OK,GREETING,VERSION); myfprintf(interface->fp,"%s %s %s\n",COMMAND_RESPOND_OK,GREETING,VERSION);
} }
...@@ -145,12 +161,23 @@ int interfaceReadInput(Interface * interface) { ...@@ -145,12 +161,23 @@ int interfaceReadInput(Interface * interface) {
interface->commandList = NULL; interface->commandList = NULL;
} }
else { else {
insertInListWithoutKey(interface->commandList,strdup(interface->buffer)); interface->commandListSize+=sizeof(ListNode);
interface->commandListSize+=strlen(interface->buffer)+1;
if(interface->commandListSize>interface_max_command_list_size) {
fprintf(stderr,"command list size (%lli) is larger than the max (%lli)\n",interface->commandListSize,interface_max_command_list_size);
closeInterface(interface);
}
else {
insertInListWithoutKey(interface->commandList,strdup(interface->buffer));
}
} }
} }
else { else {
if(strcmp(argArray[0],INTERFACE_LIST_MODE_BEGIN)==0) { if(strcmp(argArray[0],INTERFACE_LIST_MODE_BEGIN)==0) {
interface->commandList = makeList(free); interface->commandList = makeList(free);
interface->commandListSize =
sizeof(List);
ret = 1; ret = 1;
} }
else { else {
...@@ -177,13 +204,27 @@ int interfaceReadInput(Interface * interface) { ...@@ -177,13 +204,27 @@ int interfaceReadInput(Interface * interface) {
return 1; return 1;
} }
void addInterfacesToFdSet(fd_set * fds) { void addInterfacesReadyToReadAndListenSocketToFdSet(fd_set * fds) {
int i; int i;
FD_ZERO(fds); FD_ZERO(fds);
FD_SET(listenSocket,fds);
for(i=0;i<interface_max_connections;i++) { for(i=0;i<interface_max_connections;i++) {
if(interfaces[i].open && !interfaces[i].bufferList) { if(interfaces[i].open && !interfaces[i].expired && !interfaces[i].bufferList) {
FD_SET(interfaces[i].fd,fds);
}
}
}
void addInterfacesForBufferFlushToFdSet(fd_set * fds) {
int i;
FD_ZERO(fds);
FD_SET(listenSocket,fds);
for(i=0;i<interface_max_connections;i++) {
if(interfaces[i].open && !interfaces[i].expired && interfaces[i].bufferList) {
FD_SET(interfaces[i].fd,fds); FD_SET(interfaces[i].fd,fds);
} }
} }
...@@ -195,7 +236,7 @@ void closeNextErroredInterface() { ...@@ -195,7 +236,7 @@ void closeNextErroredInterface() {
int i; int i;
tv.tv_sec = 0; tv.tv_sec = 0;
tv.tv_usec = 1000; tv.tv_usec = 0;
for(i=0;i<interface_max_connections;i++) { for(i=0;i<interface_max_connections;i++) {
if(interfaces[i].open) { if(interfaces[i].open) {
...@@ -209,31 +250,41 @@ void closeNextErroredInterface() { ...@@ -209,31 +250,41 @@ void closeNextErroredInterface() {
} }
} }
int readInputFromInterfaces() { int doIOForInterfaces() {
fd_set fds; fd_set rfds;
fd_set wfds;
struct timeval tv; struct timeval tv;
int i; int i;
int selret; int selret;
tv.tv_sec = 0; tv.tv_sec = 1;
tv.tv_usec = 1000; tv.tv_usec = 0;
addInterfacesToFdSet(&fds); addInterfacesReadyToReadAndListenSocketToFdSet(&rfds);
addInterfacesForBufferFlushToFdSet(&wfds);
while((selret = select(FD_SETSIZE,&fds,NULL,NULL,&tv))) { while((selret = select(FD_SETSIZE,&rfds,&wfds,NULL,&tv))) {
if(FD_ISSET(listenSocket,&rfds)) getConnections(listenSocket);
if(selret<0) { if(selret<0) {
closeNextErroredInterface(); closeNextErroredInterface();
continue; continue;
} }
for(i=0;i<interface_max_connections;i++) { for(i=0;i<interface_max_connections;i++) {
if(interfaces[i].open && FD_ISSET(interfaces[i].fd,&fds)) { if(interfaces[i].open && FD_ISSET(interfaces[i].fd,&rfds)) {
if(COMMAND_RETURN_KILL==interfaceReadInput(&(interfaces[i]))) { if(COMMAND_RETURN_KILL==interfaceReadInput(&(interfaces[i]))) {
return COMMAND_RETURN_KILL; return COMMAND_RETURN_KILL;
} }
interfaces[i].lastTime = time(NULL); interfaces[i].lastTime = time(NULL);
} }
if(interfaces[i].open && FD_ISSET(interfaces[i].fd,&wfds)) {
flushInterfaceBuffer(&interfaces[i]);
interfaces[i].lastTime = time(NULL);
}
} }
addInterfacesToFdSet(&fds); tv.tv_sec = 0;
tv.tv_usec = 0;
addInterfacesReadyToReadAndListenSocketToFdSet(&rfds);
addInterfacesForBufferFlushToFdSet(&wfds);
} }
return 1; return 1;
...@@ -244,17 +295,32 @@ void initInterfaces() { ...@@ -244,17 +295,32 @@ void initInterfaces() {
char * test; char * test;
interface_timeout = strtol((getConf())[CONF_CONNECTION_TIMEOUT],&test,10); interface_timeout = strtol((getConf())[CONF_CONNECTION_TIMEOUT],&test,10);
if(*test!='\0') { if(*test!='\0' || interface_timeout<=0) {
fprintf(stderr,"connection timeout \"%s\" is not an integer\n",(getConf())[CONF_CONNECTION_TIMEOUT]); fprintf(stderr,"connection timeout \"%s\" is not a positive integer\n",(getConf())[CONF_CONNECTION_TIMEOUT]);
exit(-1); exit(-1);
} }
interface_max_connections = strtol((getConf())[CONF_MAX_CONNECTIONS],&test,10); interface_max_connections = strtol((getConf())[CONF_MAX_CONNECTIONS],&test,10);
if(*test!='\0') { if(*test!='\0' || interface_max_connections<=0) {
fprintf(stderr,"max connections \"%s\" is not an integer\n",(getConf())[CONF_MAX_CONNECTIONS]); fprintf(stderr,"max connections \"%s\" is not a positive integer\n",(getConf())[CONF_MAX_CONNECTIONS]);
exit(-1); exit(-1);
} }
interface_max_command_list_size = strtoll((getConf())[CONF_MAX_COMMAND_LIST_SIZE],&test,10);
if(*test!='\0' || interface_max_command_list_size<=0) {
fprintf(stderr,"max command list size \"%s\" is not a positive integer\n",(getConf())[CONF_MAX_COMMAND_LIST_SIZE]);
exit(-1);
}
interface_max_output_buffer_size = strtoll((getConf())[CONF_MAX_OUTPUT_BUFFER_SIZE],&test,10);
if(*test!='\0' || interface_max_output_buffer_size<=0) {
fprintf(stderr,"max output buffer size \"%s\" is not a positive integer\n",(getConf())[CONF_MAX_OUTPUT_BUFFER_SIZE]);
exit(-1);
}
interface_max_command_list_size*=1024;
interface_max_output_buffer_size*=1024;
interfaces = malloc(sizeof(Interface)*interface_max_connections); interfaces = malloc(sizeof(Interface)*interface_max_connections);
for(i=0;i<interface_max_connections;i++) { for(i=0;i<interface_max_connections;i++) {
...@@ -284,7 +350,7 @@ void closeOldInterfaces() { ...@@ -284,7 +350,7 @@ void closeOldInterfaces() {
int i; int i;
for(i=0;i<interface_max_connections;i++) { for(i=0;i<interface_max_connections;i++) {
if(interfaces[i].open && (time(NULL)-interfaces[i].lastTime>interface_timeout)) { if(interfaces[i].open && (interfaces[i].expired || (time(NULL)-interfaces[i].lastTime>interface_timeout))) {
closeInterface(&(interfaces[i])); closeInterface(&(interfaces[i]));
} }
} }
...@@ -309,27 +375,36 @@ void flushInterfaceBuffer(Interface * interface) { ...@@ -309,27 +375,36 @@ void flushInterfaceBuffer(Interface * interface) {
str = (char *)node->data; str = (char *)node->data;
if((ret = write(interface->fd,str,strlen(str)))<0) break; if((ret = write(interface->fd,str,strlen(str)))<0) break;
else if(ret<strlen(str)) { else if(ret<strlen(str)) {
interface->outputBufferSize-=ret;
str = strdup(&str[ret]); str = strdup(&str[ret]);
free(node->data); free(node->data);
node->data = str; node->data = str;
} }
else { else {
interface->outputBufferSize-= strlen(str)+1;
interface->outputBufferSize-= sizeof(ListNode);
deleteNodeFromList(interface->bufferList,node); deleteNodeFromList(interface->bufferList,node);
} }
interface->lastTime = time(NULL);
} }
if(!interface->bufferList->firstNode) { if(!interface->bufferList->firstNode) {
freeList(interface->bufferList); freeList(interface->bufferList);
interface->bufferList = NULL; interface->bufferList = NULL;
} }
else if(errno!=EAGAIN) closeInterface(interface); else if(errno!=EAGAIN && errno!=EINTR) {
/* cause interface to close */
free(interface->bufferList);
interface->bufferList = NULL;
interface->expired = 1;
}
} }
void flushAllInterfaceBuffers() { void flushAllInterfaceBuffers() {
int i; int i;
for(i=0;i<interface_max_connections;i++) { for(i=0;i<interface_max_connections;i++) {
if(interfaces[i].open && interfaces[i].bufferList) { if(interfaces[i].open && !interfaces[i].expired && interfaces[i].bufferList) {
flushInterfaceBuffer(&interfaces[i]); flushInterfaceBuffer(&interfaces[i]);
} }
} }
...@@ -345,23 +420,45 @@ void interfacePrintWithFD(int fd,char * buffer) { ...@@ -345,23 +420,45 @@ void interfacePrintWithFD(int fd,char * buffer) {
if(interfaces[i].fd==fd) break; if(interfaces[i].fd==fd) break;
} }
if(i==interface_max_connections) return; /* if fd isn't found or interfaces is going to be closed, do nothing */
if(i==interface_max_connections || interfaces[i].expired) return;
if(interfaces[i].bufferList) { if(interfaces[i].bufferList) {
insertInListWithoutKey(interfaces[i].bufferList,(void *)strdup(buffer)); interfaces[i].outputBufferSize+=sizeof(ListNode);
flushInterfaceBuffer(&interfaces[i]); interfaces[i].outputBufferSize+=strlen(buffer)+1;
if(interfaces[i].outputBufferSize>interface_max_output_buffer_size) {
fprintf(stderr,"output buffer size (%lli) is larger than the max (%lli)\n",interfaces[i].outputBufferSize,interface_max_output_buffer_size);
/* cause interface to close */
free(interfaces[i].bufferList);
interfaces[i].bufferList = NULL;
interfaces[i].expired = 1;
return;
}
else {
insertInListWithoutKey(interfaces[i].bufferList,(void *)strdup(buffer));
flushInterfaceBuffer(&interfaces[i]);
}
} }
else { else {
if((ret = write(fd,buffer,strlen(buffer)))<0) { if((ret = write(fd,buffer,strlen(buffer)))<0) {
if(errno==EAGAIN) { if(errno==EAGAIN || errno==EINTR) {
interfaces[i].bufferList = makeList(free); interfaces[i].bufferList = makeList(free);
insertInListWithoutKey(interfaces[i].bufferList,(void *)strdup(buffer)); insertInListWithoutKey(interfaces[i].bufferList,(void *)strdup(buffer));
} }
else closeInterface(&interfaces[i]); else {
interfaces[i].expired = 1;
return;
}
} }
else if(ret<strlen(buffer)) { else if(ret<strlen(buffer)) {
interfaces[i].bufferList = makeList(free); interfaces[i].bufferList = makeList(free);
insertInListWithoutKey(interfaces[i].bufferList,(void *)strdup(&buffer[ret])); insertInListWithoutKey(interfaces[i].bufferList,(void *)strdup(&buffer[ret]));
} }
/* if we needed to create buffer, initizliaze bufferSize info */
if(interfaces[i].bufferList) {
interfaces[i].outputBufferSize = sizeof(List);
interfaces[i].outputBufferSize+=sizeof(ListNode);
interfaces[i].outputBufferSize+=strlen((char *)interfaces[i].bufferList->firstNode->data)+1;
}
} }
} }
...@@ -31,6 +31,6 @@ void closeInterfaceWithFD(int fd); ...@@ -31,6 +31,6 @@ void closeInterfaceWithFD(int fd);
void flushAllInterfaceBuffers(); void flushAllInterfaceBuffers();
void interfacePrintWithFD(int fd, char * buffer); void interfacePrintWithFD(int fd, char * buffer);
int readInputFromInterfaces(); int doIOForInterfaces();
#endif #endif
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libid3tag - ID3 tag manipulation library libid3tag - ID3 tag manipulation library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: CHANGES,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: CHANGES,v 1.2 2003/07/05 05:18:51 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libid3tag - ID3 tag manipulation library libid3tag - ID3 tag manipulation library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: CREDITS,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: CREDITS,v 1.2 2003/07/05 05:18:51 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
## along with this program; if not, write to the Free Software ## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
## ##
## $Id: Makefile.am,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ ## $Id: Makefile.am,v 1.3 2003/07/05 06:12:40 shank Exp $
## ##
## Process this file with automake to produce Makefile.in ## Process this file with automake to produce Makefile.in
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libid3tag - ID3 tag manipulation library libid3tag - ID3 tag manipulation library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: README,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: README,v 1.2 2003/07/05 05:18:51 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libid3tag - ID3 tag manipulation library libid3tag - ID3 tag manipulation library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: TODO,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: TODO,v 1.2 2003/07/05 05:18:51 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: compat.gperf,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: compat.gperf,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: compat.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: compat.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_COMPAT_H # ifndef LIBID3TAG_COMPAT_H
......
...@@ -17,7 +17,7 @@ dnl You should have received a copy of the GNU General Public License ...@@ -17,7 +17,7 @@ dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dnl dnl
AC_REVISION([$Id: configure.ac,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $])dnl AC_REVISION([$Id: configure.ac,v 1.3 2003/07/05 05:39:48 shank Exp $])dnl
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: crc.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: crc.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: crc.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: crc.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_CRC_H # ifndef LIBID3TAG_CRC_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: debug.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: debug.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: debug.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: debug.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_DEBUG_H # ifndef LIBID3TAG_DEBUG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: field.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: field.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: field.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: field.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_FIELD_H # ifndef LIBID3TAG_FIELD_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: file.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: file.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: file.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: file.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_FILE_H # ifndef LIBID3TAG_FILE_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: frame.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: frame.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: frame.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: frame.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_FRAME_H # ifndef LIBID3TAG_FRAME_H
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: frametype.gperf,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: frametype.gperf,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: frametype.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: frametype.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_FRAMETYPE_H # ifndef LIBID3TAG_FRAMETYPE_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: genre.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: genre.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* Id: genre.dat.in,v 1.1.1.1 2003/07/15 15:51:33 shank Exp * Id: genre.dat.in,v 1.2 2003/07/05 05:18:51 shank Exp
*/ */
/* /*
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: genre.dat.in,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: genre.dat.in,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
/* /*
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# #
# $Id: genre.dat.sed,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ # $Id: genre.dat.sed,v 1.2 2003/07/05 05:18:51 shank Exp $
# #
1i\ 1i\
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: genre.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: genre.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_GENRE_H # ifndef LIBID3TAG_GENRE_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: global.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: global.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_GLOBAL_H # ifndef LIBID3TAG_GLOBAL_H
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
* If you would like to negotiate alternate licensing terms, you may do * If you would like to negotiate alternate licensing terms, you may do
* so by contacting: Underbit Technologies, Inc. <info@underbit.com> * so by contacting: Underbit Technologies, Inc. <info@underbit.com>
* *
* $Id: id3tag.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: id3tag.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_ID3TAG_H # ifndef LIBID3TAG_ID3TAG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: latin1.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: latin1.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: latin1.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: latin1.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_LATIN1_H # ifndef LIBID3TAG_LATIN1_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: parse.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: parse.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: parse.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: parse.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_PARSE_H # ifndef LIBID3TAG_PARSE_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: render.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: render.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: render.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: render.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_RENDER_H # ifndef LIBID3TAG_RENDER_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: tag.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: tag.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: tag.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: tag.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_TAG_H # ifndef LIBID3TAG_TAG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: ucs4.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: ucs4.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: ucs4.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: ucs4.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_UCS4_H # ifndef LIBID3TAG_UCS4_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: utf16.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: utf16.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: utf16.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: utf16.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_UTF16_H # ifndef LIBID3TAG_UTF16_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: utf8.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: utf8.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: utf8.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: utf8.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_UTF8_H # ifndef LIBID3TAG_UTF8_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: util.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: util.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: util.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: util.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_UTIL_H # ifndef LIBID3TAG_UTIL_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: version.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: version.c,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: version.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: version.h,v 1.2 2003/07/05 05:18:51 shank Exp $
*/ */
# ifndef LIBID3TAG_VERSION_H # ifndef LIBID3TAG_VERSION_H
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libmad - MPEG audio decoder library libmad - MPEG audio decoder library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: CHANGES,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: CHANGES,v 1.1 2003/07/05 06:20:49 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libmad - MPEG audio decoder library libmad - MPEG audio decoder library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: CREDITS,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: CREDITS,v 1.1 2003/07/05 06:20:50 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: D.dat,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: D.dat,v 1.2 2003/07/05 06:20:50 shank Exp $
*/ */
/* /*
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
## along with this program; if not, write to the Free Software ## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
## ##
## $Id: Makefile.am,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ ## $Id: Makefile.am,v 1.3 2003/07/05 06:20:50 shank Exp $
## ##
## Process this file with automake to produce Makefile.in ## Process this file with automake to produce Makefile.in
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libmad - MPEG audio decoder library libmad - MPEG audio decoder library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: README,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: README,v 1.1 2003/07/05 06:20:50 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
libmad - MPEG audio decoder library libmad - MPEG audio decoder library
Copyright (C) 2000-2003 Underbit Technologies, Inc. Copyright (C) 2000-2003 Underbit Technologies, Inc.
$Id: TODO,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ $Id: TODO,v 1.1 2003/07/05 06:20:50 shank Exp $
=============================================================================== ===============================================================================
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: bit.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: bit.c,v 1.2 2003/07/05 06:20:50 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: bit.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: bit.h,v 1.2 2003/07/05 06:20:50 shank Exp $
*/ */
# ifndef LIBMAD_BIT_H # ifndef LIBMAD_BIT_H
......
...@@ -17,7 +17,7 @@ dnl You should have received a copy of the GNU General Public License ...@@ -17,7 +17,7 @@ dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dnl dnl
AC_REVISION([$Id: configure.ac,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $])dnl AC_REVISION([$Id: configure.ac,v 1.1 2003/07/05 06:20:51 shank Exp $])dnl
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: decoder.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: decoder.c,v 1.2 2003/07/05 06:20:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: decoder.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: decoder.h,v 1.2 2003/07/05 06:20:51 shank Exp $
*/ */
# ifndef LIBMAD_DECODER_H # ifndef LIBMAD_DECODER_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: fixed.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: fixed.c,v 1.2 2003/07/05 06:20:51 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: fixed.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: fixed.h,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifndef LIBMAD_FIXED_H # ifndef LIBMAD_FIXED_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: frame.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: frame.c,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: frame.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: frame.h,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifndef LIBMAD_FRAME_H # ifndef LIBMAD_FRAME_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: global.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: global.h,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifndef LIBMAD_GLOBAL_H # ifndef LIBMAD_GLOBAL_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: huffman.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: huffman.c,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: huffman.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: huffman.h,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifndef LIBMAD_HUFFMAN_H # ifndef LIBMAD_HUFFMAN_H
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* *
***************************************************************************** *****************************************************************************
* *
* $Id: imdct_l_arm.S,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: imdct_l_arm.S,v 1.2 2003/07/05 06:20:52 shank Exp $
* *
* 2001/03/24: Andre McCurdy <armccurdy@yahoo.co.uk> * 2001/03/24: Andre McCurdy <armccurdy@yahoo.co.uk>
* - Corrected PIC unsafe loading of address of 'imdct36_long_karray' * - Corrected PIC unsafe loading of address of 'imdct36_long_karray'
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: imdct_s.dat,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: imdct_s.dat,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
/* 0 */ { MAD_F(0x09bd7ca0) /* 0.608761429 */, /* 0 */ { MAD_F(0x09bd7ca0) /* 0.608761429 */,
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: layer12.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: layer12.c,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: layer12.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: layer12.h,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifndef LIBMAD_LAYER12_H # ifndef LIBMAD_LAYER12_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: layer3.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: layer3.c,v 1.2 2003/07/05 06:20:52 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: layer3.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: layer3.h,v 1.2 2003/07/05 06:20:53 shank Exp $
*/ */
# ifndef LIBMAD_LAYER3_H # ifndef LIBMAD_LAYER3_H
......
...@@ -33,7 +33,7 @@ extern "C" { ...@@ -33,7 +33,7 @@ extern "C" {
# define SIZEOF_LONG_LONG 8 # define SIZEOF_LONG_LONG 8
/* Id: version.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: version.h,v 1.2 2003/07/05 06:20:55 shank Exp */
# ifndef LIBMAD_VERSION_H # ifndef LIBMAD_VERSION_H
# define LIBMAD_VERSION_H # define LIBMAD_VERSION_H
...@@ -62,7 +62,7 @@ extern char const mad_build[]; ...@@ -62,7 +62,7 @@ extern char const mad_build[];
# endif # endif
/* Id: fixed.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: fixed.h,v 1.2 2003/07/05 06:20:52 shank Exp */
# ifndef LIBMAD_FIXED_H # ifndef LIBMAD_FIXED_H
# define LIBMAD_FIXED_H # define LIBMAD_FIXED_H
...@@ -528,7 +528,7 @@ mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t); ...@@ -528,7 +528,7 @@ mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t);
# endif # endif
/* Id: bit.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: bit.h,v 1.2 2003/07/05 06:20:50 shank Exp */
# ifndef LIBMAD_BIT_H # ifndef LIBMAD_BIT_H
# define LIBMAD_BIT_H # define LIBMAD_BIT_H
...@@ -557,7 +557,7 @@ unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short); ...@@ -557,7 +557,7 @@ unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
# endif # endif
/* Id: timer.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: timer.h,v 1.2 2003/07/05 06:20:55 shank Exp */
# ifndef LIBMAD_TIMER_H # ifndef LIBMAD_TIMER_H
# define LIBMAD_TIMER_H # define LIBMAD_TIMER_H
...@@ -639,7 +639,7 @@ void mad_timer_string(mad_timer_t, char *, char const *, ...@@ -639,7 +639,7 @@ void mad_timer_string(mad_timer_t, char *, char const *,
# endif # endif
/* Id: stream.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: stream.h,v 1.2 2003/07/05 06:20:55 shank Exp */
# ifndef LIBMAD_STREAM_H # ifndef LIBMAD_STREAM_H
# define LIBMAD_STREAM_H # define LIBMAD_STREAM_H
...@@ -727,7 +727,7 @@ char const *mad_stream_errorstr(struct mad_stream const *); ...@@ -727,7 +727,7 @@ char const *mad_stream_errorstr(struct mad_stream const *);
# endif # endif
/* Id: frame.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: frame.h,v 1.2 2003/07/05 06:20:52 shank Exp */
# ifndef LIBMAD_FRAME_H # ifndef LIBMAD_FRAME_H
# define LIBMAD_FRAME_H # define LIBMAD_FRAME_H
...@@ -824,7 +824,7 @@ void mad_frame_mute(struct mad_frame *); ...@@ -824,7 +824,7 @@ void mad_frame_mute(struct mad_frame *);
# endif # endif
/* Id: synth.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: synth.h,v 1.2 2003/07/05 06:20:55 shank Exp */
# ifndef LIBMAD_SYNTH_H # ifndef LIBMAD_SYNTH_H
# define LIBMAD_SYNTH_H # define LIBMAD_SYNTH_H
...@@ -873,7 +873,7 @@ void mad_synth_frame(struct mad_synth *, struct mad_frame const *); ...@@ -873,7 +873,7 @@ void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
# endif # endif
/* Id: decoder.h,v 1.1.1.1 2003/07/15 15:51:33 shank Exp */ /* Id: decoder.h,v 1.2 2003/07/05 06:20:51 shank Exp */
# ifndef LIBMAD_DECODER_H # ifndef LIBMAD_DECODER_H
# define LIBMAD_DECODER_H # define LIBMAD_DECODER_H
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# #
# $Id: mad.h.sed,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ # $Id: mad.h.sed,v 1.2 2003/07/05 06:20:53 shank Exp $
# #
/^\/\*$/{ /^\/\*$/{
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: minimad.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: minimad.c,v 1.1 2003/07/05 06:20:53 shank Exp $
*/ */
# include <stdio.h> # include <stdio.h>
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: qc_table.dat,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: qc_table.dat,v 1.2 2003/07/05 06:20:53 shank Exp $
*/ */
/* /*
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: rq_table.dat,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: rq_table.dat,v 1.2 2003/07/05 06:20:53 shank Exp $
*/ */
/* /*
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: sf_table.dat,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: sf_table.dat,v 1.2 2003/07/05 06:20:55 shank Exp $
*/ */
/* /*
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* $Id: stream.c,v 1.1.1.1 2003/07/15 15:51:33 shank Exp $ * $Id: stream.c,v 1.2 2003/07/05 06:20:55 shank Exp $
*/ */
# ifdef HAVE_CONFIG_H # ifdef HAVE_CONFIG_H
......
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment