From 81119479a70c877481271a1a58a7723ac596bc87 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Tue, 7 Jul 2009 04:50:15 -0600 Subject: use expand instead of expand_template for useragent. --- examples/config/uzbl/config | 4 +- tests/test-expand.c | 20 ++++---- uzbl.c | 109 +++++++++++++++++++++----------------------- uzbl.h | 20 ++------ 4 files changed, 68 insertions(+), 85 deletions(-) diff --git a/examples/config/uzbl/config b/examples/config/uzbl/config index a4a5f45..c431822 100644 --- a/examples/config/uzbl/config +++ b/examples/config/uzbl/config @@ -85,9 +85,9 @@ set always_insert_mode = 0 #set proxy_url = http://127.0.0.1:8118 #values 0-3 #set http_debug = 0 -#set useragent = uzbl (Webkit WEBKIT_MAJOR.WEBKIT_MINOR.WEBKIT_MICRO) +#set useragent = uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) # Example user agent containing everything: -set useragent = Uzbl (Webkit WEBKIT_MAJOR.WEBKIT_MINOR.WEBKIT_MICRO) (SYSNAME NODENAME KERNREL KERNVER ARCH_SYSTEM [ARCH_UZBL]) (Commit COMMIT) +set useragent = Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) (@SYSNAME @NODENAME @KERNREL @KERNVER @ARCH_SYSTEM [@ARCH_UZBL]) (Commit @COMMIT) #set max_conns = 0 #set max_conns_host = 0 diff --git a/tests/test-expand.c b/tests/test-expand.c index d9fb6e9..c0eae41 100644 --- a/tests/test-expand.c +++ b/tests/test-expand.c @@ -27,6 +27,7 @@ extern Uzbl uzbl; +extern gchar* expand(char*, guint); extern gchar* expand_template(const char*, gboolean); extern void make_var_to_name_hash(void); @@ -106,16 +107,13 @@ test_WEBKIT_VERSION (void) { g_string_append(expected, " "); g_string_append(expected, itos(WEBKIT_MICRO_VERSION)); - g_assert_cmpstr(expand_template("WEBKIT_MAJOR WEBKIT_MINOR WEBKIT_MICRO", FALSE), ==, g_string_free(expected, FALSE)); + g_assert_cmpstr(expand("@WEBKIT_MAJOR @WEBKIT_MINOR @WEBKIT_MICRO", 0), ==, g_string_free(expected, FALSE)); } void test_UNAMEINFO (void) { GString* expected = g_string_new(""); - if(uname(&uzbl.state.unameinfo) == -1) - g_printerr("Can't retrieve unameinfo. This test might fail.\n"); - g_string_append(expected, uzbl.state.unameinfo.sysname); g_string_append(expected, " "); g_string_append(expected, uzbl.state.unameinfo.nodename); @@ -126,17 +124,17 @@ test_UNAMEINFO (void) { g_string_append(expected, " "); g_string_append(expected, uzbl.state.unameinfo.machine); - g_assert_cmpstr(expand_template("SYSNAME NODENAME KERNREL KERNVER ARCH_SYSTEM", FALSE), ==, g_string_free(expected, FALSE)); + g_assert_cmpstr(expand("@SYSNAME @NODENAME @KERNREL @KERNVER @ARCH_SYSTEM", 0), ==, g_string_free(expected, FALSE)); } void test_ARCH_UZBL (void) { - g_assert_cmpstr(expand_template("ARCH_UZBL", FALSE), ==, ARCH); + g_assert_cmpstr(expand("@ARCH_UZBL", 0), ==, ARCH); } void test_COMMIT (void) { - g_assert_cmpstr(expand_template("COMMIT", FALSE), ==, COMMIT); + g_assert_cmpstr(expand("@COMMIT", 0), ==, COMMIT); } void @@ -149,7 +147,7 @@ test_cmd_useragent_simple (void) { g_string_append(expected, itos(WEBKIT_MICRO_VERSION)); g_string_append(expected, ")"); - set_var_value("useragent", "Uzbl (Webkit WEBKIT_MAJOR.WEBKIT_MINOR.WEBKIT_MICRO)"); + set_var_value("useragent", "Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO)"); g_assert_cmpstr(uzbl.net.useragent, ==, g_string_free(expected, FALSE)); } @@ -178,7 +176,7 @@ test_cmd_useragent_full (void) { g_string_append(expected, COMMIT); g_string_append(expected, ")"); - set_var_value("useragent", "Uzbl (Webkit WEBKIT_MAJOR.WEBKIT_MINOR.WEBKIT_MICRO) (SYSNAME NODENAME KERNREL KERNVER ARCH_SYSTEM [ARCH_UZBL]) (Commit COMMIT)"); + set_var_value("useragent", "Uzbl (Webkit @WEBKIT_MAJOR.@WEBKIT_MINOR.@WEBKIT_MICRO) (@SYSNAME @NODENAME @KERNREL @KERNVER @ARCH_SYSTEM [@ARCH_UZBL]) (Commit @COMMIT)"); g_assert_cmpstr(uzbl.net.useragent, ==, g_string_free(expected, FALSE)); } @@ -210,6 +208,10 @@ main (int argc, char *argv[]) { g_thread_init (NULL); uzbl.net.soup_session = webkit_get_default_session(); + + if(uname(&uzbl.state.unameinfo) == -1) + g_printerr("Can't retrieve unameinfo. This test might fail.\n"); + setup_scanner(); make_var_to_name_hash(); diff --git a/uzbl.c b/uzbl.c index 1d2a6c9..3c89bb2 100644 --- a/uzbl.c +++ b/uzbl.c @@ -156,6 +156,30 @@ const struct { { NULL, {.ptr = NULL, .type = TYPE_INT, .dump = 0, .func = NULL}} }, *n2v_p = var_name_to_ptr; +const struct { + char *name; + struct { + void *ptr; + int type; + } cp; +} const_name_to_ptr[] = { + { "WEBKIT_MAJOR", {(void*)WEBKIT_MAJOR_VERSION, TYPE_INT}}, + { "WEBKIT_MINOR", {(void*)WEBKIT_MINOR_VERSION, TYPE_INT}}, + { "WEBKIT_MICRO", {(void*)WEBKIT_MICRO_VERSION, TYPE_INT}}, + { "SYSNAME", {&(uzbl.state.unameinfo.sysname), TYPE_STR}}, + { "NODENAME", {&(uzbl.state.unameinfo.nodename), TYPE_STR}}, + { "KERNREL", {&(uzbl.state.unameinfo.release), TYPE_STR}}, + { "KERNVER", {&(uzbl.state.unameinfo.version), TYPE_STR}}, + { "ARCH_SYSTEM", {&(uzbl.state.unameinfo.machine), TYPE_STR}}, + { "ARCH_UZBL", {&(ARCH), TYPE_STR}}, +#ifdef _GNU_SOURCE + { "DOMAINNAME", {&(uzbl.state.unameinfo.domainname), TYPE_STR}}, +#endif + { "COMMIT", {&(COMMIT), TYPE_STR}}, + + { NULL, {NULL, TYPE_INT}} +}, *n2c_p = const_name_to_ptr; + const struct { char *key; guint mask; @@ -180,7 +204,8 @@ const struct { }; -/* construct a hash from the var_name_to_ptr array for quick access */ +/* construct a hash from the var_name_to_ptr and the const_name_to_ptr array + * for quick access */ void make_var_to_name_hash() { uzbl.comm.proto_var = g_hash_table_new(g_str_hash, g_str_equal); @@ -188,6 +213,12 @@ make_var_to_name_hash() { g_hash_table_insert(uzbl.comm.proto_var, n2v_p->name, (gpointer) &n2v_p->cp); n2v_p++; } + + uzbl.comm.proto_const = g_hash_table_new(g_str_hash, g_str_equal); + while(n2c_p->name) { + g_hash_table_insert(uzbl.comm.proto_const, n2c_p->name, (gpointer) &n2c_p->cp); + n2c_p++; + } } /* --- UTILITY FUNCTIONS --- */ @@ -212,7 +243,7 @@ return EXP_ERR; * recurse == 1: don't expand '@(command)@' * recurse == 2: don't expand '@@' */ -static gchar * +gchar * expand(char *s, guint recurse) { uzbl_cmdprop *c; guint etype; @@ -276,17 +307,25 @@ expand(char *s, guint recurse) { break; } - if(etype == EXP_SIMPLE_VAR || + if(etype == EXP_SIMPLE_VAR || etype == EXP_BRACED_VAR) { - if( (c = g_hash_table_lookup(uzbl.comm.proto_var, ret)) ) { - if(c->type == TYPE_STR) - g_string_append(buf, (gchar *)*c->ptr); - else if(c->type == TYPE_INT) { - char *b = itos((int)*c->ptr); - g_string_append(buf, b); - g_free(b); - } + void *ptr; + + if('A' <= ret[0] && 'Z' >= ret[0] && + (c = g_hash_table_lookup(uzbl.comm.proto_const, ret))) { + ptr = c->ptr; + } else if( (c = g_hash_table_lookup(uzbl.comm.proto_var, ret)) ) { + ptr = *c->ptr; + } + + if(c && c->type == TYPE_STR) { + g_string_append(buf, (gchar *)ptr); + } else if(c && c->type == TYPE_INT) { + char *b = itos((uintptr_t)ptr); + g_string_append(buf, b); + g_free(b); } + if(etype == EXP_SIMPLE_VAR) s = vend; else @@ -1278,47 +1317,6 @@ expand_template(const char *template, gboolean escape_markup) { uzbl.gui.sbar.msg?uzbl.gui.sbar.msg:""); break; /* useragent syms */ - case SYM_WK_MAJ: - buf = itos(WEBKIT_MAJOR_VERSION); - g_string_append(ret, buf); - g_free(buf); - break; - case SYM_WK_MIN: - buf = itos(WEBKIT_MINOR_VERSION); - g_string_append(ret, buf); - g_free(buf); - break; - case SYM_WK_MIC: - buf = itos(WEBKIT_MICRO_VERSION); - g_string_append(ret, buf); - g_free(buf); - break; - case SYM_SYSNAME: - g_string_append(ret, uzbl.state.unameinfo.sysname); - break; - case SYM_NODENAME: - g_string_append(ret, uzbl.state.unameinfo.nodename); - break; - case SYM_KERNREL: - g_string_append(ret, uzbl.state.unameinfo.release); - break; - case SYM_KERNVER: - g_string_append(ret, uzbl.state.unameinfo.version); - break; - case SYM_ARCHSYS: - g_string_append(ret, uzbl.state.unameinfo.machine); - break; - case SYM_ARCHUZBL: - g_string_append(ret, ARCH); - break; -#ifdef _GNU_SOURCE - case SYM_DOMAINNAME: - g_string_append(ret, uzbl.state.unameinfo.domainname); - break; -#endif - case SYM_COMMIT: - g_string_append(ret, COMMIT); - break; default: break; } @@ -1764,11 +1762,8 @@ cmd_useragent() { g_free (uzbl.net.useragent); uzbl.net.useragent = NULL; } else { - gchar *ua = expand_template(uzbl.net.useragent, FALSE); - if (ua) - g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT, ua, NULL); - g_free(uzbl.net.useragent); - uzbl.net.useragent = ua; + g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT, + uzbl.net.useragent, NULL); } } diff --git a/uzbl.h b/uzbl.h index daed44f..e9134fc 100644 --- a/uzbl.h +++ b/uzbl.h @@ -17,12 +17,6 @@ enum { SYM_LOADPRGS, SYM_LOADPRGSBAR, SYM_KEYCMD, SYM_MODE, SYM_MSG, SYM_SELECTED_URI, - /* useragent symbols */ - SYM_WK_MAJ, SYM_WK_MIN, SYM_WK_MIC, - SYM_SYSNAME, SYM_NODENAME, - SYM_KERNREL, SYM_KERNVER, - SYM_ARCHSYS, SYM_ARCHUZBL, - SYM_DOMAINNAME, SYM_COMMIT }; const struct { @@ -39,17 +33,6 @@ const struct { {"LOAD_PROGRESS", SYM_LOADPRGS}, {"LOAD_PROGRESSBAR", SYM_LOADPRGSBAR}, - {"WEBKIT_MAJOR", SYM_WK_MAJ}, - {"WEBKIT_MINOR", SYM_WK_MIN}, - {"WEBKIT_MICRO", SYM_WK_MIC}, - {"SYSNAME", SYM_SYSNAME}, - {"NODENAME", SYM_NODENAME}, - {"KERNREL", SYM_KERNREL}, - {"KERNVER", SYM_KERNVER}, - {"ARCH_SYSTEM", SYM_ARCHSYS}, - {"ARCH_UZBL", SYM_ARCHUZBL}, - {"DOMAINNAME", SYM_DOMAINNAME}, - {"COMMIT", SYM_COMMIT}, {NULL, 0} }, *symp = symbols; @@ -93,6 +76,9 @@ typedef struct { gchar *socket_path; /* stores (key)"variable name" -> (value)"pointer to this var*/ GHashTable *proto_var; + /* stores (key)"CONSTANT NAME" -> (value)"pointer to this var*/ + GHashTable *proto_const; + gchar *sync_stdout; } Communication; -- cgit v1.2.3