#include "options.h"
#include "abook.h"
#include "misc.h"
+#include "xmalloc.h"
#ifndef FALSE
# define FALSE 0
{ "mutt_command", OT_STR, STR_MUTT_COMMAND, UL "mutt" },
{ "mutt_return_all_emails", OT_BOOL, BOOL_MUTT_RETURN_ALL_EMAILS,
TRUE },
-
+
{ "print_command", OT_STR, STR_PRINT_COMMAND, UL "lpr" },
{ "www_command", OT_STR, STR_WWW_COMMAND, UL "lynx" },
-
+
{ "address_style", OT_STR, STR_ADDRESS_STYLE, UL "eu" },
{ "use_ascii_only", OT_BOOL, BOOL_USE_ASCII_ONLY, FALSE },
{ "add_email_prevent_duplicates", OT_BOOL, BOOL_ADD_EMAIL_PREVENT_DUPLICATES, FALSE },
{ "sort_field", OT_STR, STR_SORT_FIELD, UL "nick" },
+ { "show_cursor", OT_BOOL, BOOL_SHOW_CURSOR, FALSE },
{ NULL }
};
if(str_opts[opt])
free(str_opts[opt]);
- str_opts[opt] = strdup(value);
+ str_opts[opt] = xstrdup(value);
}
int
find_token_start(buffer *b)
{
assert(b);
-
+
for(; ISSPACE(*b -> ptr); b -> ptr ++);
}
opt_set_set_option(char *var, char *p, struct option *opt)
{
int len;
-
+
strtrim(p);
len = strlen(p);
else
return "invalid value";
break;
+ default:
+ assert(0);
}
-
+
return NULL;
}
*p++ = 0;
else
return "invalid value assignment";
-
+
strtrim(b -> ptr);
for(i = 0;abook_vars[i].option; i++)
if(!strcmp(abook_vars[i].option, b -> ptr))
return opt_set_set_option(b -> ptr, p, &abook_vars[i]);
-
+
return "unknown option";
}
+#include "database.h" /* needed for change_custom_field_name */
+
+static char *
+opt_parse_customfield(buffer *b)
+{
+ char *p, num[5];
+ int n;
+ size_t len;
+
+ find_token_start(b);
+ p = b -> ptr;
+ find_token_end(b);
+
+ memset(num, 0, sizeof(num));
+
+ len = (b -> ptr - p);
+ strncpy(num, p, min(sizeof(num) - 1, len));
+ n = safe_atoi(num);
+
+ find_token_start(b);
+
+ if(change_custom_field_name(b->ptr, n) == -1)
+ return "invalid custom field number";
+
+ return NULL;
+}
static struct {
char *token;
char * (*func) (buffer *line);
} opt_parsers[] = {
{ "set", opt_parse_set },
+ { "customfield", opt_parse_customfield },
{ NULL }
};
char *err = NULL;
char *token;
buffer b;
-
+
assert(line && fn);
b.ptr = line;
return FALSE;
break;
}
-
+
fprintf(stderr, "%s: parse error at line %d: ", fn, n);
if(err)
fprintf(stderr, "%s\n", err);
char *line = NULL;
int n;
int err = 0;
-
+
if((in = fopen(filename, "r")) == NULL)
return -1;
-
+
for(n = 1;!feof(in); n++) {
line = getaline(in);
err += opt_parse_line(line, n, filename) ? 1:0;
}
- my_free(line);
+ free(line);
+ line = NULL;
}
free(line);