ref: 2d33a25b2d2eb0c086b7dd668b5321e5de0699f3
parent: 8480a8f8767bdd1d059d89acec5471a3c9e8e218
author: rrt <rrt>
date: Wed Dec 20 07:45:17 EST 2006
Add support for using in-tree Lua. Remove redundant "if (p) free(p)" idiom: ANSI free doesn't mind being given NULL.
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(SoX, 12.18.3, [email protected])
+AC_INIT(SoX, 12.18.3, [email protected])
AM_INIT_AUTOMAKE
dnl create a config.h file (Automake will add -DHAVE_CONFIG_H)
@@ -143,12 +143,6 @@
dnl LUA, LUA_INCLUDES, LUA_LIBS
-with_lua=yes
-
-AC_SUBST(LUA)
-AC_SUBST(LUA_INCLUDES)
-AC_SUBST(LUA_LIBS)
-
dnl Arguments
AC_ARG_WITH([lua-prefix],
[AS_HELP_STRING([--with-lua-prefix=DIR],
@@ -164,6 +158,22 @@
[Lua binary and library files are suffixed with
ARG])])
+dnl Default to built-in Lua; if external Lua supplied, test it
+if test "x$with_lua_prefix" = x && test "x$with_lua_includes" = x && \
+ test "x$with_lua_libraries" = x && test "x$with_lua_suffix" = x; then
+ AC_MSG_WARN("Using built-in Lua")
+ with_lua_prefix=./lua
+ want_internal_lua=yes
+ LUA="$with_lua_prefix/src/lua"
+ LUA_INCLUDES="-I$with_lua_prefix/src"
+ LUA_LIBS="-L$with_lua_prefix/src -llua"
+else
+ want_internal_lua=no
+
+AC_SUBST(LUA)
+AC_SUBST(LUA_INCLUDES)
+AC_SUBST(LUA_LIBS)
+
dnl LUA
if test "x$with_lua_prefix" = x; then
lua_search_path="$PATH"
@@ -172,19 +182,19 @@
fi
if test "x$LUA" = x; then
AC_PATH_PROG([LUA], [lua$with_lua_suffix], [], [$lua_search_path])
- test "x$LUA" = x && AC_MSG_ERROR([*** Can't build ion without lua])
+ test "x$LUA" = x && AC_MSG_FAILURE([*** Can't build SoX without Lua])
fi
dnl lua_version
-AC_MSG_CHECKING([for lua version >= 5.1])
+AC_MSG_CHECKING([for Lua version == 5.1])
lua_version=$($LUA -v 2>&1 | head -n 1 | cut -d' ' -f2)
case $lua_version in
-0.* | 1.* | 2.* | 3.* | 4.* | 5.0)
- AC_MSG_RESULT([no (found $lua_version)])
- with_lua=no
+5.1*)
+ AC_MSG_RESULT([yes (found $lua_version)])
;;
*)
- AC_MSG_RESULT([yes (found $lua_version)])
+ AC_MSG_RESULT([no (found $lua_version)])
+ AC_MSG_FAILURE([*** Can't build SoX without Lua])
;;
esac
dnl
@@ -197,7 +207,7 @@
fi
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $LUA_INCLUDES"
-AC_CHECK_HEADERS([lua.h lualib.h], [], [with_lua=no], [])
+AC_CHECK_HEADERS([lua.h lualib.h], [], [AC_MSG_FAILURE([*** Can't build SoX without Lua])], [])
CFLAGS="$save_CFLAGS"
dnl LUA_LIBS
@@ -211,26 +221,23 @@
AC_CHECK_LIB([lua$with_lua_suffix],
[lua_call],
[LUA_LIBS="$LUA_LIBS -llua$with_lua_suffix $lua_extra_libs"],
- [with_lua=no],
+ [AC_MSG_FAILURE([*** Can't build SoX without Lua])],
[$LUA_LIBS $lua_extra_libs])
dnl liblua_version
-AC_MSG_CHECKING([for liblua version >= 5.1])
+AC_MSG_CHECKING([for liblua version == 5.1])
save_CFLAGS="$CFLAGS"
save_LIBS="$LIBS"
CFLAGS="$CFLAGS $LUA_INCLUDES"
LIBS="$LIBS $LUA_LIBS"
AC_RUN_IFELSE([AC_LANG_SOURCE([[
-
#include <lua.h>
#include <stdlib.h>
-#include <string.h>
#include <stdio.h>
-
int main()
{
printf("(found %s, %d)... ", LUA_VERSION, LUA_VERSION_NUM);
- if(LUA_VERSION_NUM >= 501)
+ if (LUA_VERSION_NUM == 501)
exit(EXIT_SUCCESS);
exit(EXIT_FAILURE);
}
@@ -241,14 +248,16 @@
CFLAGS="$save_CFLAGS"
LIBS="$save_LIBS"
-if test "$with_lua" = yes; then
- AC_DEFINE(HAVE_LUA, 1, [Define to 1 if you have Lua.])
-fi
+fi dnl Check external Lua
+dnl Build internal Lua if needed
+AM_CONDITIONAL([INTERNAL_LUA], [test "$want_internal_lua" = yes])
+
dnl Generate output files.
AX_CREATE_STDINT_H(src/ststdint.h)
-AC_SUBST(with_alsa with_oss) dnl For play.in
+AC_SUBST(with_alsa) dnl for play.in
+AC_SUBST(with_oss) dnl for play.in
AC_CONFIG_FILES(Makefile src/Makefile src/libgsm/Makefile src/libst-config src/play)
AC_OUTPUT
@@ -262,7 +271,6 @@
echo "MAD MP3 Decoder................... $with_mad"
echo "LAME MP3 Encoder.................. $with_lame"
echo "Secret Rabbit Code resampling..... $with_samplerate"
-echo "Lua scripting..................... $with_lua"
echo
echo "Configure finished. Do 'make; make install' to compile and install SoX."
echo
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -27,10 +27,10 @@
st_i.h stio.c util.c xmalloc.c xmalloc.h getopt.c getopt1.c getopt.h
AM_CFLAGS = $(LUA_INCLUDES)
-AM_LDFLAGS = $(LUA_LIBS) @SAMPLERATE_LIBS@
+AM_LDFLAGS = @SAMPLERATE_LIBS@
sox_SOURCES = sox.c
-sox_LDADD = libst.a libgsm/libgsm.a
+sox_LDADD = libst.a libgsm/libgsm.a $(LUA_LIBS)
all: sox soxmix play rec
--- a/src/fade.c
+++ b/src/fade.c
@@ -326,12 +326,9 @@
{
fade_t fade = (fade_t) effp->priv;
- if (fade->in_stop_str)
- free(fade->in_stop_str);
- if (fade->out_start_str)
- free(fade->out_start_str);
- if (fade->out_stop_str)
- free(fade->out_stop_str);
+ free(fade->in_stop_str);
+ free(fade->out_start_str);
+ free(fade->out_stop_str);
return (ST_SUCCESS);
}
@@ -342,41 +339,37 @@
{
double retval = 0.0, findex = 0.0;
- findex = 1.0 * index / range;
+ /* TODO: does it really have to be contrained to [0.0, 1.0]? */
+ findex = max(0.0, min(1.0, 1.0 * index / range));
- /* todo: are these really needed */
- findex = (findex < 0 ? 0.0 : findex);
- findex = (findex > 1.0 ? 1.0 : findex);
+ switch (type) {
+ case FADE_TRI : /* triangle */
+ retval = findex;
+ break;
- switch (type)
- {
- case FADE_TRI : /* triangle */
- retval = findex;
- break;
+ case FADE_QUARTER : /* quarter of sinewave */
+ retval = sin(findex * M_PI / 2);
+ break;
- case FADE_QUARTER : /* quarter of sinewave */
- retval = sin(findex * M_PI / 2);
- break;
+ case FADE_HALF : /* half of sinewave... eh cosine wave */
+ retval = (1 - cos(findex * M_PI )) / 2 ;
+ break;
- case FADE_HALF : /* half of sinewave... eh cosine wave */
- retval = (1 - cos(findex * M_PI )) / 2 ;
- break;
+ case FADE_LOG : /* logarithmic */
+ /* 5 means 100 db attenuation. */
+ /* TODO: should this be adopted with bit depth */
+ retval = pow(0.1, (1 - findex) * 5);
+ break;
- case FADE_LOG : /* logaritmic */
- /* 5 means 100 db attenuation. */
- /* todo: should this be adopted with bit depth */
- retval = pow(0.1, (1 - findex) * 5);
- break;
+ case FADE_PAR : /* inverted parabola */
+ retval = (1 - (1 - findex) * (1 - findex));
+ break;
- case FADE_PAR : /* inverted parabola */
- retval = (1 - (1 - findex) * (1 - findex));
- break;
-
- /* todo: more fade curves? */
- default : /* Error indicating wrong fade curve */
- retval = -1.0;
- break;
- } /* endswitch */
+ /* TODO: more fade curves? */
+ default : /* Error indicating wrong fade curve */
+ retval = -1.0;
+ break;
+ }
return retval;
}
--- a/src/flanger.c
+++ b/src/flanger.c
@@ -284,11 +284,9 @@
int c, channels = effp->ininfo.channels;
for (c = 0; c < channels; ++c)
- if (f->delay_bufs[c] != NULL)
- free(f->delay_bufs[c]);
+ free(f->delay_bufs[c]);
- if (f->lfo != NULL)
- free(f->lfo);
+ free(f->lfo);
memset(f, 0, sizeof(*f));
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -107,9 +107,7 @@
st_highp_effect_fn,
st_lowpass_effect_fn,
st_lowp_effect_fn,
-#ifdef HAVE_LUA
st_lua_effect_fn,
-#endif
st_mask_effect_fn,
st_mcompand_effect_fn,
st_noiseprof_effect_fn,
--- a/src/lintlib.c
+++ b/src/lintlib.c
@@ -20,8 +20,6 @@
#include "st_i.h"
-#ifdef HAVE_LUA_H
-
#include <lua.h>
#include <lauxlib.h>
#include <luaconf.h>
@@ -165,5 +163,3 @@
luaL_register(L, STRING(LIBNAME), funcs);
return 1;
}
-
-#endif
--- a/src/lua.c
+++ b/src/lua.c
@@ -32,8 +32,6 @@
#include "st_i.h"
-#ifdef HAVE_LUA
-
#include <assert.h>
#include <string.h>
#include <lua.h>
@@ -280,5 +278,3 @@
{
return &st_lua_effect;
}
-
-#endif
--- a/src/lua/Makefile
+++ b/src/lua/Makefile
@@ -5,7 +5,7 @@
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
# Your platform. See PLATS for possible values.
-PLAT= none
+PLAT= generic
# Where to install. The installation starts in the src directory, so take care
# if INSTALL_TOP is not an absolute path. (Man pages are installed from the
--- a/src/lua/src/Makefile
+++ b/src/lua/src/Makefile
@@ -5,7 +5,7 @@
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
# Your platform. See PLATS for possible values.
-PLAT= none
+PLAT= generic
CC= gcc
CFLAGS= -O2 -Wall $(MYCFLAGS)
--- a/src/mcompand.c
+++ b/src/mcompand.c
@@ -647,28 +647,21 @@
comp_band_t l;
int band;
- if (c->band_buf1) {
- free(c->band_buf1);
- c->band_buf1 = 0;
- }
- if (c->band_buf2) {
- free(c->band_buf2);
- c->band_buf2 = 0;
- }
- if (c->band_buf3) {
- free(c->band_buf3);
- c->band_buf3 = 0;
- }
+ free(c->band_buf1);
+ c->band_buf1 = NULL;
+ free(c->band_buf2);
+ c->band_buf2 = NULL;
+ free(c->band_buf3);
+ c->band_buf3 = NULL;
- for (band=0;band<c->nBands;++band) {
+ for (band = 0; band < c->nBands; band++) {
l = &c->bands[band];
- free((char *) l->transferOuts);
- free((char *) l->transferIns);
- free((char *) l->decayRate);
- free((char *) l->attackRate);
- if (l->delay_buf)
- free((char *) l->delay_buf);
- free((char *) l->volume);
+ free(l->transferOuts);
+ free(l->transferIns);
+ free(l->decayRate);
+ free(l->attackRate);
+ free(l->delay_buf);
+ free(l->volume);
if (l->topfreq != 0) {
free(l->filter.xy_low);
free(l->filter.xy_high);
@@ -677,7 +670,7 @@
free(c->bands);
c->bands = 0;
- return (ST_SUCCESS);
+ return ST_SUCCESS;
}
static st_effect_t st_mcompand_effect = {
--- a/src/noiseprof.c
+++ b/src/noiseprof.c
@@ -222,8 +222,3 @@
{
return &st_noiseprof_effect;
}
-
-/* For Emacs:
- Local Variables:
- c-basic-offset: 4
-*/
--- a/src/noisered.c
+++ b/src/noisered.c
@@ -313,12 +313,8 @@
for (i = 0; i < effp->ininfo.channels; i ++) {
chandata_t* chan = &(data->chandata[i]);
- if (chan->lastwindow != NULL) {
- free(chan->lastwindow);
- }
- if (chan->window != NULL) {
- free(chan->window);
- }
+ free(chan->lastwindow);
+ free(chan->window);
free(chan->smoothing);
free(chan->noisegate);
}
@@ -343,8 +339,3 @@
{
return &st_noisered_effect;
}
-
-/* For Emacs:
- Local Variables:
- c-basic-offset: 4
-*/
--- a/src/phaser.c
+++ b/src/phaser.c
@@ -242,7 +242,7 @@
done++;
phaser->fade_out--;
}
- /* samples playd, it remains */
+ /* samples played, it remains */
*osamp = done;
if (phaser->fade_out == 0)
return ST_EOF;
@@ -257,10 +257,8 @@
{
phaser_t phaser = (phaser_t) effp->priv;
- free((char *) phaser->phaserbuf);
- phaser->phaserbuf = (double *) -1; /* guaranteed core dump */
- free((char *) phaser->lookup_tab);
- phaser->lookup_tab = (int *) -1; /* guaranteed core dump */
+ free(phaser->phaserbuf);
+ free(phaser->lookup_tab);
return (ST_SUCCESS);
}
--- a/src/polyphas.c
+++ b/src/polyphas.c
@@ -635,17 +635,16 @@
*/
static int st_poly_stop(eff_t effp)
{
- poly_t rate = (poly_t) effp->priv;
- polystage *s;
+ poly_t rate = (poly_t)effp->priv;
st_size_t k;
- for(k = 0; k <= rate->total; k++) {
- s = rate->stage[k];
- free((void *) s->window);
- if (s->filt_array) free((void *) s->filt_array);
- free((void *) s);
+ for (k = 0; k <= rate->total; k++) {
+ free(rate->stage[k]->window);
+ free(rate->stage[k]->filt_array);
+ free(rate->stage[k]);
}
- return (ST_SUCCESS);
+
+ return ST_SUCCESS;
}
static st_effect_t st_polyphase_effect = {
--- a/src/silence.c
+++ b/src/silence.c
@@ -654,12 +654,9 @@
{
silence_t silence = (silence_t) effp->priv;
- if (silence->window)
- free(silence->window);
- if (silence->start_holdoff)
- free(silence->start_holdoff);
- if (silence->stop_holdoff)
- free(silence->stop_holdoff);
+ free(silence->window);
+ free(silence->start_holdoff);
+ free(silence->stop_holdoff);
return(ST_SUCCESS);
}
--- a/src/st_i.h
+++ b/src/st_i.h
@@ -1,5 +1,3 @@
-#ifndef ST_I_H
-#define ST_I_H
/*
* Sound Tools Internal - October 11, 2001
*
@@ -12,6 +10,8 @@
* Chris Bagwell And Sundry Contributors are not responsible for
* the consequences of using this software.
*/
+#ifndef ST_I_H
+#define ST_I_H
#include "stconfig.h"
#include "st.h"
@@ -286,9 +286,7 @@
extern const st_effect_t *st_highp_effect_fn(void);
extern const st_effect_t *st_lowpass_effect_fn(void);
extern const st_effect_t *st_lowp_effect_fn(void);
-#ifdef HAVE_LUA
extern const st_effect_t *st_lua_effect_fn(void);
-#endif
extern const st_effect_t *st_mask_effect_fn(void);
extern const st_effect_t *st_mcompand_effect_fn(void);
extern const st_effect_t *st_noiseprof_effect_fn(void);
@@ -324,11 +322,9 @@
int st_resample_drain(eff_t effp, st_sample_t *obuf, st_size_t *osamp);
int st_resample_stop(eff_t effp);
-#ifdef HAVE_LUA
#include <lua.h>
/* Needed in lua.c */
LUALIB_API int luaopen_int (lua_State *L);
void createmeta(lua_State *L, const char *name);
-#endif
#endif
--- a/src/stio.c
+++ b/src/stio.c
@@ -152,10 +152,8 @@
input_error:
- if (ft->filename)
- free(ft->filename);
- if (ft->filetype)
- free(ft->filetype);
+ free(ft->filename);
+ free(ft->filetype);
free(ft);
return NULL;
}
@@ -280,10 +278,8 @@
output_error:
- if (ft->filename)
- free(ft->filename);
- if (ft->filetype)
- free(ft->filetype);
+ free(ft->filename);
+ free(ft->filetype);
free(ft);
return NULL;
}
@@ -304,6 +300,7 @@
return (*ft->h->write)(ft, buf, len);
}
+/* N.B. The file (if any) may already have been deleted. */
int st_close(ft_t ft)
{
int rc;
@@ -315,14 +312,11 @@
if (!(ft->h->flags & ST_FILE_NOSTDIO))
fclose(ft->fp);
- if (ft->filename)
- free(ft->filename);
- if (ft->filetype)
- free(ft->filetype);
+ free(ft->filename);
+ free(ft->filetype);
/* Currently, since startread() mallocs comments, stopread
- * is expected to also free it.
- */
- if (ft->mode == 'w' && ft->comment)
+ * is expected to also free it. */
+ if (ft->mode == 'w')
free(ft->comment);
return rc;
--- a/src/trim.c
+++ b/src/trim.c
@@ -189,10 +189,8 @@
{
trim_t trim = (trim_t) effp->priv;
- if (trim->start_str)
- free(trim->start_str);
- if (trim->length_str)
- free(trim->length_str);
+ free(trim->start_str);
+ free(trim->length_str);
return (ST_SUCCESS);
}
--- a/src/wav.c
+++ b/src/wav.c
@@ -1116,16 +1116,12 @@
ft->st_errno = ST_SUCCESS;
- if (wav->packet) free(wav->packet);
- if (wav->samples) free(wav->samples);
- if (wav->iCoefs) free(wav->iCoefs);
+ free(wav->packet);
+ free(wav->samples);
+ free(wav->iCoefs);
+ free(ft->comment);
+ ft->comment = NULL;
- if (ft->comment)
- {
- free(ft->comment);
- ft->comment = 0;
- }
-
switch (ft->info.encoding)
{
case ST_ENCODING_GSM:
@@ -1614,17 +1610,15 @@
wavgsmstopwrite(ft);
break;
}
- if (wav->packet) free(wav->packet);
- if (wav->samples) free(wav->samples);
- if (wav->iCoefs) free(wav->iCoefs);
+ free(wav->packet);
+ free(wav->samples);
+ free(wav->iCoefs);
/* Flush any remaining data */
if (wav->formatTag != WAVE_FORMAT_IMA_ADPCM &&
wav->formatTag != WAVE_FORMAT_ADPCM &&
wav->formatTag != WAVE_FORMAT_GSM610)
- {
st_rawstopwrite(ft);
- }
/* All samples are already written out. */
/* If file header needs fixing up, for example it needs the */
--- a/src/xa.c
+++ b/src/xa.c
@@ -182,23 +182,10 @@
xa->bufPos = xa->blockSize;
/* Allocate memory for the block buffer */
- xa->buf = (unsigned char *) xcalloc(1, xa->blockSize);
- if (xa->buf == NULL) {
- st_fail_errno(ft, ST_ENOMEM, "Unable to allocate block buffer");
- return ST_EOF;
- }
+ xa->buf = (unsigned char *)xcalloc(1, xa->blockSize);
/* Allocate memory for the state */
- xa->state = (xa_state_t *) xcalloc(sizeof(xa_state_t), ft->info.channels);
- if (xa->state == NULL) {
- /* Free xa->buf */
- free(xa->buf);
- xa->buf = NULL;
-
- /* Return error */
- st_fail_errno(ft, ST_ENOMEM, "Unable to allocate state variables");
- return ST_EOF;
- }
+ xa->state = (xa_state_t *)xcalloc(sizeof(xa_state_t), ft->info.channels);
/* Final initialization */
xa->bytesDecoded = 0;
@@ -292,14 +279,10 @@
ft->st_errno = ST_SUCCESS;
/* Free memory */
- if (xa->buf != NULL) {
- free(xa->buf);
- xa->buf = NULL;
- }
- if (xa->state != NULL) {
- free(xa->state);
- xa->state = NULL;
- }
+ free(xa->buf);
+ xa->buf = NULL;
+ free(xa->state);
+ xa->state = NULL;
return ST_SUCCESS;
}
--- a/src/xmalloc.c
+++ b/src/xmalloc.c
@@ -45,7 +45,7 @@
}
/*
- * Perform a calloc, and abort if not possible.
+ * Perform a calloc; abort if not possible.
*/
void *xcalloc(size_t nmemb, size_t size)
{