[Vala] How to properly define struct in manually written VAPI?



Hello,

I need to write VAPI for jansson JSON library. I have already started (
https://github.com/akheron/jansson/pull/273) and generally speaking it
works fine but I have an issue with covering one struct.

In C code there's the following struct:


#define JSON_ERROR_TEXT_LENGTH    160
#define JSON_ERROR_SOURCE_LENGTH   80

typedef struct {
    int line;
    int column;
    int position;
    char source[JSON_ERROR_SOURCE_LENGTH];
    char text[JSON_ERROR_TEXT_LENGTH];
} json_error_t;


it is an output parameter to function that should have the following syntax
in Vala:

loads(string input, LoadFlags flags, out Error error)

I struggle to properly define it in VAPI. When I define it like this:

  [CCode (cname = "json_error_t",  has_type_id = false)]
  public struct Error {
    public string text;
    public string source;
    public int line;
    public int column;
    public size_t position;
  }

it complains about missing copy function during C compilation phase

when I add

  [CCode (cname = "json_error_t", has_copy_function = false, has_type_id =
false)]
  public struct Error {
    public string text;
    public string source;
    public int line;
    public int column;
    public size_t position;
  }

it then throws

api/auth/oauth2.c:939:2: error: array type 'char [160]' is not assignable
        _g_free0 ((*dest).text);
        ^         ~~~~~~~~~~~~
api/auth/oauth2.c:51:28: note: expanded from macro '_g_free0'
api/auth/oauth2.c:940:15: error: array type 'char [160]' is not assignable
        (*dest).text = _tmp1_;
        ~~~~~~~~~~~~ ^
api/auth/oauth2.c:943:2: error: array type 'char [80]' is not assignable
        _g_free0 ((*dest).source);
        ^         ~~~~~~~~~~~~~~


How to define it properly? Underlying API does not provide any destroy/copy
functions.

I also tried to convert it to the compact class but then Vala Compiler
creates pointer-to-pointer for underlying C code for the parameter which is
improper.

Thanks,

Marcin


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]