Svante Signell, le Thu 30 Aug 2012 19:07:19 +0200, a écrit :
> @@ -83,7 +89,8 @@
>  #if !defined(WIN32)
>    DIR* dir;
>    struct dirent* ent;
> -  char fname[PATH_MAX];
> +  char *fname = NULL;
> +  int len = 0;
>    IServiceManager* servmgr = XPLC_getServiceManager();
>    IModuleLoader* loader;
>    ModuleNode* modules = 0;
> @@ -106,7 +113,9 @@
>    while((ent = readdir(dir))) {
>      IModule* module;
>  
> -    snprintf(fname, PATH_MAX, "%s/%s", directory, ent->d_name);
> +    len = strlen(directory) + 1 + strlen(ent->d_name) + 1;
> +    fname = (char*)malloc(len);

fname gets allocated at each while loop iteration, but only freed once
later.  You need to either just free before allocating with the new
size, or reuse the same buffer (extending it if needed).

> +    snprintf(fname, len, "%s/%s", directory, ent->d_name);
>  
>      module = loader->loadModule(fname);
>      if(module) {
> @@ -117,6 +126,7 @@
>      }
>    }
>  
> +  free(fname);
>    loader->release();
>  
>    closedir(dir);


-- 
Samuel
<D> N: j'aime bien Cut d'un truc enorme... ca montre de quel cote de l'ecran 
sont les couilles :)))
 -+- #ens-mim et la peufeupeu -+-


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: 
http://lists.debian.org/[email protected]

Reply via email to