Re: [PATCH v2] trace-cmd: Load trace-cmd plugins from build folder, if exists

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 23 Apr 2019 13:10:35 +0000
Slavomir Kaslev <kaslevs@xxxxxxxxxx> wrote:

 
> > +static char *trace_util_get_source_plugins_dir(void)
> > +{
> > +	char *plugins = "/plugins";
> > +	char path[PATH_MAX+1];
> > +	int slash = 0;
> > +	int ret;
> > +
> > +	ret = readlink("/proc/self/exe", path, PATH_MAX);
> > +	if (ret > PATH_MAX || ret < 0)
> > +		return NULL;
> > +
> > +	while (ret) {
> > +		if ('/' == path[ret--])
> > +			slash++;
> > +		if (slash == 2) {
> > +			path[ret+1] = 0;
> > +			if (strlen(path) + strlen(plugins) > PATH_MAX)
> > +				break;
> > +			strcat(path, plugins);
> > +			return strdup(path);
> > +		}
> > +	}  
> 
> Looks good. I think that this while() loop can be simplified using the
> standard library to something like:
> 
> 	char resolved[PATH_MAX+1];
> 
> 	dirname(path);
> 	strcat(path, "/../plugins");
> 	if (!realpath(path, resolved))
> 		return NULL;
> 
> The realpath() above is also not strictly necessary.

Or:

	char *p;

	dirname(path);
	p = strrchr(path, '/');
	if (!p)
		return NULL;
	/* It's only in the source if we are in the tracecmd directory */
	if (strcmp(p, "/tracecmd") != 0)
		return NULL;

	strcpy(p, "/plugins");


-- Steve




[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux