/**********************************************************/ /* apimagic: cparser-based API normalization utility */ /* Copyright (C) 2015--2016 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.APIMAGIC. */ /**********************************************************/ #include #include #include #include #include #include #include "apimagic_driver_impl.h" static int output_atomic_typedef(int fdout, const struct amgc_entity * aentity) { int i; const char * reftype; reftype = get_atomic_kind_name(aentity->reftype->atomic.akind); if (amgc_dprintf(fdout,"typedef %s ",reftype) < 0) return -1; for (i=0; (i < aentity->ptrdepth); i++) if (amgc_dprintf(fdout,"*") < 0) return -1; if (amgc_dprintf( fdout," %s;\n", aentity->entity->base.symbol->string) < 0) return -1; return 0; } int amgc_output_typedef( const struct amgc_driver_ctx * dctx, const struct amgc_unit_ctx * uctx, const struct amgc_entity * aentity, const struct amgc_layout * layout) { int ret = 0; int fdout = amgc_driver_fdout(dctx); (void)uctx; switch (aentity->reftype->kind) { case TYPE_ATOMIC: break; default: return -1; } if (layout && layout->header) if (amgc_dprintf(fdout,layout->header) < 0) return -1; if (aentity->reftype->kind == TYPE_ATOMIC) ret = output_atomic_typedef(fdout,aentity); if (ret < 0) return ret; if (layout && layout->footer) if (amgc_dprintf(fdout,layout->footer) < 0) return -1; return 0; }