]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
MODFORM-23
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 16 Feb 2009 15:57:11 +0000 (15:57 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 16 Feb 2009 15:57:11 +0000 (15:57 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12051 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/formats/mod_sndfile/mod_sndfile.c

index 7979cc0488804dac05b1e1b1aa4de33ffacd0622..3d70fd41f6cb7adb54588876e5cecc1f3c383fd0 100644 (file)
@@ -67,11 +67,10 @@ static switch_status_t sndfile_file_open(switch_file_handle_t *handle, const cha
        int rates[4] = {8000, 16000, 32000, 48000};
        int i;
 #ifdef WIN32
-       char ps[2] = {'\\', '/'};
+       char ps = '\\';
 #else
-       char ps[2] = {'/', '\\'};
+       char ps = '/';
 #endif
-       int x;
 
        if ((ext = strrchr(path, '.')) == 0) {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Format\n");
@@ -158,24 +157,32 @@ static switch_status_t sndfile_file_open(switch_file_handle_t *handle, const cha
 
        switch_copy_string(alt_path, path, alt_len);
 
-       for (x = 0; x < 2; x++) {
-               if ((last = strrchr(alt_path, ps[x]))) {
+       /* This block attempts to add the sample rate to the path
+          if the sample rate is already present in the path it does nothing
+          and reverts to the original file name.
+       */
+       if ((last = strrchr(alt_path, ps))) {
+               last++;
+#ifdef WIN32
+               if (strrchr(last, '/')) {
+                       last = strrchr(alt_path, '/'); /* do not swallow a forward slash if they are intermixed under windows*/
                        last++;
-                       ldup = strdup(last);
-                       switch_assert(ldup);
-                       switch_snprintf(last, alt_len - (last - alt_path), "%d%s%s", handle->samplerate, SWITCH_PATH_SEPARATOR, ldup);
-                       if ((context->handle = sf_open(alt_path, mode, &context->sfinfo))) {
-                               path = alt_path;
-                       } else {
-                               /* Try to find the file at the highest rate possible if we can't find one that matches the exact rate.
-                                  If we don't find any, we will default back to the original file name.
-                               */
-                               for (i = 3; i > 0; i--) {
-                                       switch_snprintf(last, alt_len - (last - alt_path), "%d%s%s", rates[i], SWITCH_PATH_SEPARATOR, ldup);
-                                       if ((context->handle = sf_open(alt_path, mode, &context->sfinfo))) {
-                                               path = alt_path;
-                                               break;
-                                       }
+               }
+#endif
+               ldup = strdup(last);
+               switch_assert(ldup);
+               switch_snprintf(last, alt_len - (last - alt_path), "%d%s%s", handle->samplerate, SWITCH_PATH_SEPARATOR, ldup);
+               if ((context->handle = sf_open(alt_path, mode, &context->sfinfo))) {
+                       path = alt_path;
+               } else {
+                       /* Try to find the file at the highest rate possible if we can't find one that matches the exact rate.
+                          If we don't find any, we will default back to the original file name.
+                       */
+                       for (i = 3; i > 0; i--) {
+                               switch_snprintf(last, alt_len - (last - alt_path), "%d%s%s", rates[i], SWITCH_PATH_SEPARATOR, ldup);
+                               if ((context->handle = sf_open(alt_path, mode, &context->sfinfo))) {
+                                       path = alt_path;
+                                       break;
                                }
                        }
                }