summaryrefslogtreecommitdiff
path: root/plugins/converter
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-04-10 11:28:28 +0200
committerGravatar waker <wakeroid@gmail.com>2012-04-10 11:28:28 +0200
commit553c732d7d49bc6bee8c24a39a27aa3869b0deb2 (patch)
tree6a741b44fa4ba0bbbfda0e7514ea88f13793d6b5 /plugins/converter
parent1ed51a80ec0979bc0be453f75548c59965fbd6f5 (diff)
converter: fixed escaping special chars
Diffstat (limited to 'plugins/converter')
-rw-r--r--plugins/converter/converter.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/plugins/converter/converter.c b/plugins/converter/converter.c
index a653089a..e32c38a6 100644
--- a/plugins/converter/converter.c
+++ b/plugins/converter/converter.c
@@ -651,23 +651,30 @@ static void
get_output_field (DB_playItem_t *it, const char *field, char *out, int sz)
{
int idx = deadbeef->pl_get_idx_of (it);
- deadbeef->pl_format_title (it, idx, out, sz, -1, field);
+ char temp[PATH_MAX];
+ deadbeef->pl_format_title (it, idx, temp, sizeof (temp), -1, field);
- // replace invalid chars
- char invalid[] = "/\\?%*:|\"<>`";
+ // escape special chars
+ char invalid[] = "$\"`\\";
char *p = out;
- while (*p) {
- if (strchr (invalid, *p)) {
- *p = '_';
+ char *t = temp;
+ int n = sz;
+ while (*t && n > 1) {
+ if (strchr (invalid, *t)) {
+ *p++ = '\\';
+ n--;
}
- p++;
+ *p++ = *t;
+ n--;
+ t++;
}
+ *p = 0;
trace ("field '%s' expanded to '%s'\n", field, out);
}
void
get_output_path (DB_playItem_t *it, const char *outfolder_user, const char *outfile, ddb_encoder_preset_t *encoder_preset, int preserve_folder_structure, const char *root_folder, int write_to_source_folder, char *out, int sz) {
-
+ trace ("get_output_path: %s %s %s\n", outfolder_user, outfile, root_folder);
const char *uri = strdupa (deadbeef->pl_find_meta (it, ":URI"));
char outfolder_preserve[2000];
if (preserve_folder_structure) {
@@ -699,18 +706,24 @@ get_output_path (DB_playItem_t *it, const char *outfolder_user, const char *outf
int l;
char fname[PATH_MAX];
- char *path = strdupa (outfolder);
+ int pathl = strlen(outfolder)*2+1;
+ char path[pathl];
char *pattern = strdupa (outfile);
- // replace invalid chars
- char invalid[] = "?%*:|\"<>`";
+ // escape special chars
+ char invalid[] = "$\"`\\";
char *p = path;
- while (*p) {
- if (strchr (invalid, *p)) {
- *p = '_';
+ const char *t = outfolder;
+ while (*t && pathl > 1) {
+ if (strchr (invalid, *t)) {
+ *p++ = '\\';
+ pathl--;
}
- p++;
+ *p++ = *t;
+ pathl--;
+ t++;
}
+ *p = 0;
snprintf (out, sz, "%s/", path);
// split path and create directories