diff options
author | Nick White <git@njw.me.uk> | 2010-05-19 17:15:41 +0100 |
---|---|---|
committer | Nick White <git@njw.me.uk> | 2010-05-19 17:15:41 +0100 |
commit | e91ec0d87aa31cb465fe8cf934d405ad56342eba (patch) | |
tree | 1709e437c0d8f144bec479975a777c6ae8580eba /parseconfig.c | |
parent | 6cf58b46037cf04915fa507813ab7419db2e45ec (diff) |
Switched to simpler build system, and fixed bugs
Now there's a proper build system in place, which is actually simple
enough to understand.
I also fixed plenty of warnings about the code (reminding me how badly I
knew C when I wrote this).
Hinduism today aren't indexing their new issues using the index file I
was sourcing any more, so I don't expect to fix any more bugs or improve
this much.
Diffstat (limited to 'parseconfig.c')
-rw-r--r-- | parseconfig.c | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/parseconfig.c b/parseconfig.c new file mode 100644 index 0000000..0bfda05 --- /dev/null +++ b/parseconfig.c @@ -0,0 +1,160 @@ +/* + * This file is part of GetHT + * + * See COPYING file for copyright, license and warranty details. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "getht.h" + +#include <curl/curl.h> + +int loadconfig(char * getht_path, struct config * options) +/* Loads variables from config file to extern and passed + * variables. */ +{ + FILE * config_file; + char filepath[STR_MAX]; + + snprintf(filepath, STR_MAX, "%s/config.ini", getht_path); + + if((config_file = fopen(filepath,"r")) == NULL) + { + fprintf(stderr,"Cannot open file %s for reading.\n",filepath); + return 1; + } + + char parameter[80], option[80]; + while(!feof(config_file)) + { + fscanf(config_file, "%s = %s", option, parameter); + + if(option[0] == '#'); /* ignore lines beginning with a hash */ + else if(!strcmp(option, "savepath")) + strncpy(options->save_path, parameter, STR_MAX); + else if(!strcmp(option, "startup_check")) + options->startup_check = atoi(parameter); + else if(!strcmp(option, "toc_uri")) + strncpy(options->issue_uri, parameter, STR_MAX); + else if(!strcmp(option, "proxy_type")) + { + if(!strcmp(parameter, "http")) + options->proxy.type = CURLPROXY_HTTP; + else if(!strcmp(parameter, "socks4")) + options->proxy.type = CURLPROXY_SOCKS4; + else if(!strcmp(parameter, "socks5")) + options->proxy.type = CURLPROXY_SOCKS5; + else + fprintf(stderr, + "Proxy type %s not known, please use either http, socks4 or socks5\n", + parameter); + } + else if(!strcmp(option, "proxy_address")) + strncpy(options->proxy.address, parameter, STR_MAX); + else if(!strcmp(option, "proxy_port")) + options->proxy.port = (long) atoi(parameter); + else if(!strcmp(option, "proxy_auth")) + { + if(!strcmp(parameter, "basic")) + options->proxy.auth = CURLAUTH_BASIC; + else if(!strcmp(parameter, "digest")) + options->proxy.auth = CURLAUTH_DIGEST; + else if(!strcmp(parameter, "ntlm")) + options->proxy.auth = CURLAUTH_NTLM; + else + fprintf(stderr, + "config.ini: Proxy authentication method %s not known, please use basic, digest or ntlm", + parameter); + } + else if(!strcmp(option, "proxy_user")) + strncpy(options->proxy.user, parameter, STR_MAX); + else if(!strcmp(option, "proxy_pass")) + strncpy(options->proxy.pass, parameter, STR_MAX); + else + fprintf(stderr, "config.ini: Option '%s' not recognised, ignoring\n", option); + } + + fclose(config_file); + + return 0; +} + +int writefreshconfig(char * getht_path, struct config * options) +/* Write a new config file according to extern and passed variables. */ +{ + FILE * config_file; + char filepath[STR_MAX]; + + snprintf(filepath, STR_MAX, "%s/config.ini", getht_path); + + if((config_file = fopen(filepath,"w")) == NULL) + { + fprintf(stderr,"Cannot open file %s for writing.\n",filepath); + return 1; + } + else + fprintf(stdout,"Writing a fresh config file to %s.\n",filepath); + + if(options->save_path[0]) + fprintf(config_file, "%s = %s\n", "savepath", options->save_path); + if(options->startup_check) + fprintf(config_file, "%s = %i\n", "startup_check", options->startup_check); + if(options->issue_uri[0]) + fprintf(config_file, "%s = %s\n", "toc_uri", options->issue_uri); + if(options->proxy.type) + { + if(options->proxy.type == CURLPROXY_HTTP) + fprintf(config_file, "%s = %s\n", "proxy_type", "http"); + else if(options->proxy.type == CURLPROXY_SOCKS4) + fprintf(config_file, "%s = %s\n", "proxy_type", "socks4"); + else if(options->proxy.type == CURLPROXY_SOCKS5) + fprintf(config_file, "%s = %s\n", "proxy_type", "socks5"); + } + if(options->proxy.address[0]) + fprintf(config_file, "%s = %s\n", "proxy_address", options->proxy.address); + if(options->proxy.port) + fprintf(config_file, "%s = %li\n", "proxy_port", options->proxy.port); + if(options->proxy.auth) + { + if(options->proxy.auth == CURLAUTH_BASIC) + fprintf(config_file, "%s = %s\n", "proxy_auth", "basic"); + else if(options->proxy.auth == CURLAUTH_DIGEST) + fprintf(config_file, "%s = %s\n", "proxy_auth", "digest"); + else if(options->proxy.auth == CURLAUTH_NTLM) + fprintf(config_file, "%s = %s\n", "proxy_auth", "ntlm"); + } + if(options->proxy.user[0]) + fprintf(config_file, "%s = %s\n", "proxy_user", options->proxy.user); + if(options->proxy.pass[0]) + fprintf(config_file, "%s = %s\n", "proxy_pass", options->proxy.pass); + + fclose(config_file); + + return 0; +} + +int updateconfig(char * getht_path, struct config * options) +/* Read existing config file, and rewrite any variables which differ + * in memory. */ +{ + FILE * config_file; + char filepath[STR_MAX]; + + snprintf(filepath, STR_MAX, "%s/config.ini", getht_path); + + if((config_file = fopen(filepath,"rw")) == NULL) + { + fprintf(stderr,"Cannot open file %s for reading/writing.\n",filepath); + return 1; + } + + /* Not yet implemented */ + + fclose(config_file); + + return 1; +} |