start php binding
This commit is contained in:
parent
dbb1609933
commit
79fda5c0bd
|
@ -0,0 +1,15 @@
|
||||||
|
PHP_ARG_ENABLE(sigar, whether to enable Sigar support,
|
||||||
|
[ --enable-sigar Enable Sigar support])
|
||||||
|
|
||||||
|
if test "$PHP_SIGAR" = "yes"; then
|
||||||
|
AC_DEFINE(HAVE_SIGAR, 1, [Whether you have Sigar])
|
||||||
|
dnl hardwired for the moment
|
||||||
|
SIGAR_LIBNAME=sigar-universal-macosx
|
||||||
|
SIGAR_INSTALLDIR=../java/sigar-bin
|
||||||
|
SIGAR_LIB_DIR=$SIGAR_INSTALLDIR/lib
|
||||||
|
SIGAR_INC_DIR=$SIGAR_INSTALLDIR/include
|
||||||
|
PHP_ADD_LIBRARY_WITH_PATH($SIGAR_LIBNAME, $SIGAR_LIB_DIR, SIGAR_SHARED_LIBADD)
|
||||||
|
PHP_ADD_INCLUDE($SIGAR_INC_DIR)
|
||||||
|
PHP_NEW_EXTENSION(sigar, php_sigar.c, $ext_shared)
|
||||||
|
PHP_SUBST(SIGAR_SHARED_LIBADD)
|
||||||
|
fi
|
|
@ -0,0 +1,165 @@
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "php.h"
|
||||||
|
#include "php_sigar.h"
|
||||||
|
#include "sigar.h"
|
||||||
|
#include "sigar_fileinfo.h"
|
||||||
|
#include "sigar_format.h"
|
||||||
|
|
||||||
|
#define PHP_SIGAR_RETURN_STRING(s) \
|
||||||
|
RETURN_STRING(s, 1)
|
||||||
|
|
||||||
|
static char *php_sigar_net_address_to_string(sigar_net_address_t address)
|
||||||
|
{
|
||||||
|
char addr_str[SIGAR_INET6_ADDRSTRLEN];
|
||||||
|
sigar_net_address_to_string(NULL, &address, addr_str);
|
||||||
|
return estrdup(addr_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PHP_SIGAR_RETURN_NETADDR(a) \
|
||||||
|
RETURN_STRING(php_sigar_net_address_to_string(a), 0)
|
||||||
|
|
||||||
|
#define zSIGAR_PARSE_PID \
|
||||||
|
zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &pid)
|
||||||
|
|
||||||
|
#define zSIGAR_PARSE_NAME \
|
||||||
|
zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len)
|
||||||
|
|
||||||
|
#define zSIGAR_OBJ \
|
||||||
|
(((php_sigar_obj_t *)zend_object_store_get_object(getThis() TSRMLS_CC))->ptr)
|
||||||
|
|
||||||
|
#define zSIGAR \
|
||||||
|
sigar_t *sigar = (sigar_t *)zSIGAR_OBJ
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
zend_object std;
|
||||||
|
void *ptr;
|
||||||
|
} php_sigar_obj_t;
|
||||||
|
|
||||||
|
static void php_sigar_obj_dtor(void *object TSRMLS_DC)
|
||||||
|
{
|
||||||
|
php_sigar_obj_t *intern = (php_sigar_obj_t *)object;
|
||||||
|
|
||||||
|
zend_object_std_dtor(&intern->std TSRMLS_CC);
|
||||||
|
if (intern->ptr) {
|
||||||
|
efree(intern->ptr);
|
||||||
|
}
|
||||||
|
efree(intern);
|
||||||
|
}
|
||||||
|
|
||||||
|
static zend_object_value php_sigar_ctor(zend_objects_free_object_storage_t dtor,
|
||||||
|
zend_object_handlers *handlers,
|
||||||
|
php_sigar_obj_t **obj,
|
||||||
|
zend_class_entry *class_type)
|
||||||
|
{
|
||||||
|
php_sigar_obj_t *intern = emalloc(sizeof(*intern));
|
||||||
|
zend_object_value retval;
|
||||||
|
|
||||||
|
memset(intern, 0, sizeof(*intern));
|
||||||
|
if (obj) {
|
||||||
|
*obj = intern;
|
||||||
|
}
|
||||||
|
|
||||||
|
zend_object_std_init(&intern->std, class_type TSRMLS_CC);
|
||||||
|
|
||||||
|
retval.handle = zend_objects_store_put(intern,
|
||||||
|
NULL,
|
||||||
|
dtor,
|
||||||
|
NULL TSRMLS_CC);
|
||||||
|
|
||||||
|
retval.handlers = handlers;
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void php_sigar_close(void *object TSRMLS_DC)
|
||||||
|
{
|
||||||
|
php_sigar_obj_t *intern = (php_sigar_obj_t *)object;
|
||||||
|
|
||||||
|
if (!intern) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intern->ptr) {
|
||||||
|
sigar_close((sigar_t *)intern->ptr);
|
||||||
|
intern->ptr = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
php_sigar_obj_dtor(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static zend_object_handlers php_sigar_object_handlers;
|
||||||
|
|
||||||
|
static zend_object_value php_sigar_new(zend_class_entry *class_type TSRMLS_DC)
|
||||||
|
{
|
||||||
|
php_sigar_obj_t *intern;
|
||||||
|
|
||||||
|
zend_object_value retval =
|
||||||
|
php_sigar_ctor(php_sigar_close,
|
||||||
|
&php_sigar_object_handlers,
|
||||||
|
&intern,
|
||||||
|
class_type);
|
||||||
|
|
||||||
|
sigar_open(&((sigar_t *)intern->ptr));
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static php_sigar_obj_t *php_sigar_obj_new(char *name, zval *object TSRMLS_DC)
|
||||||
|
{
|
||||||
|
zend_class_entry **ce;
|
||||||
|
zend_lookup_class(name, strlen(name), &ce TSRMLS_CC);
|
||||||
|
Z_TYPE_P(object) = IS_OBJECT;
|
||||||
|
object_init_ex(object, *ce);
|
||||||
|
object->refcount = 1;
|
||||||
|
object->is_ref = 0;
|
||||||
|
return (php_sigar_obj_t *)zend_object_store_get_object(object TSRMLS_CC);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PHP_SIGAR_INIT_HANDLERS(handlers) \
|
||||||
|
memcpy(&handlers, zend_get_std_object_handlers(), sizeof(handlers)); \
|
||||||
|
handlers.clone_obj = NULL
|
||||||
|
|
||||||
|
#include "php_sigar_generated.c"
|
||||||
|
|
||||||
|
static zend_function_entry php_sigar_class_functions[] = {
|
||||||
|
PHP_SIGAR_FUNCTIONS
|
||||||
|
{NULL, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static PHP_MINIT_FUNCTION(sigar)
|
||||||
|
{
|
||||||
|
zend_class_entry ce;
|
||||||
|
|
||||||
|
PHP_SIGAR_INIT_HANDLERS(php_sigar_object_handlers);
|
||||||
|
INIT_CLASS_ENTRY(ce, "Sigar", php_sigar_class_functions);
|
||||||
|
ce.create_object = php_sigar_new;
|
||||||
|
zend_register_internal_class(&ce TSRMLS_CC);
|
||||||
|
|
||||||
|
PHP_SIGAR_INIT;
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
zend_function_entry php_sigar_functions[] = {
|
||||||
|
{NULL, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
zend_module_entry sigar_module_entry = {
|
||||||
|
STANDARD_MODULE_HEADER,
|
||||||
|
"sigar",
|
||||||
|
php_sigar_functions,
|
||||||
|
PHP_MINIT(sigar),
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
"0.1",
|
||||||
|
STANDARD_MODULE_PROPERTIES
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef COMPILE_DL_SIGAR
|
||||||
|
ZEND_GET_MODULE(sigar)
|
||||||
|
#endif
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef PHP_SIGAR_H
|
||||||
|
#define PHP_SIGAR_H 1
|
||||||
|
|
||||||
|
extern zend_module_entry sigar_module_entry;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue