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

Re: [Xen-devel] [PATCH] libxl: add support for yajl 2.x



Roger Pau Monne writes ("[Xen-devel] [PATCH] libxl: add support for yajl 2.x"):
> This patch adds support for yajl versions 2.x, while retaining 1.x
> compatibility. This patch adds quite a lot of #ifdefs all over the
> json code, so I'm open to suggestions if there's a better way to
> handle this.

I have some suggestions.  The basic idea would be to try to put all of
the ifdefs in one place in libxl_json.h.

> +#ifdef HAVE_YAJL_V2
> +static int json_callback_number(void *opaque, const char *s, size_t len)
> +#else
>  static int json_callback_number(void *opaque, const char *s, unsigned int 
> len)
> +#endif

So how about:

  /* libxl_json.h */

  #ifdef HAVE_YAJL_V2
  typedef size_t libxl_yajl_length;
  ...
  #else
  typedef unsigned int libxl_yajl_length;
  ...
  #endif


  /* libxl_json.c */

  static int json_callback_number(void *opaque, const char *s,
                                  libxl_yajl_length len) {
     ...

> +#ifdef HAVE_YAJL_V2
> +        yajl_ctx.hand = yajl_alloc(&callbacks, NULL, &yajl_ctx);
> +#else
>          yajl_parser_config cfg = {
>              .allowComments = 1,
>              .checkUTF8 = 1,
>          };
>          yajl_ctx.hand = yajl_alloc(&callbacks, &cfg, NULL, &yajl_ctx);
> +#endif
...
>      status = yajl_parse(yajl_ctx.hand, (const unsigned char *)s, strlen(s));
>      if (status != yajl_status_ok)
>          goto out;
> +    

  /* libxl_json.h */

  #ifdef HAVE_YAJL_V2
  ...
  static inline int libxl_yajl_alloc(...) { return yajl_alloc .... }
  ...
  #else
  ...
  static inline int libxl_yajl_alloc(...) { [version with cfg] }
  #define yajl_complete_parse yajl_parse_complete
  ...
  #endif

etc.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.