rjhdby
08/07/2018, 8:15 AMrjhdby
08/07/2018, 8:15 AMheaders = library/base.h
---
static inline int foo(int arg) {
return FOO(arg);
}
My code.
Macro definition in external .h
file
#define INI_STR(name) zend_ini_string_ex((name), sizeof(name)-1, 0, NULL)
Definition in .def
file
static inline char* php_helper_ini_string(char* arg) {
return INI_STR(arg);
}
Using in .kt
fun getStringIni(name:String) = php_helper_ini_string(name.cstr)?.toKString()?:"WARRRRGGGGHHHHH"
In fact, this code always return NULL (It is default behavior of zend_ini_string_ex
for unknown argument.)
If I explict writing return INI_STR("somename");
in .def
, then result is correct.
What I doing wrong?msink
08/07/2018, 8:52 AMsizeof(char*) == 8
(on 64bit system) so you always use first 7 chars.
It should be something like this:
static inline char* php_helper_ini_string(char* name) {
return zend_ini_string_ex(name, strlen(name), 0, NULL);
}
rjhdby
08/07/2018, 9:03 AMmsink
08/07/2018, 9:10 AMmsink
08/07/2018, 12:07 PMnoStringConversion = php_helper_ini_string
msink
08/07/2018, 12:10 PMphp_helper_ini_string(immutableBinaryBlobOf('A'.toShort, 0).asCPointer(0))
msink
08/07/2018, 12:11 PMImmutableBinaryBlob
, not String
.svyatoslav.scherbina
08/07/2018, 1:07 PMIn fact, this code always return NULL (It is default behavior ofWhat do you mean by “unknown argument”?for unknown argument.)zend_ini_string_ex
msink
08/07/2018, 1:12 PMZEND_API char *zend_ini_string_ex(char *name, size_t name_length, int orig, zend_bool *exists)
{
zend_ini_entry *ini_entry;
ini_entry = zend_hash_str_find_ptr(EG(ini_directives), name, name_length);
if (ini_entry) {
if (exists) {
*exists = 1;
}
if (orig && ini_entry->modified) {
return ini_entry->orig_value ? ZSTR_VAL(ini_entry->orig_value) : NULL;
} else {
return ini_entry->value ? ZSTR_VAL(ini_entry->value) : NULL;
}
} else {
if (exists) {
*exists = 0;
}
return NULL;
}
}
rjhdby
08/07/2018, 1:13 PMsomename
exists in storage then this function returns it's value otherwise returns nullrjhdby
08/07/2018, 1:15 PMmsink
08/07/2018, 1:15 PMsizeof
to strlen
.rjhdby
08/07/2018, 1:17 PMstrlen
, but it's external library function and I can't change definition of macro 😞svyatoslav.scherbina
08/07/2018, 1:54 PMrjhdby
08/07/2018, 2:39 PMsvyatoslav.scherbina
08/07/2018, 3:37 PMAndrey Gromov
08/07/2018, 5:05 PMolonho
08/08/2018, 7:20 AM.def
file and use C macros from there?rjhdby
08/08/2018, 7:41 AM.kt
sources and autogenerate .def
, but...olonho
08/08/2018, 9:13 AM