Пример #1
0
PyObject *ekg_config_set(ekg_configObj * self, PyObject * key, PyObject * value)
{
	char *name = PyString_AsString(key);
	variable_t *v;

	debug("[python] Setting '%s' config option to '%s'\n", name,
		PyString_AsString(value));

	v = variable_find(name);

	if (!v) {
		PyErr_SetString(PyExc_LookupError, "unknown variable");
		return NULL;
    }

    if (v->type == VAR_INT || v->type == VAR_BOOL || v->type == VAR_MAP) {
		if (!PyInt_Check(value)) {
			PyErr_SetString(PyExc_TypeError, "invalid type");
			return NULL;
		}
		variable_set(name, ekg_itoa(PyInt_AsLong(value)));
	} else {
		if (!PyString_Check(value)) {
			PyErr_SetString(PyExc_TypeError, "invalid type");
			return NULL;
		}
		variable_set(name, PyString_AsString(value));
    }
    Py_INCREF(Py_None);
    return Py_None;
}
Пример #2
0
struct variable* variable_copy(struct context *context, const struct variable* v)
{
//    DEBUGPRINT("variable_copy");
    vm_null_check(context, v);
    struct variable *u = variable_new(context, (enum VarType)v->type);
    variable_set(context, u, v);
    return u;
}
Пример #3
0
int
dmenuSetCountryVariable(dialogMenuItem *tmp)
{
    variable_set((char *)tmp->data, FALSE);
#ifdef WITH_SYSCONS
    /* Don't prompt the user for a keymap if they're using the default locale. */
    if (!strcmp(variable_get(VAR_COUNTRY), DEFAULT_COUNTRY))
	return DITEM_SUCCESS;

    return keymapMenuSelect(tmp);
#else
    return DITEM_SUCCESS;
#endif
}
Пример #4
0
static int ekg_config_setattr(PyObject *o, char *name, PyObject *value)
{
	struct variable *v = variable_find(name);

	if (!v) {
		PyErr_SetString(PyExc_LookupError, "unknown variable");
		return -1;
	}

        if (value == NULL) {
		PyErr_SetString(PyExc_TypeError, "can't delete config variables");
		return -1;
        }

	if (v->type == VAR_INT || v->type == VAR_BOOL || v->type == VAR_MAP) {
		if (!PyInt_Check(value)) {
			PyErr_SetString(PyExc_TypeError, "invalid type");
			return -1;
		}
		if (variable_set(name, itoa(PyInt_AsLong(value)), 0)) {
			PyErr_SetString(PyExc_ValueError, "invalid value");
			return -1;
                }
	} else {
		if (!PyString_Check(value)) {
			PyErr_SetString(PyExc_TypeError, "invalid type");
			return -1;
		}
		if (variable_set(name, PyString_AsString(value), 0)) {
			PyErr_SetString(PyExc_ValueError, "invalid value");
			return -1;
                }
	}

	return 0;
}
Пример #5
0
int
dmenuSetVariables(dialogMenuItem *tmp)
{
    char *cp1, *cp2;
    char *copy = strdup((char *)tmp->data);

    for (cp1 = copy; cp1 != NULL;) {
	cp2 = index(cp1, ',');
	if (cp2 != NULL) *cp2++ = '\0';
	variable_set(cp1, *cp1 != '_');
	cp1 = cp2;
    }
    free(copy);
    return DITEM_SUCCESS;
}
Пример #6
0
int
dmenuSetKmapVariable(dialogMenuItem *tmp)
{
    char *lang;
    int err;

    variable_set((char *)tmp->data, TRUE);
    lang = variable_get(VAR_KEYMAP);
    if (lang != NULL)
    {
	err = loadKeymap(lang);
	if (err == -1)
	    msgConfirm("No appropriate keyboard map found, sorry.");
	else if (err == -2)
	    msgConfirm("Error installing keyboard map, errno = %d.", errno);
    }
    return DITEM_SUCCESS;
}
Пример #7
0
/* For a given string, call it or spit out an undefined command diagnostic */
int
dispatchCommand(char *str)
{
    int i;
    char *cp;

    if (!str || !*str) {
	msgConfirm("Null or zero-length string passed to dispatchCommand");
	return DITEM_FAILURE;
    }
    /* If it's got a newline, trim it */
    if ((cp = index(str, '\n')) != NULL)
	*cp = '\0';

    /* If it's got a `=' sign in there, assume it's a variable setting */
    if (index(str, '=')) {
	if (isDebug())
	    msgDebug("dispatch: setting variable `%s'\n", str);
	variable_set(str, 0);
	i = DITEM_SUCCESS;
    }
    else {
	/* A command might be a pathname if it's encoded in argv[0], which
	   we also support */
	if ((cp = rindex(str, '/')) != NULL)
	    str = cp + 1;
	if (isDebug())
	    msgDebug("dispatch: calling resword `%s'\n", str);
	if (!call_possible_resword(str, NULL, &i)) {
	    msgNotify("Warning: No such command ``%s''", str);
	    i = DITEM_FAILURE;
	}
	/*
	 * Allow a user to prefix a command with "noError" to cause
	 * us to ignore any errors for that one command.
	 */
	if (i != DITEM_SUCCESS && variable_get(VAR_NO_ERROR))
	    i = DITEM_SUCCESS;
	variable_unset(VAR_NO_ERROR);
    }
    return i;
}
Пример #8
0
static int parse_buffer(const char *str, char **entry, char **value)
{
        int ret;
        size_t len;
        char *val;
        const char *ptr;

        *value = *entry = NULL;
        if ( ! *str )
                return -1;

        ptr = strchr(str, '=');
        len = (ptr) ? (size_t) (ptr - str) : strlen(str);

        ret = strip_value(entry, str, len);
        if ( ret < 0 )
                return ret;

        if ( ! ptr )
                return 0;

        ret = strip_value(&val, ptr + 1, strlen(ptr + 1));
        if ( ret < 0 )
                return ret;

        if ( val )
                ret = value_resolve_variable(val, value);

        free_val(&val);
        if ( ret < 0 )
                return ret;

        if ( **entry == '$' )
                ret = variable_set((*entry) + 1, *value);

        return ret;
}
Пример #9
0
int
dmenuSetVariable(dialogMenuItem *tmp)
{
    variable_set((char *)tmp->data, *((char *)tmp->data) != '_');
    return DITEM_SUCCESS;
}
Пример #10
0
/*
 * variable_undigest()
 *
 * rozszyfrowuje skrót zmiennych z listy kontaktów i ustawia wszystko,
 * co trzeba.
 *
 *  - digest - ci±g znaków.
 *
 * 0/-1
 */
