Re: [PATCH v2 4/5] ptp-gadget: Add storage clean up code

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

 



On Fri, 9 Apr 2010, Anatolij Gustschin wrote:

> Signed-off-by: Anatolij Gustschin <agust@xxxxxxx>

Ok, the purpose of this function is to clean up the storage off stale 
lock-files, right? Now, if we remove the lock files completely, as I 
suggested in my previous review, if we do eventually decide to keep them, 
we'll come back to this patch then.

> ---
>  ptp.c |   77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 77 insertions(+), 0 deletions(-)
> 
> diff --git a/ptp.c b/ptp.c
> index 7f46faf..e187fce 100644
> --- a/ptp.c
> +++ b/ptp.c
> @@ -2756,6 +2756,81 @@ static size_t get_string(iconv_t ic, char *buf, const char *s, size_t len)
>  	return ret;
>  }
>  
> +static void clean_up(const char *path)
> +{
> +	struct dirent *dentry;
> +	DIR *d;
> +	char file_name[256];
> +	int ret;
> +
> +	ret = chdir(path);
> +	if (ret < 0)
> +		return;
> +
> +	d = opendir(".");
> +
> +	while ((dentry = readdir(d))) {
> +		struct stat fstat;
> +		char *dot;
> +		int lsize, fsize;
> +
> +		dot = strrchr(dentry->d_name, '.');
> +
> +		if (!dot || dot == dentry->d_name)
> +			continue;
> +
> +		if (strcasecmp(dot, ".lock"))
> +			continue;
> +
> +		*dot = '\0';
> +		snprintf(file_name, sizeof(file_name), "%s", dentry->d_name);
> +		*dot = '.';
> +
> +		ret = stat(dentry->d_name, &fstat);
> +		if (ret < 0) {
> +			fprintf(stderr, "%s: stat %s: %s\n",
> +				__func__, dentry->d_name, strerror(errno));
> +			continue;
> +		}
> +
> +		lsize = fstat.st_size;
> +
> +		ret = stat(file_name, &fstat);
> +		if (ret < 0) {
> +			fprintf(stderr, "%s: stat %s: %s\n",
> +				__func__, file_name, strerror(errno));
> +			ret = unlink(dentry->d_name);
> +			if (ret < 0)
> +				fprintf(stderr, "%s: %s: %s\n",
> +					__func__, dentry->d_name,
> +					strerror(errno));
> +			continue;
> +		}
> +
> +		fsize = fstat.st_size;
> +		if (lsize == fsize) {
> +			if (verbose)
> +				printf("remove %s, %s\n",
> +					dentry->d_name, file_name);
> +			ret = unlink(dentry->d_name);
> +			if (ret < 0)
> +				fprintf(stderr, "%s: %s: %s\n",
> +					__func__, dentry->d_name, strerror(errno));
> +			ret = unlink(file_name);
> +			if (ret < 0)
> +				fprintf(stderr, "%s: %s: %s\n",
> +					__func__, file_name, strerror(errno));
> +		} else {
> +			if (verbose)
> +				printf("remove %s\n", dentry->d_name);
> +			ret = unlink(dentry->d_name);
> +			if (ret < 0)
> +				fprintf(stderr, "%s: %s: %s\n",
> +					__func__, dentry->d_name, strerror(errno));
> +		}
> +	}
> +}
> +
>  static int enum_objects(const char *path)
>  {
>  	struct dirent *dentry;
> @@ -2980,6 +3055,8 @@ int main(int argc, char *argv[])
>  
>  	root = argv[argc - 1];
>  
> +	clean_up(root);
> +
>  	/*
>  	 * if a client doesn't ask for storage info (as seen with some
>  	 * older SW versions, e.g. on Ubuntu 8.04), then the free space
> -- 
> 1.6.3.3

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux