mirror of
https://gitlab.xiph.org/xiph/ezstream.git
synced 2024-09-15 04:08:07 -04:00
Prefer SIGSEGV over SIGABRT in case of explicit internal API abuse
While here, declare some module-internal functions static.
This commit is contained in:
parent
41058dac79
commit
c6747ef998
@ -133,11 +133,6 @@ urlParse(const char *url, char **hostname, unsigned short *port,
|
||||
size_t hostsiz, mountsiz;
|
||||
const char *errstr;
|
||||
|
||||
if (hostname == NULL || port == NULL || mountname == NULL) {
|
||||
log_alert("urlParse: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (strncmp(url, "http://", strlen("http://")) != 0) {
|
||||
log_error("invalid <url>: not an HTTP address");
|
||||
return (0);
|
||||
@ -385,11 +380,6 @@ getMetadataString(const char *format, metadata_t *mdata)
|
||||
{
|
||||
char *tmp, *str;
|
||||
|
||||
if (mdata == NULL) {
|
||||
log_alert("getMetadataString: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (format == NULL)
|
||||
return (NULL);
|
||||
|
||||
@ -457,11 +447,6 @@ setMetadata(shout_t *shout, metadata_t *mdata, char **mdata_copy)
|
||||
const char *artist, *title;
|
||||
int ret = SHOUTERR_SUCCESS;
|
||||
|
||||
if (shout == NULL) {
|
||||
log_alert("setMetadata: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (cfg_no_metadata_updates())
|
||||
return (SHOUTERR_SUCCESS);
|
||||
|
||||
@ -727,11 +712,6 @@ sendStream(shout_t *shout, FILE *filepstream, const char *fileName,
|
||||
struct timeval timeStamp, *startTime = tv;
|
||||
struct timeval callTime, currentTime;
|
||||
|
||||
if (startTime == NULL) {
|
||||
log_alert("sendStream: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
ez_gettimeofday((void *)&callTime);
|
||||
|
||||
timeStamp.tv_sec = startTime->tv_sec;
|
||||
|
131
src/metadata.c
131
src/metadata.c
@ -30,6 +30,8 @@
|
||||
#endif /* HAVE_VORBISFILE */
|
||||
#include <shout/shout.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "log.h"
|
||||
#include "metadata.h"
|
||||
#include "util.h"
|
||||
@ -62,16 +64,16 @@ struct ID3Tag {
|
||||
char genre;
|
||||
};
|
||||
|
||||
metadata_t * metadata_create(const char *);
|
||||
void metadata_use_taglib(metadata_t *, FILE **);
|
||||
void metadata_use_self(metadata_t *, FILE **);
|
||||
void metadata_clean_md(metadata_t *);
|
||||
void metadata_get_extension(char *, size_t, const char *);
|
||||
char * metadata_get_name(const char *);
|
||||
void metadata_process_md(metadata_t *);
|
||||
void metadata_normalize_string(char **);
|
||||
static metadata_t * metadata_create(const char *);
|
||||
static void metadata_use_taglib(metadata_t *, FILE **);
|
||||
static void metadata_use_self(metadata_t *, FILE **);
|
||||
static void metadata_clean_md(metadata_t *);
|
||||
static void metadata_get_extension(char *, size_t, const char *);
|
||||
static char * metadata_get_name(const char *);
|
||||
static void metadata_process_md(metadata_t *);
|
||||
static void metadata_normalize_string(char **);
|
||||
|
||||
metadata_t *
|
||||
static metadata_t *
|
||||
metadata_create(const char *filename)
|
||||
{
|
||||
metadata_t *md;
|
||||
@ -83,7 +85,7 @@ metadata_create(const char *filename)
|
||||
return (md);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
metadata_use_taglib(metadata_t *md, FILE **filep)
|
||||
#ifdef HAVE_TAGLIB
|
||||
{
|
||||
@ -92,11 +94,6 @@ metadata_use_taglib(metadata_t *md, FILE **filep)
|
||||
const TagLib_AudioProperties *ta;
|
||||
char *str;
|
||||
|
||||
if (md == NULL || md->filename == NULL) {
|
||||
log_alert("metadata_use_taglib: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (filep != NULL)
|
||||
fclose(*filep);
|
||||
|
||||
@ -149,7 +146,7 @@ metadata_use_taglib(metadata_t *md, FILE **filep)
|
||||
}
|
||||
#endif /* HAVE_TAGLIB */
|
||||
|
||||
void
|
||||
static void
|
||||
metadata_use_self(metadata_t *md, FILE **filep)
|
||||
#ifdef HAVE_TAGLIB
|
||||
{
|
||||
@ -164,12 +161,6 @@ metadata_use_self(metadata_t *md, FILE **filep)
|
||||
char extension[25];
|
||||
struct ID3Tag id3tag;
|
||||
|
||||
if (md == NULL || filep == NULL || *filep == NULL ||
|
||||
md->filename == NULL) {
|
||||
log_alert("metadata_use_self: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
metadata_clean_md(md);
|
||||
metadata_get_extension(extension, sizeof(extension), md->filename);
|
||||
|
||||
@ -244,14 +235,9 @@ metadata_use_self(metadata_t *md, FILE **filep)
|
||||
}
|
||||
#endif /* HAVE_TAGLIB */
|
||||
|
||||
void
|
||||
static void
|
||||
metadata_clean_md(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_clean_md: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->string != NULL) {
|
||||
xfree(md->string);
|
||||
md->string = NULL;
|
||||
@ -266,16 +252,11 @@ metadata_clean_md(metadata_t *md)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
metadata_get_extension(char *buf, size_t siz, const char *filename)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if (buf == NULL || siz == 0 || filename == NULL) {
|
||||
log_alert("metadata_get_extension: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
if ((p = strrchr(filename, '.')) != NULL)
|
||||
strlcpy(buf, p, siz);
|
||||
else
|
||||
@ -284,17 +265,12 @@ metadata_get_extension(char *buf, size_t siz, const char *filename)
|
||||
*p = tolower((int)*p);
|
||||
}
|
||||
|
||||
char *
|
||||
static char *
|
||||
metadata_get_name(const char *file)
|
||||
{
|
||||
char *filename = xstrdup(file);
|
||||
char *p1, *p2, *name;
|
||||
|
||||
if (file == NULL) {
|
||||
log_alert("metadata_get_name: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
if ((p1 = basename(filename)) == NULL) {
|
||||
log_alert("basename: unexpected failure with input: %s",
|
||||
filename);
|
||||
@ -313,14 +289,9 @@ metadata_get_name(const char *file)
|
||||
return (name);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
metadata_process_md(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_process_md: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->string == NULL)
|
||||
md->string = metadata_assemble_string(md);
|
||||
|
||||
@ -331,7 +302,7 @@ metadata_process_md(metadata_t *md)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
metadata_normalize_string(char **s)
|
||||
{
|
||||
char *str, *cp, *tmpstr, *tp;
|
||||
@ -367,11 +338,6 @@ metadata_file(const char *filename, int normalize)
|
||||
{
|
||||
metadata_t *md;
|
||||
|
||||
if (filename == NULL || strlen(filename) == 0) {
|
||||
log_alert("metadata_file: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
md = metadata_create(filename);
|
||||
if (!metadata_file_update(md)) {
|
||||
metadata_free(&md);
|
||||
@ -393,11 +359,6 @@ metadata_program(const char *program, int normalize)
|
||||
FILE *filep;
|
||||
#endif
|
||||
|
||||
if (program == NULL || strlen(program) == 0) {
|
||||
log_alert("metadata_program: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
md = metadata_create(program);
|
||||
md->program = 1;
|
||||
md->string = xstrdup("");
|
||||
@ -456,15 +417,7 @@ metadata_file_update(metadata_t *md)
|
||||
{
|
||||
FILE *filep;
|
||||
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_file_update: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->program) {
|
||||
log_alert("metadata_file_update: called with program handle");
|
||||
abort();
|
||||
}
|
||||
assert(!md->program);
|
||||
|
||||
if ((filep = fopen(md->filename, "rb")) == NULL) {
|
||||
log_error("%s: %s", md->filename, strerror(errno));
|
||||
@ -489,15 +442,7 @@ metadata_program_update(metadata_t *md, enum metadata_request md_req)
|
||||
char buf[METADATA_MAX + 1];
|
||||
char command[PATH_MAX + sizeof(" artist")];
|
||||
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_program_update: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (!md->program) {
|
||||
log_alert("metadata_program_update: called with file handle");
|
||||
abort();
|
||||
}
|
||||
assert(md->program);
|
||||
|
||||
switch (md_req) {
|
||||
case METADATA_ALL:
|
||||
@ -600,27 +545,13 @@ metadata_program_update(metadata_t *md, enum metadata_request md_req)
|
||||
const char *
|
||||
metadata_get_string(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_get_string: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->string == NULL) {
|
||||
log_alert("metadata_get_string: md->string is NULL");
|
||||
abort();
|
||||
}
|
||||
|
||||
assert(md->string);
|
||||
return (md->string);
|
||||
}
|
||||
|
||||
const char *
|
||||
metadata_get_artist(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_get_artist: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->artist == NULL)
|
||||
return (blankString);
|
||||
else
|
||||
@ -630,11 +561,6 @@ metadata_get_artist(metadata_t *md)
|
||||
const char *
|
||||
metadata_get_title(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_get_title: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->title == NULL)
|
||||
return (blankString);
|
||||
else
|
||||
@ -644,11 +570,6 @@ metadata_get_title(metadata_t *md)
|
||||
const char *
|
||||
metadata_get_filename(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_get_filename: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->filename == NULL)
|
||||
/* Should never happen: */
|
||||
return (blankString);
|
||||
@ -659,11 +580,6 @@ metadata_get_filename(metadata_t *md)
|
||||
int
|
||||
metadata_get_length(metadata_t *md)
|
||||
{
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_get_length: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
return (md->songLen);
|
||||
}
|
||||
|
||||
@ -673,11 +589,6 @@ metadata_assemble_string(metadata_t *md)
|
||||
size_t len;
|
||||
char *str;
|
||||
|
||||
if (md == NULL) {
|
||||
log_alert("metadata_assemble_string: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (md->artist == NULL && md->title == NULL && md->program == 0)
|
||||
return (metadata_get_name(md->filename));
|
||||
|
||||
|
188
src/playlist.c
188
src/playlist.c
@ -39,12 +39,12 @@ struct playlist {
|
||||
char *prog_track;
|
||||
};
|
||||
|
||||
playlist_t * playlist_create(const char *);
|
||||
int playlist_add(playlist_t *, const char *);
|
||||
unsigned int playlist_random(void);
|
||||
const char * playlist_run_program(playlist_t *);
|
||||
static playlist_t * playlist_create(const char *);
|
||||
static int playlist_add(playlist_t *, const char *);
|
||||
static unsigned int playlist_random(void);
|
||||
static const char * playlist_run_program(playlist_t *);
|
||||
|
||||
playlist_t *
|
||||
static playlist_t *
|
||||
playlist_create(const char *filename)
|
||||
{
|
||||
playlist_t *pl;
|
||||
@ -55,16 +55,11 @@ playlist_create(const char *filename)
|
||||
return (pl);
|
||||
}
|
||||
|
||||
int
|
||||
static int
|
||||
playlist_add(playlist_t *pl, const char *entry)
|
||||
{
|
||||
size_t num;
|
||||
|
||||
if (pl == NULL || entry == NULL) {
|
||||
log_alert("playlist_add: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
num = pl->num + 1;
|
||||
|
||||
if (pl->size == 0) {
|
||||
@ -88,7 +83,7 @@ playlist_add(playlist_t *pl, const char *entry)
|
||||
return (1);
|
||||
}
|
||||
|
||||
unsigned int
|
||||
static unsigned int
|
||||
playlist_random(void)
|
||||
{
|
||||
unsigned int ret = 0;
|
||||
@ -104,6 +99,63 @@ playlist_random(void)
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static const char *
|
||||
playlist_run_program(playlist_t *pl)
|
||||
{
|
||||
FILE *filep;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (!pl->program)
|
||||
return (NULL);
|
||||
|
||||
fflush(NULL);
|
||||
errno = 0;
|
||||
log_debug("running command: %s", pl->filename);
|
||||
if ((filep = popen(pl->filename, "r")) == NULL) {
|
||||
/* popen() does not set errno reliably ... */
|
||||
if (errno)
|
||||
log_error("execution error: %s: %s", pl->filename,
|
||||
strerror(errno));
|
||||
else
|
||||
log_error("execution error: %s", pl->filename);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (fgets(buf, (int)sizeof(buf), filep) == NULL) {
|
||||
int errnum = errno;
|
||||
|
||||
pclose(filep);
|
||||
|
||||
if (ferror(filep)) {
|
||||
log_alert("%s: output read error: %s", pl->filename,
|
||||
strerror(errnum));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* No output (end of playlist.) */
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
pclose(filep);
|
||||
|
||||
if (strlen(buf) == sizeof(buf) - 1) {
|
||||
log_error("%s: output too long", pl->filename);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
buf[strcspn(buf, "\r")] = '\0';
|
||||
if (buf[0] == '\0')
|
||||
/* Empty line (end of playlist.) */
|
||||
return (NULL);
|
||||
|
||||
if (pl->prog_track != NULL)
|
||||
xfree(pl->prog_track);
|
||||
pl->prog_track = xstrdup(buf);
|
||||
|
||||
return ((const char *)pl->prog_track);
|
||||
}
|
||||
|
||||
void
|
||||
playlist_init(void)
|
||||
{
|
||||
@ -279,11 +331,6 @@ playlist_free(playlist_t **pl_p)
|
||||
const char *
|
||||
playlist_get_next(playlist_t *pl)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_get_next: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program)
|
||||
return (playlist_run_program(pl));
|
||||
|
||||
@ -296,11 +343,6 @@ playlist_get_next(playlist_t *pl)
|
||||
const char *
|
||||
playlist_peek_next(playlist_t *pl)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_peek_next: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program || pl->num == 0)
|
||||
return (NULL);
|
||||
|
||||
@ -310,11 +352,6 @@ playlist_peek_next(playlist_t *pl)
|
||||
void
|
||||
playlist_skip_next(playlist_t *pl)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_skip_next: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program || pl->num == 0)
|
||||
return;
|
||||
|
||||
@ -325,11 +362,6 @@ playlist_skip_next(playlist_t *pl)
|
||||
unsigned long
|
||||
playlist_get_num_items(playlist_t *pl)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_get_position: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program)
|
||||
return (0);
|
||||
|
||||
@ -339,11 +371,6 @@ playlist_get_num_items(playlist_t *pl)
|
||||
unsigned long
|
||||
playlist_get_position(playlist_t *pl)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_get_position: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program)
|
||||
return (0);
|
||||
|
||||
@ -353,11 +380,6 @@ playlist_get_position(playlist_t *pl)
|
||||
int
|
||||
playlist_set_position(playlist_t *pl, unsigned long idx)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_set_position: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program || idx > pl->num - 1)
|
||||
return (0);
|
||||
|
||||
@ -371,11 +393,6 @@ playlist_goto_entry(playlist_t *pl, const char *entry)
|
||||
{
|
||||
unsigned long i;
|
||||
|
||||
if (pl == NULL || entry == NULL) {
|
||||
log_alert("playlist_goto_entry: bad arguments");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program)
|
||||
return (0);
|
||||
|
||||
@ -392,11 +409,6 @@ playlist_goto_entry(playlist_t *pl, const char *entry)
|
||||
void
|
||||
playlist_rewind(playlist_t *pl)
|
||||
{
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_rewind: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program)
|
||||
return;
|
||||
|
||||
@ -408,11 +420,6 @@ playlist_reread(playlist_t **plist)
|
||||
{
|
||||
playlist_t *new_pl, *pl;
|
||||
|
||||
if (plist == NULL || *plist == NULL) {
|
||||
log_alert("playlist_reread: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
pl = *plist;
|
||||
|
||||
if (pl->program)
|
||||
@ -436,11 +443,6 @@ playlist_shuffle(playlist_t *pl)
|
||||
size_t d, i, range;
|
||||
char *temp;
|
||||
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_shuffle: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (pl->program || pl->num < 2)
|
||||
return;
|
||||
|
||||
@ -466,65 +468,3 @@ playlist_shuffle(playlist_t *pl)
|
||||
pl->list[i] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
playlist_run_program(playlist_t *pl)
|
||||
{
|
||||
FILE *filep;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
if (pl == NULL) {
|
||||
log_alert("playlist_run_program: bad argument");
|
||||
abort();
|
||||
}
|
||||
|
||||
if (!pl->program)
|
||||
return (NULL);
|
||||
|
||||
fflush(NULL);
|
||||
errno = 0;
|
||||
log_debug("running command: %s", pl->filename);
|
||||
if ((filep = popen(pl->filename, "r")) == NULL) {
|
||||
/* popen() does not set errno reliably ... */
|
||||
if (errno)
|
||||
log_error("execution error: %s: %s", pl->filename,
|
||||
strerror(errno));
|
||||
else
|
||||
log_error("execution error: %s", pl->filename);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (fgets(buf, (int)sizeof(buf), filep) == NULL) {
|
||||
int errnum = errno;
|
||||
|
||||
pclose(filep);
|
||||
|
||||
if (ferror(filep)) {
|
||||
log_alert("%s: output read error: %s", pl->filename,
|
||||
strerror(errnum));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* No output (end of playlist.) */
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
pclose(filep);
|
||||
|
||||
if (strlen(buf) == sizeof(buf) - 1) {
|
||||
log_error("%s: output too long", pl->filename);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
buf[strcspn(buf, "\r")] = '\0';
|
||||
if (buf[0] == '\0')
|
||||
/* Empty line (end of playlist.) */
|
||||
return (NULL);
|
||||
|
||||
if (pl->prog_track != NULL)
|
||||
xfree(pl->prog_track);
|
||||
pl->prog_track = xstrdup(buf);
|
||||
|
||||
return ((const char *)pl->prog_track);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user