Ejemplo n.º 1
0
// Get gets a value from the keyfile. Must be used with a pointer to value.
//
func (kf *KeyFile) Get(group string, key string, val interface{}) error {
	switch ptr := val.(type) {
	case *[]bool:
		cast, e := kf.ListBool(group, key)
		*ptr = cast
		return e

	case *[]int:
		cast, e := kf.ListInt(group, key)
		*ptr = cast
		return e

	case *[]float64:
		cast, e := kf.ListFloat(group, key)
		*ptr = cast
		return e

	case *[]string:
		cast, e := kf.ListString(group, key)
		*ptr = cast
		return e
	}

	cGroup := (*C.gchar)(C.CString(group))
	defer C.g_free(C.gpointer(cGroup))
	cKey := (*C.gchar)(C.CString(key))
	defer C.g_free(C.gpointer(cKey))
	var cErr *C.GError

	switch ptr := val.(type) {
	case *bool:
		*ptr = goBool(C.g_key_file_get_boolean(kf.cKey, cGroup, cKey, &cErr))

	case *int:
		*ptr = int(C.g_key_file_get_integer(kf.cKey, cGroup, cKey, &cErr))

	case *float64:
		*ptr = float64(C.g_key_file_get_double(kf.cKey, cGroup, cKey, &cErr))

	case *string:
		cstr := C.g_key_file_get_string(kf.cKey, cGroup, cKey, &cErr)
		*ptr = C.GoString((*C.char)(cstr))
		C.g_free(C.gpointer(cstr))

	}
	return goError(cErr)
}
Ejemplo n.º 2
0
// GetOne returns a key value as interface.
//
// valid types are:
//   bool, int, float64, string, comment
//   listbool, listint, listfloat64, liststring,
//
func (kf *KeyFile) GetOne(group string, key string, typ string) (interface{}, error) {
	switch typ {
	case "listbool":
		return kf.ListBool(group, key)

	case "listint":
		return kf.ListInt(group, key)

	case "listfloat64":
		return kf.ListFloat(group, key)

	case "liststring":
		return kf.ListString(group, key)
	}

	cGroup := (*C.gchar)(C.CString(group))
	defer C.g_free(C.gpointer(cGroup))
	cKey := (*C.gchar)(C.CString(key))
	defer C.g_free(C.gpointer(cKey))
	var cErr *C.GError

	var c interface{}
	switch typ {
	case "bool":
		c = goBool(C.g_key_file_get_boolean(kf.cKey, cGroup, cKey, &cErr))

	case "int":
		c = int(C.g_key_file_get_integer(kf.cKey, cGroup, cKey, &cErr))

	case "float64":
		c = float64(C.g_key_file_get_double(kf.cKey, cGroup, cKey, &cErr))

	case "comment":
		cstr := C.g_key_file_get_comment(kf.cKey, cGroup, cKey, &cErr)
		c = C.GoString((*C.char)(cstr))
		C.g_free(C.gpointer(cstr))

	case "string":
		cstr := C.g_key_file_get_string(kf.cKey, cGroup, cKey, &cErr)
		c = C.GoString((*C.char)(cstr))
		C.g_free(C.gpointer(cstr))

	}
	return c, goError(cErr)
}