From d93047742f3db5b8651cefe74d168be7d5e15d26 Mon Sep 17 00:00:00 2001 From: jpeeler Date: Thu, 20 Nov 2008 17:37:31 +0000 Subject: (closes issue #12929) Reported by: snyfer This handles the case for a zero length file to attempt to be streamed. Instead of failing from not playing any data, go ahead and return success as ast_streamfile should consider playing nothing a success when there is nothing to play. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@158062 f38db490-d61c-443f-a65b-d21fe96a405b --- main/file.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'main/file.c') diff --git a/main/file.c b/main/file.c index f6bdd7cf5..f94d1c19a 100644 --- a/main/file.c +++ b/main/file.c @@ -407,6 +407,9 @@ static int ast_filehelper(const char *filename, const void *arg2, const char *fm ast_free(s); continue; /* cannot run open on file */ } + if (st.st_size == 0) { + ast_log(LOG_WARNING, "File %s detected to have zero size.\n", fn); + } /* ok this is good for OPEN */ res = 1; /* found */ s->lasttimeout = -1; @@ -872,8 +875,19 @@ int ast_streamfile(struct ast_channel *chan, const char *filename, const char *p struct ast_filestream *fs; struct ast_filestream *vfs=NULL; char fmt[256]; + int seekattempt; fs = ast_openstream(chan, filename, preflang); + + /* check to see if there is any data present (not a zero length file), + * done this way because there is no where for ast_openstream_full to + * return the file had no data. */ + seekattempt = fseek(fs->f, -1, SEEK_END); + if (!seekattempt) + fseek(fs->f, 0, SEEK_SET); + else + return 0; + if (fs) vfs = ast_openvstream(chan, filename, preflang); if (vfs) { -- cgit v1.2.3