@ -69,42 +69,49 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
return cmd_res ;
}
free ( src ) ;
src = p . we_wordv [ 0 ] ;
src = strdup ( p . we_wordv [ 0 ] ) ;
wordfree ( & p ) ;
if ( ! src ) {
wlr_log ( L_ERROR , " Failed to duplicate string " ) ;
return cmd_results_new ( CMD_FAILURE , " output " ,
" Unable to allocate resource " ) ;
}
if ( config - > reading & & * src ! = ' / ' ) {
// src file is inside configuration dir
char * conf = strdup ( config - > current_config ) ;
if ( conf ) {
if ( ! conf ) {
wlr_log ( L_ERROR , " Failed to duplicate string " ) ;
return cmd_results_new ( CMD_FAILURE , " output " ,
" Unable to allocate resources " ) ;
}
char * conf_path = dirname ( conf ) ;
char * rel_path = src ;
src = malloc ( strlen ( conf_path ) + strlen ( src ) + 2 ) ;
if ( ! src ) {
free ( rel_path ) ;
free ( conf ) ;
wordfree ( & p ) ;
wlr_log ( L_ERROR ,
" Unable to allocate resource: Not enough memory " ) ;
wlr_log ( L_ERROR , " Unable to allocate memory " ) ;
return cmd_results_new ( CMD_FAILURE , " output " ,
" Unable to allocate resources " ) ;
}
sprintf ( src , " %s/%s " , conf_path , p . we_wordv [ 0 ] ) ;
sprintf ( src , " %s/%s " , conf_path , rel_path ) ;
free ( rel_path ) ;
free ( conf ) ;
} else {
wlr_log ( L_ERROR , " Unable to allocate background source " ) ;
}
}
if ( access ( src , F_OK ) = = - 1 ) {
struct cmd_results * cmd_res = cmd_results_new ( CMD_FAILURE , " output " ,
" Unable to access background file '%s': %s " , src , strerror ( errno ) ) ;
free ( src ) ;
wordfree ( & p ) ;
return cmd_res ;
}
output - > background = strdup ( src ) ;
output - > background = src ;
output - > background_option = strdup ( mode ) ;
if ( src ! = p . we_wordv [ 0 ] ) {
free ( src ) ;
}
wordfree ( & p ) ;
argc - = j + 1 ; argv + = j + 1 ;
}