X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fdecl_abi.c;h=794005b695d47e82fc7adec6561c3e150157a283;hp=3db51e6c8be2108853dbff41cd78406bd8b40977;hb=2559f07a178b681dc240e20153ff5abdff54cb34;hpb=9bcb1df0786a8193d65949c857baaba2f4296e84 diff --git a/src/types/decl_abi.c b/src/types/decl_abi.c index 3db51e6..794005b 100644 --- a/src/types/decl_abi.c +++ b/src/types/decl_abi.c @@ -26,10 +26,12 @@ #include "php_psi_stdinc.h" #include "data.h" -struct psi_decl_abi *psi_decl_abi_init(const char *convention) +struct psi_decl_abi *psi_decl_abi_init(zend_string *convention) { struct psi_decl_abi *abi = calloc(1, sizeof(*abi)); - abi->convention = strdup(convention); + abi->convention = convention + ? zend_string_copy(convention) + : zend_string_init_interned(ZEND_STRL("default"), 1); return abi; } @@ -39,24 +41,21 @@ void psi_decl_abi_free(struct psi_decl_abi **abi_ptr) struct psi_decl_abi *abi = *abi_ptr; *abi_ptr = NULL; - if (abi->token) { - free(abi->token); - } - free(abi->convention); + psi_token_free(&abi->token); + zend_string_release(abi->convention); free(abi); } } void psi_decl_abi_dump(int fd, struct psi_decl_abi *abi) { - dprintf(fd, "%s", abi->convention); + dprintf(fd, "%s", abi->convention->val); } static const char * const abi_ccs[] = { "default", /* \ */ "extern", /* > - all the same */ "cdecl", /* / */ - "mscdecl", "stdcall", "fastcall", }; @@ -66,7 +65,7 @@ bool psi_decl_abi_validate(struct psi_data *data, struct psi_decl_abi *abi) size_t i; for (i = 0; i < sizeof(abi_ccs) / sizeof(char *); ++i) { - if (strcasecmp(abi->convention, abi_ccs[i])) { + if (!strcasecmp(abi->convention->val, abi_ccs[i])) { return true; } }