int variable_undigest(const char *digest)
{
	const char *p = digest;

	if (!digest)
		return -1;

	while (*p) {
		struct variable *v;
		list_t l;

		for (v = NULL, l = variables; l; l = l->next) {
			struct variable *w = l->data;

			if (!strncmp(p, w->short_name, 2)) {
				v = w;
				break;
			}
		}

		if (!v) {
			gg_debug(GG_DEBUG_MISC, "// unknown short \"%c%c\"\n", p[0], p[1]);
			return -1;
		}

		p += 2;

		if (v->type == VAR_INT || v->type == VAR_BOOL || v->type == VAR_MAP) {
			char *end;
			int val;
			
			val = strtol(p, &end, 10);

			variable_set(v->name, itoa(val), 0);

			p = end;
		}

		if (v->type == VAR_STR) {
			char *val = NULL;
			
			if (*p == '-') {
				val = NULL;
				p++;
			} else {
				const char *q;
				char *tmp;
				int len = 0, base64 = 0;

				if (*p == '+') {
					base64 = 1;
					p++;
				}
				
				for (q = p; *q && *q != ':'; q++, len++)
					;

				tmp = xstrmid(p, 0, len);

				gg_debug(GG_DEBUG_MISC, "// got string variable \"%s\"\n", tmp);

				if (base64) {
					val = base64_decode(tmp);
					xfree(tmp);
				} else
					val = tmp;

				p += len + 1;
			}

			gg_debug(GG_DEBUG_MISC, "// setting variable %s = \"%s\"\n", v->name, ((val) ? val : "(null)"));

			variable_set(v->name, val, 0);
			
			xfree(val);
		}
	}

	return 0;
}