]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/python/as.c
python: Do not use any GNU-style initialisers for structs
[people/ms/libloc.git] / src / python / as.c
index ca0af47ab1e6b6ac79662a26f97b66cc27f3e421..e3b716bc11fc71682ce4bf9980450e83f0b9f45d 100644 (file)
@@ -51,7 +51,7 @@ static int AS_init(ASObject* self, PyObject* args, PyObject* kwargs) {
                return -1;
 
        // Create the AS object
-       int r = loc_as_new(loc_ctx, NULL, &self->as, number);
+       int r = loc_as_new(loc_ctx, &self->as, number);
        if (r)
                return -1;
 
@@ -68,6 +68,16 @@ static PyObject* AS_repr(ASObject* self) {
        return PyUnicode_FromFormat("<AS %d>", number);
 }
 
+static PyObject* AS_str(ASObject* self) {
+       uint32_t number = loc_as_get_number(self->as);
+       const char* name = loc_as_get_name(self->as);
+
+       if (name)
+               return PyUnicode_FromFormat("AS%d (%s)", number, name);
+
+       return PyUnicode_FromFormat("AS%d", number);
+}
+
 static PyObject* AS_get_number(ASObject* self) {
        uint32_t number = loc_as_get_number(self->as);
 
@@ -80,6 +90,18 @@ static PyObject* AS_get_name(ASObject* self) {
        return PyUnicode_FromString(name);
 }
 
+static int AS_set_name(ASObject* self, PyObject* value) {
+       const char* name = PyUnicode_AsUTF8(value);
+
+       int r = loc_as_set_name(self->as, name);
+       if (r) {
+               PyErr_Format(PyExc_ValueError, "Could not set name: %s", name);
+               return r;
+       }
+
+       return 0;
+}
+
 static PyObject* AS_richcompare(ASObject* self, ASObject* other, int op) {
        int r = loc_as_cmp(self->as, other->as);
 
@@ -107,7 +129,7 @@ static struct PyGetSetDef AS_getsetters[] = {
        {
                "name",
                (getter)AS_get_name,
-               NULL,
+               (setter)AS_set_name,
                NULL,
                NULL,
        },
@@ -123,14 +145,15 @@ static struct PyGetSetDef AS_getsetters[] = {
 
 PyTypeObject ASType = {
        PyVarObject_HEAD_INIT(NULL, 0)
-       tp_name:                "location.AS",
-       tp_basicsize:           sizeof(ASObject),
-       tp_flags:               Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
-       tp_new:                 AS_new,
-       tp_dealloc:             (destructor)AS_dealloc,
-       tp_init:                (initproc)AS_init,
-       tp_doc:                 "AS object",
-       tp_getset:              AS_getsetters,
-       tp_repr:                (reprfunc)AS_repr,
-       tp_richcompare:         (richcmpfunc)AS_richcompare,
+       .tp_name =               "location.AS",
+       .tp_basicsize =          sizeof(ASObject),
+       .tp_flags =              Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
+       .tp_new =                AS_new,
+       .tp_dealloc =            (destructor)AS_dealloc,
+       .tp_init =               (initproc)AS_init,
+       .tp_doc =                "AS object",
+       .tp_getset =             AS_getsetters,
+       .tp_repr =               (reprfunc)AS_repr,
+       .tp_str =                (reprfunc)AS_str,
+       .tp_richcompare =        (richcmpfunc)AS_richcompare,
 };