mirror of
https://github.com/owntone/owntone-server.git
synced 2025-02-03 01:46:02 -05:00
Add Timo's metacharacter escaping code and codectype passed to scripts
This commit is contained in:
parent
d284223749
commit
3ac71ba469
@ -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 {
|
||||
|
23
src/ssc.c
23
src/ssc.c
@ -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);
|
||||
|
@ -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_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user