📄 monet_options.c
字号:
#line 88 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB/src/common/monet_options.mx"#include "monetdb_config.h"#include "monet_options.h"#include <stdio.h>#include <string.h>#include <ctype.h>#if HAVE_UNISTD_H#include <unistd.h>#endif#ifndef HAVE_GETOPT_LONG# include "getopt.c"# include "getopt1.c"#endif#if !HAVE_DECL_STRDUP#ifdef HAVE_STRDUPextern char *strdup(const char *);#else#define strdup(s) strcpy(malloc(strlen(s)+1),(s))#endif#endif#ifdef NATIVE_WIN32#define strdup _strdup#define getpid _getpid#endif/* these two are used of the set parameter passed into functions is NULL */static int default_setlen = 0;static opt *default_set = NULL;static intmo_default_set(opt **Set, int setlen){ if (*Set == NULL) { if (default_set == NULL) { default_setlen = mo_builtin_settings(&default_set); default_setlen = mo_system_config(&default_set, default_setlen); } *Set = default_set; setlen = default_setlen; } return setlen;}voidmo_print_options(opt *set, int setlen){ int i = 0; setlen = mo_default_set(&set, setlen); for (i = 0; i < setlen; i++) { if (set[i].kind == opt_builtin) { fprintf(stderr, "# builtin opt \t%s = %s\n", set[i].name, set[i].value); } } for (i = 0; i < setlen; i++) { if (set[i].kind == opt_config) { fprintf(stderr, "# config opt \t%s = %s\n", set[i].name, set[i].value); } } for (i = 0; i < setlen; i++) { if (set[i].kind == opt_cmdline) { fprintf(stderr, "# cmdline opt \t%s = %s\n", set[i].name, set[i].value); } }}char *mo_find_option(opt *set, int setlen, const char *name){ opt *o = NULL; int i; setlen = mo_default_set(&set, setlen); for (i = 0; i < setlen; i++) { if (strcmp(set[i].name, name) == 0) if (!o || o->kind < set[i].kind) o = set + i; } if (o) return o->value; return NULL;}char *mo_substitute(opt *set, int setlen, char *val){ char *q; size_t n = strlen(val) + 1; char *s = strdup(val); setlen = mo_default_set(&set, setlen); q = s; while ((q = strchr(q, '$')) != NULL) { if (strncmp(q, "${exec_prefix}", 14) == 0) { char *p = mo_find_option(set, setlen, "exec_prefix"); char *t; if (!p) return s; t = malloc((n = n - 14 + strlen(p))); *q = 0; snprintf(t, n, "%s%s%s", s, p, q + 14); free(s); q = t + (q-s); s = t; } else if (strncmp(q, "${prefix}", 9) == 0) { char *p = mo_find_option(set, setlen, "prefix"); char *t; if (!p) return s; t = malloc((n = n - 9 + strlen(p))); *q = 0; snprintf(t, n, "%s%s%s", s, p, q + 9); free(s); q = t + (q-s); s = t; } else q++; } return s;}static intmo_config_file(opt **Set, int setlen, char *file){ char buf[BUFSIZ]; FILE *fd = NULL; opt *set; if (Set == NULL) { if (default_set == NULL) { set = NULL; setlen = mo_default_set(&set, 0); } Set = &default_set; setlen = default_setlen; } set = *Set; fd = fopen(file, "r"); if (fd == NULL) { fprintf(stderr, "Could not open file %s\n", file); return setlen; } while (fgets(buf, BUFSIZ, fd) != NULL) { char *s, *t, *val; int quote; for (s = buf; *s && isspace((int) (*s)); s++) ; if (*s == '#') continue; /* commentary */ if (*s == 0) continue; /* empty line */ val = strchr(s, '='); if (val == NULL) { fprintf(stderr, "mo_config_file: syntax error in %s at %s\n", file, s); fclose(fd); exit(1); } *val = 0; for (t = s; *t && !isspace((int) (*t)); t++) ; *t = 0; /* skip any leading blanks in the value part */ for (val++; *val && isspace((int) (*val)); val++) ; /* search to unquoted # */ quote = 0; for (t = val; *t; t++) { if (*t == '"') quote = !quote; else if (!quote && *t == '#') break; } if (quote) { fprintf(stderr, "mo_config_file: wrong number of quotes in %s at %s\n", file, val); fclose(fd); exit(1); } /* remove trailing white space */ while (isspace((int) (t[-1]))) t--; *t++ = 0; /* treat value as empty if it consists only of white space */ if (t <= val) val = t - 1; set = (opt *) realloc(set, (setlen + 1) * sizeof(opt)); set[setlen].kind = opt_config; set[setlen].name = strdup(s); set[setlen].value = malloc((size_t) (t - val)); for (t = val, s = set[setlen].value; *t; t++) if (*t != '"') *s++ = *t; *s = 0; setlen++; } (void) fclose(fd); *Set = set; return setlen;}intmo_system_config(opt **Set, int setlen){ char *cfg; if (Set == NULL) { if (default_set == NULL) { opt *set = NULL; setlen = mo_default_set(&set, 0); } Set = &default_set; setlen = default_setlen; } cfg = mo_find_option(*Set, setlen, "config"); if (!cfg) return setlen; cfg = mo_substitute(*Set, setlen, cfg); setlen = mo_config_file(Set, setlen, cfg); free(cfg); return setlen;}intmo_builtin_settings(opt **Set){ int i = 0; opt *set; char buf[BUFSIZ]; if (Set == NULL) return 0;#define N_OPTIONS 28 /*MUST MATCH # OPTIONS BELOW */ set = malloc(sizeof(opt) * N_OPTIONS); if (set == NULL) return 0; set[i].kind = opt_builtin; set[i].name = strdup("gdk_arch"); snprintf(buf, BUFSIZ, "%dbit%s", (int) sizeof(char *) * 8, HOST); set[i].value = strdup(buf); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_version"); set[i].value = strdup(VERSION); i++; set[i].kind = opt_builtin; set[i].name = strdup("monet_pid"); snprintf(buf, BUFSIZ, "%d", (int) getpid()); set[i].value = strdup(buf); i++; set[i].kind = opt_builtin; set[i].name = strdup("prefix"); set[i].value = strdup(MONETDB_PREFIX); i++; set[i].kind = opt_builtin; set[i].name = strdup("exec_prefix"); set[i].value = strdup(MONETDB_EXEC_PREFIX); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_dbname"); set[i].value = strdup("tst"); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_dbfarm"); snprintf(buf, BUFSIZ, "%s%c%s", MONETDB_LOCALSTATEDIR, DIR_SEP, PACKAGE); set[i].value = strdup(buf); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_debug"); set[i].value = strdup("8"); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_mem_bigsize"); set[i].value = strdup("262144"); i++; /* * gdk_vm_minsize will be set/limited to * 1/8 of the physically available amount of main-memory * during start-up in src/tools/Mserver.mx */ set[i].kind = opt_builtin; set[i].name = strdup("gdk_vm_minsize"); set[i].value = strdup("137438953472"); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_alloc_map"); set[i].value = strdup("yes"); i++; set[i].kind = opt_builtin; set[i].name = strdup("gdk_mem_pagebits");#ifdef WIN32 set[i].value = strdup("16");#else set[i].value = strdup("14");#endif i++; set[i].kind = opt_builtin; set[i].name = strdup("monet_admin"); set[i].value = strdup("adm"); i++; set[i].kind = opt_builtin; set[i].name = strdup("monet_prompt"); set[i].value = strdup(">"); i++; set[i].kind = opt_builtin; set[i].name = strdup("monet_welcome"); set[i].value = strdup("yes"); i++; set[i].kind = opt_builtin; set[i].name = strdup("monet_mod_path"); /* on most platforms, we only need libdir/PACKAGE, but with * MinGW, we also need libdir/bin */ snprintf(buf, BUFSIZ, "%s%c%s%c%s%cbin", MONETDB_LIBDIR, DIR_SEP, PACKAGE, PATH_SEP, MONETDB_LIBDIR, DIR_SEP); set[i].value = strdup(buf); i++; set[i].kind = opt_builtin; set[i].name = strdup("monet_daemon"); set[i].value = strdup("yes"); i++; set[i].kind = opt_builtin; set[i].name = strdup("host"); set[i].value = strdup("localhost"); i++; set[i].kind = opt_builtin; set[i].name = strdup("mapi_port"); set[i].value = strdup("50000"); i++; set[i].kind = opt_builtin; set[i].name = strdup("mapi_noheaders"); set[i].value = strdup("no"); i++; set[i].kind = opt_builtin; set[i].name = strdup("mapi_debug"); set[i].value = strdup("0"); i++; set[i].kind = opt_builtin; set[i].name = strdup("mapi_clients"); set[i].value = strdup("2"); i++; set[i].kind = opt_builtin; set[i].name = strdup("sql_debug"); set[i].value = strdup("0"); i++; set[i].kind = opt_builtin; set[i].name = strdup("sql_logdir"); snprintf(buf, BUFSIZ, "%s%c%s%csql_logs", MONETDB_LOCALSTATEDIR, DIR_SEP, PACKAGE, DIR_SEP); set[i].value = strdup(buf); i++; set[i].kind = opt_builtin; set[i].name = strdup("xquery_logdir"); snprintf(buf, BUFSIZ, "%s%c%s%cxquery_logs", MONETDB_LOCALSTATEDIR, DIR_SEP, PACKAGE, DIR_SEP); set[i].value = strdup(buf); i++; set[i].kind = opt_builtin; set[i].name = strdup("standoff_ns"); set[i].value = strdup("http://monetdb.cwi.nl/standoff"); i++; set[i].kind = opt_builtin; set[i].name = strdup("standoff_start"); set[i].value = strdup("start"); i++; set[i].kind = opt_builtin; set[i].name = strdup("standoff_end"); set[i].value = strdup("end"); i++; assert(i == N_OPTIONS); *Set = set; return i;}intmo_add_option(opt **Set, int setlen, opt_kind kind, const char *name, const char *value){ opt *set; if (Set == NULL) { if (default_set == NULL) { set = NULL; setlen = mo_default_set(&set, 0); } Set = &default_set; setlen = default_setlen; } set = (opt *) realloc(*Set, (setlen + 1) * sizeof(opt)); set[setlen].kind = kind; set[setlen].name = strdup(name); set[setlen].value = strdup(value); *Set = set; return setlen + 1;}voidmo_free_options(opt *set, int setlen){ int i; if (set == NULL) { set = default_set; setlen = default_setlen; default_set = NULL; default_setlen = 0; } for (i = 0; i < setlen; i++) { if (set[i].name) free(set[i].name); if (set[i].value) free(set[i].value); } free(set);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -