Fix ENUM to live w/out config file, and fix internationalization
[asterisk/asterisk.git] / file.c
diff --git a/file.c b/file.c
index dde3d26..27fbe23 100755 (executable)
--- a/file.c
+++ b/file.c
@@ -419,21 +419,24 @@ struct ast_filestream *ast_openstream(struct ast_channel *chan, char *filename,
        */
        int fd = -1;
        int fmts = -1;
-       char filename2[256];
-       char lang2[MAX_LANGUAGE];
+       char filename2[256]="";
+       char filename3[256]="";
+       char *endpart;
        int res;
        ast_stopstream(chan);
        /* do this first, otherwise we detect the wrong writeformat */
        if (chan->generator)
                ast_deactivate_generator(chan);
        if (preflang && strlen(preflang)) {
-               snprintf(filename2, sizeof(filename2), "%s/%s", preflang, filename);
+               strncpy(filename3, filename, sizeof(filename3) - 1);
+               endpart = strrchr(filename3, '/');
+               if (endpart) {
+                       *endpart = '\0';
+                       endpart++;
+                       snprintf(filename2, sizeof(filename2), "%s/%s/%s", filename3, preflang, endpart);
+               } else
+                       snprintf(filename2, sizeof(filename2), "%s/%s", preflang, filename);
                fmts = ast_fileexists(filename2, NULL, NULL);
-               if (fmts < 1) {
-                       strncpy(lang2, preflang, sizeof(lang2)-1);
-                       snprintf(filename2, sizeof(filename2), "%s/%s", lang2, filename);
-                       fmts = ast_fileexists(filename2, NULL, NULL);
-               }
        }
        if (fmts < 1) {
                strncpy(filename2, filename, sizeof(filename2)-1);