Add Timo's metacharacter escaping code and codectype passed to scripts

This commit is contained in:
Ron Pedde 2005-11-20 06:42:03 +00:00
parent d284223749
commit 3ac71ba469
3 changed files with 19 additions and 11 deletions

View File

@ -645,7 +645,8 @@ void dispatch_stream(WS_CONNINFO *pwsc, DBQUERYINFO *pqi) {
pwsc->threadno,pmp3->path);
file_ptr = server_side_convert_open(pmp3->path,
offset,
pmp3->song_length);
pmp3->song_length,
pmp3->codectype);
if (file_ptr) {
file_fd = fileno(file_ptr);
} else {

View File

@ -80,18 +80,18 @@ int server_side_convert(char *codectype) {
* @param path char * to the real filename.
* @param offset off_t to the point in file where the streaming starts.
*/
FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms) {
FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms, char *codectype) {
char *cmd;
FILE *f;
char *newpath;
char *metachars = "\"$`\\"; /* More?? */
char *metachars = "\"\\!(){}#*?&<>`"; /* More?? */
char metacount = 0;
char *src,*dst;
src=path;
while(*src) {
if(strchr(metachars,*src))
metacount++;
metacount+=5;
src++;
}
@ -104,9 +104,15 @@ FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms) {
dst=newpath;
while(*src) {
if(strchr(metachars,*src))
*dst++='\\';
*dst++=*src++;
if(strchr(metachars,*src)) {
*dst++='"';
*dst++='\'';
*dst++=*src++;
*dst++='\'';
*dst++='"';
} else {
*dst++=*src++;
}
}
*dst='\0';
} else {
@ -117,8 +123,9 @@ FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms) {
cmd=(char *)malloc(strlen(config.ssc_prog) +
strlen(path) +
64);
sprintf(cmd, "%s \"%s\" %ld %lu.%03lu",
config.ssc_prog, newpath, (long)offset, len_ms / 1000, len_ms % 1000);
sprintf(cmd, "%s \"%s\" %ld %lu.%03lu \"%s\"",
config.ssc_prog, newpath, (long)offset, len_ms / 1000,
len_ms % 1000, (codectype && *codectype) ? codectype : "*");
DPRINTF(E_INF,L_SCAN,"Executing %s\n",cmd);
f = popen(cmd, "r");
free(newpath);

View File

@ -26,11 +26,11 @@
#define SERVER_SIDE_CONVERT_DESCR " (converted to WAV)"
extern int server_side_convert(char *codectype);
extern int server_side_convert_set(MP3FILE *pmp3);
extern char *server_side_convert_path(char *path);
extern FILE *server_side_convert_open(char *path,
off_t offset,
unsigned long len_ms);
unsigned long len_ms,
char *codectype);
extern void server_side_convert_close(FILE *f);
#endif /* _SCC_H_ */