diff --git a/keyserver/ChangeLog b/keyserver/ChangeLog index e167143b5..a12acd3a3 100644 --- a/keyserver/ChangeLog +++ b/keyserver/ChangeLog @@ -1,5 +1,8 @@ 2005-03-16 David Shaw + * ksutil.h, ksutil.c (ks_action_to_string): New. + (free_ks_options): Only free if options exist. + * ksutil.h, ksutil.c (init_ks_options, free_ks_options, parse_ks_options): Pull a lot of duplicated code into a single options parser for all keyserver helpers. diff --git a/keyserver/ksutil.c b/keyserver/ksutil.c index 9700c0370..223f52e8b 100644 --- a/keyserver/ksutil.c +++ b/keyserver/ksutil.c @@ -85,13 +85,16 @@ init_ks_options(void) void free_ks_options(struct ks_options *opt) { - free(opt->host); - free(opt->port); - free(opt->scheme); - free(opt->auth); - free(opt->path); - free(opt->ca_cert_file); - free(opt); + if(opt) + { + free(opt->host); + free(opt->port); + free(opt->scheme); + free(opt->auth); + free(opt->path); + free(opt->ca_cert_file); + free(opt); + } } /* Returns 0 if we "ate" the line. Returns >0, a KEYSERVER_ error @@ -109,11 +112,6 @@ parse_ks_options(char *line,struct ks_options *opt) char path[URLMAX_PATH+1]; char option[MAX_OPTION+1]; -#if 0 - if(sscanf(line,"%c",&hash)==1 && hash=='#') - continue; -#endif - if(line[0]=='#') return 0; @@ -267,3 +265,17 @@ parse_ks_options(char *line,struct ks_options *opt) return -1; } + +const char * +ks_action_to_string(enum ks_action action) +{ + switch(action) + { + case KS_UNKNOWN: return "UNKNOWN"; + case KS_GET: return "GET"; + case KS_SEND: return "SEND"; + case KS_SEARCH: return "SEARCH"; + } + + return "?"; +} diff --git a/keyserver/ksutil.h b/keyserver/ksutil.h index 8559d8db8..3ed7b9683 100644 --- a/keyserver/ksutil.h +++ b/keyserver/ksutil.h @@ -59,9 +59,11 @@ struct keylist unsigned int set_timeout(unsigned int seconds); int register_timeout(void); +enum ks_action {KS_UNKNOWN=0,KS_GET,KS_SEND,KS_SEARCH}; + struct ks_options { - enum {KS_UNKNOWN,KS_GET,KS_SEND,KS_SEARCH} action; + enum ks_action action; char *host; char *port; char *scheme; @@ -83,5 +85,6 @@ struct ks_options struct ks_options *init_ks_options(void); void free_ks_options(struct ks_options *opt); int parse_ks_options(char *line,struct ks_options *opt); +const char *ks_action_to_string(enum ks_action action); #endif /* !_KSUTIL_H_ */