changeset 10101:f3f3e25f8149

use dynamic path[] allocation and possible better wraSetDLLAccessPath mechanism :)
author alex
date Mon, 12 May 2003 15:50:40 +0000
parents 00c091706a73
children 0f59b1e9ad97
files libmpcodecs/ad_realaud.c
diffstat 1 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/ad_realaud.c	Mon May 12 14:39:40 2003 +0000
+++ b/libmpcodecs/ad_realaud.c	Mon May 12 15:50:40 2003 +0000
@@ -211,8 +211,10 @@
   unsigned int result;
   int len=0;
   void* prop;
-  char path[4096];
+  char *path;
 
+  path = malloc(strlen(REALCODEC_PATH)+strlen(sh->codec->dll)+2);
+  if (!path) return 0;
   sprintf(path, REALCODEC_PATH "/%s", sh->codec->dll);
 
     /* first try to load linux dlls, if failed and we're supporting win32 dlls,
@@ -226,6 +228,7 @@
     {
 	mp_msg(MSGT_DECVIDEO, MSGL_ERR, MSGTR_MissingDLLcodec, sh->codec->dll);
 	mp_msg(MSGT_DECVIDEO, MSGL_HINT, "Read the RealAudio section of the DOCS!\n");
+	free(path);
 	return 0;
     }
 
@@ -234,7 +237,9 @@
 #else
   if(raSetDLLAccessPath){
 #endif
+      int i;
       // used by 'SIPR'
+      path = realloc(path, strlen(REALCODEC_PATH) + 12);
       sprintf(path, "DT_Codecs=" REALCODEC_PATH);
       if(path[strlen(path)-1]!='/'){
         path[strlen(path)+1]=0;
@@ -243,7 +248,11 @@
       path[strlen(path)+1]=0;
 #ifdef USE_WIN32DLL
     if (dll_type == 1)
+    {
+      for (i=0; i < strlen(path); i++)
+        if (path[i] == '/') path[i] = '\\';
       wraSetDLLAccessPath(path);
+    }
     else
 #endif
       raSetDLLAccessPath(path);
@@ -266,6 +275,7 @@
       return 0;
     }
 //    printf("opencodec ok (result: %x)\n", result);
+  free(path); /* after this it isn't used anymore */
 
   sh->samplerate=sh->wf->nSamplesPerSec;
   sh->samplesize=sh->wf->wBitsPerSample/8;