[pacman-dev] Checking free space before transaction

Nezmer git at nezmer.info
Thu Nov 11 15:49:42 CET 2010


On Thu, Nov 11, 2010 at 04:46:44PM +0200, Nezmer wrote:
> On Thu, Nov 11, 2010 at 09:09:27AM +1000, Allan McRae wrote:
> > On 11/11/10 07:29, Nezmer wrote:
> > >But with those changes pacman did not like my ZFS pool.
> > 
> > From a bit of google, it looks like the statvfs call is probably
> > returning EOVERFLOW on that so we can probably just assume LOTS of
> > space and move on in those conditions...
> > 
> > Allan
> > 
> > 
> 
> That's over-simplification. This is the quick patch I needed to make
> this even compile.

> diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c
> index 51c25ed..f382d3c 100644
> --- a/lib/libalpm/diskspace.c
> +++ b/lib/libalpm/diskspace.c
> @@ -80,7 +80,7 @@ static alpm_list_t *mount_point_list()
>  	endmntent(fp);
>  #elif defined HAVE_GETMNTINFO
>  	int entries;
> -	struct statvfs *fsp;
> +	struct statfs *fsp;
>  
>  	entries = getmntinfo(&fsp, MNT_NOWAIT);
>  

from /usr/include/sys/mount.h:
int getmntinfo(struct statfs **, int);

> @@ -89,12 +89,12 @@ static alpm_list_t *mount_point_list()
>  	}
>  
>  	for(; entries-- > 0; fsp++) {
> -		if((&fsp)->f_bfree != 0) {
> +		if(fsp->f_bfree != 0) {
>  			MALLOC(mp, sizeof(alpm_mountpoint_t), RET_ERR(PM_ERR_MEMORY, NULL));
> -			mp->mount_dir = strdup(fsp->f_mntonname)
> +			mp->mount_dir = strdup(fsp->f_mntonname);
>  
> -			MALLOC(mp->fsp, sizeof(struct statvfs), RET_ERR(PM_ERR_MEMORY, NULL));
> -			memcpy((void *)(mp->fsp), (void *)fsp, sizeof(struct statvfs));
> +			MALLOC(mp->fsp, sizeof(struct statfs), RET_ERR(PM_ERR_MEMORY, NULL));
> +			memcpy((void *)(mp->fsp), (void *)fsp, sizeof(struct statfs));
>  
>  			mp->blocks_needed = 0;
>  			mp->max_blocks_needed = 0;

> 



More information about the pacman-dev mailing list