2009-04-20 17:00:56 +04:00
# include "cache.h"
2016-07-07 17:38:09 +03:00
# include "util.h"
2016-06-23 11:55:17 +03:00
# include "config.h"
2009-04-20 17:00:56 +04:00
static const char * alias_key ;
static char * alias_val ;
2012-09-11 02:15:03 +04:00
static int alias_lookup_cb ( const char * k , const char * v ,
void * cb __maybe_unused )
2009-04-20 17:00:56 +04:00
{
if ( ! prefixcmp ( k , " alias. " ) & & ! strcmp ( k + 6 , alias_key ) ) {
if ( ! v )
return config_error_nonbool ( k ) ;
alias_val = strdup ( v ) ;
return 0 ;
}
return 0 ;
}
char * alias_lookup ( const char * alias )
{
alias_key = alias ;
alias_val = NULL ;
perf_config ( alias_lookup_cb , NULL ) ;
return alias_val ;
}
int split_cmdline ( char * cmdline , const char * * * argv )
{
int src , dst , count = 0 , size = 16 ;
char quoted = 0 ;
* argv = malloc ( sizeof ( char * ) * size ) ;
/* split alias_string */
( * argv ) [ count + + ] = cmdline ;
for ( src = dst = 0 ; cmdline [ src ] ; ) {
char c = cmdline [ src ] ;
if ( ! quoted & & isspace ( c ) ) {
cmdline [ dst + + ] = 0 ;
while ( cmdline [ + + src ]
& & isspace ( cmdline [ src ] ) )
; /* skip */
if ( count > = size ) {
size + = 16 ;
* argv = realloc ( * argv , sizeof ( char * ) * size ) ;
}
( * argv ) [ count + + ] = cmdline + dst ;
} else if ( ! quoted & & ( c = = ' \' ' | | c = = ' " ' ) ) {
quoted = c ;
src + + ;
} else if ( c = = quoted ) {
quoted = 0 ;
src + + ;
} else {
if ( c = = ' \\ ' & & quoted ! = ' \' ' ) {
src + + ;
c = cmdline [ src ] ;
if ( ! c ) {
2013-12-27 00:41:15 +04:00
zfree ( argv ) ;
2009-04-20 17:00:56 +04:00
return error ( " cmdline ends with \\ " ) ;
}
}
cmdline [ dst + + ] = c ;
src + + ;
}
}
cmdline [ dst ] = 0 ;
if ( quoted ) {
2013-12-27 00:41:15 +04:00
zfree ( argv ) ;
2009-04-20 17:00:56 +04:00
return error ( " unclosed quote " ) ;
}
return count ;
}