diff options
Diffstat (limited to 'backend/canon_pp.c')
| -rw-r--r-- | backend/canon_pp.c | 25 | 
1 files changed, 14 insertions, 11 deletions
| diff --git a/backend/canon_pp.c b/backend/canon_pp.c index b933102..79c6c63 100644 --- a/backend/canon_pp.c +++ b/backend/canon_pp.c @@ -1787,7 +1787,9 @@ static int init_cal(char *file)   ************************************************************************/  static SANE_Status fix_weights_file(CANONP_Scanner *cs)  { -	char *tmp, *myhome, buf[PATH_MAX]; +	static const char default_weights_file_prefix[] = +			"~/.sane/canon_pp-calibration-"; +	char *tmp, *myhome;  	int i;  	struct stat *f_stat; @@ -1804,31 +1806,32 @@ static SANE_Status fix_weights_file(CANONP_Scanner *cs)  	if (cs->weights_file == NULL)  	{ -		/* Will be of form canon_pp-calibration-parport0 or -0x378 */ -		sprintf(buf, "~/.sane/canon_pp-calibration-%s", +		/* Form is ~/.sane/canon_pp-calibration-parport0 or -0x378 */ +		i = strlen(default_weights_file_prefix) + +				strlen(cs->params.port->name); +		if ((cs->weights_file = malloc(i + 1)) == NULL) +			return SANE_STATUS_NO_MEM; +		sprintf(cs->weights_file, "%s%s", default_weights_file_prefix,  				cs->params.port->name); -		cs->weights_file = strdup(buf);  	}  	/* Get the user's home dir if they used ~ */  	if (cs->weights_file[0] == '~')  	{ -		if ((tmp = malloc(PATH_MAX)) == NULL) -			return SANE_STATUS_NO_MEM;  		if ((myhome = getenv("HOME")) == NULL)  		{  			DBG(0,"fix_weights_file: FATAL: ~ used, but $HOME not"  					" set!\n"); -			free(tmp); -			tmp = NULL;  			return SANE_STATUS_INVAL;  		} -		strncpy(tmp, myhome, PATH_MAX); -		strncpy(tmp+strlen(tmp), (cs->weights_file)+1, -				PATH_MAX-strlen(tmp)); +		i = strlen(myhome) + strlen(&cs->weights_file[1]); +		if ((tmp = malloc(i + 1)) == NULL) +			return SANE_STATUS_NO_MEM; +		sprintf(tmp, "%s%s", myhome, &cs->weights_file[1]);  		free(cs->weights_file);  		cs->weights_file = tmp; +		tmp = NULL;  	}  	if ((f_stat = malloc(sizeof(*f_stat))) == NULL) | 
