void env_universal_set( const wcstring &name, const wcstring &value, int exportv ) { message_t *msg; if( !init ) return; debug( 3, L"env_universal_set( \"%ls\", \"%ls\" )", name.c_str(), value.c_str() ); if( is_dead() ) { env_universal_common_set( name.c_str(), value.c_str(), exportv ); } else { msg = create_message( exportv?SET_EXPORT:SET, name.c_str(), value.c_str()); if( !msg ) { debug( 1, L"Could not create universal variable message" ); return; } msg->count=1; env_universal_server.unsent->push(msg); env_universal_barrier(); } }
void env_universal_set(const wcstring &name, const wcstring &value, bool exportv) { if (!s_env_univeral_inited) return; debug(3, L"env_universal_set( \"%ls\", \"%ls\" )", name.c_str(), value.c_str()); if (! synchronizes_via_fishd() || is_dead()) { env_universal_common_set(name.c_str(), value.c_str(), exportv); env_universal_barrier(); } else { message_t *msg = create_message(exportv?SET_EXPORT:SET, name.c_str(), value.c_str()); if (!msg) { debug(1, L"Could not create universal variable message"); return; } msg->count=1; env_universal_server.unsent.push(msg); env_universal_barrier(); } }
/** Parse message msg */ static void parse_message(wchar_t *msg, connection_t *src) { // debug( 3, L"parse_message( %ls );", msg ); if (msg[0] == L'#') return; if (match(msg, SET_STR) || match(msg, SET_EXPORT_STR)) { wchar_t *name, *tmp; int exportv = match(msg, SET_EXPORT_STR); name = msg+(exportv?wcslen(SET_EXPORT_STR):wcslen(SET_STR)); while (wcschr(L"\t ", *name)) name++; tmp = wcschr(name, L':'); if (tmp) { wchar_t *key; wchar_t *val; key = (wchar_t *)malloc(sizeof(wchar_t)*(tmp-name+1)); memcpy(key, name, sizeof(wchar_t)*(tmp-name)); key[tmp-name]=0; val = tmp+1; val = unescape(val, 0); if (key && val) env_universal_common_set(key, val, exportv); free(val); free(key); } else { debug(1, PARSE_ERR, msg); } } else if (match(msg, ERASE_STR)) { wchar_t *name, *tmp; name = msg+wcslen(ERASE_STR); while (wcschr(L"\t ", *name)) name++; tmp = name; while (iswalnum(*tmp) || *tmp == L'_') tmp++; *tmp = 0; if (!wcslen(name)) { debug(1, PARSE_ERR, msg); } env_universal_common_remove(name); if (callback) { callback(ERASE, name, 0); } } else if (match(msg, BARRIER_STR)) { message_t *msg = create_message(BARRIER_REPLY, 0, 0); msg->count = 1; src->unsent->push(msg); try_send_all(src); } else if (match(msg, BARRIER_REPLY_STR)) { if (callback) { callback(BARRIER_REPLY, 0, 0); } } else { debug(1, PARSE_ERR, msg); } }