Permalink
Browse files

import

git-svn-id: http://php-prctl.googlecode.com/svn/trunk@2 577118fb-465f-add4-9070-eeb12c1e329d
  • Loading branch information...
0 parents commit b6cd60af437b592eabac47ce2dd2ab82b59772ba @wuwx wuwx committed May 10, 2010
Showing with 384 additions and 0 deletions.
  1. +1 −0 CREDITS
  2. 0 EXPERIMENTAL
  3. +63 −0 config.m4
  4. +13 −0 config.w32
  5. +83 −0 php_prctl.h
  6. +182 −0 prctl.c
  7. +21 −0 prctl.php
  8. +21 −0 tests/001.phpt
@@ -0,0 +1 @@
+prctl
No changes.
@@ -0,0 +1,63 @@
+dnl $Id$
+dnl config.m4 for extension prctl
+
+dnl Comments in this file start with the string 'dnl'.
+dnl Remove where necessary. This file will not work
+dnl without editing.
+
+dnl If your extension references something external, use with:
+
+dnl PHP_ARG_WITH(prctl, for prctl support,
+dnl Make sure that the comment is aligned:
+dnl [ --with-prctl Include prctl support])
+
+dnl Otherwise use enable:
+
+dnl PHP_ARG_ENABLE(prctl, whether to enable prctl support,
+dnl Make sure that the comment is aligned:
+dnl [ --enable-prctl Enable prctl support])
+
+if test "$PHP_PRCTL" != "no"; then
+ dnl Write more examples of tests here...
+
+ dnl # --with-prctl -> check with-path
+ dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
+ dnl SEARCH_FOR="/include/prctl.h" # you most likely want to change this
+ dnl if test -r $PHP_PRCTL/$SEARCH_FOR; then # path given as parameter
+ dnl PRCTL_DIR=$PHP_PRCTL
+ dnl else # search default path list
+ dnl AC_MSG_CHECKING([for prctl files in default path])
+ dnl for i in $SEARCH_PATH ; do
+ dnl if test -r $i/$SEARCH_FOR; then
+ dnl PRCTL_DIR=$i
+ dnl AC_MSG_RESULT(found in $i)
+ dnl fi
+ dnl done
+ dnl fi
+ dnl
+ dnl if test -z "$PRCTL_DIR"; then
+ dnl AC_MSG_RESULT([not found])
+ dnl AC_MSG_ERROR([Please reinstall the prctl distribution])
+ dnl fi
+
+ dnl # --with-prctl -> add include path
+ dnl PHP_ADD_INCLUDE($PRCTL_DIR/include)
+
+ dnl # --with-prctl -> check for lib and symbol presence
+ dnl LIBNAME=prctl # you may want to change this
+ dnl LIBSYMBOL=prctl # you most likely want to change this
+
+ dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
+ dnl [
+ dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PRCTL_DIR/lib, PRCTL_SHARED_LIBADD)
+ dnl AC_DEFINE(HAVE_PRCTLLIB,1,[ ])
+ dnl ],[
+ dnl AC_MSG_ERROR([wrong prctl lib version or lib not found])
+ dnl ],[
+ dnl -L$PRCTL_DIR/lib -lm
+ dnl ])
+ dnl
+ dnl PHP_SUBST(PRCTL_SHARED_LIBADD)
+
+ PHP_NEW_EXTENSION(prctl, prctl.c, $ext_shared)
+fi
@@ -0,0 +1,13 @@
+// $Id$
+// vim:ft=javascript
+
+// If your extension references something external, use ARG_WITH
+// ARG_WITH("prctl", "for prctl support", "no");
+
+// Otherwise, use ARG_ENABLE
+// ARG_ENABLE("prctl", "enable prctl support", "no");
+
+if (PHP_PRCTL != "no") {
+ EXTENSION("prctl", "prctl.c");
+}
+
@@ -0,0 +1,83 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2008 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: header 252479 2008-02-07 19:39:50Z iliaa $ */
+
+#ifndef PHP_PRCTL_H
+#define PHP_PRCTL_H
+
+extern zend_module_entry prctl_module_entry;
+#define phpext_prctl_ptr &prctl_module_entry
+
+#ifdef PHP_WIN32
+# define PHP_PRCTL_API __declspec(dllexport)
+#elif defined(__GNUC__) && __GNUC__ >= 4
+# define PHP_PRCTL_API __attribute__ ((visibility("default")))
+#else
+# define PHP_PRCTL_API
+#endif
+
+#ifdef ZTS
+#include "TSRM.h"
+#endif
+
+PHP_MINIT_FUNCTION(prctl);
+PHP_MSHUTDOWN_FUNCTION(prctl);
+PHP_RINIT_FUNCTION(prctl);
+PHP_RSHUTDOWN_FUNCTION(prctl);
+PHP_MINFO_FUNCTION(prctl);
+
+PHP_FUNCTION(confirm_prctl_compiled); /* For testing, remove later. */
+
+/*
+ Declare any global variables you may need between the BEGIN
+ and END macros here:
+
+ZEND_BEGIN_MODULE_GLOBALS(prctl)
+ long global_value;
+ char *global_string;
+ZEND_END_MODULE_GLOBALS(prctl)
+*/
+
+/* In every utility function you add that needs to use variables
+ in php_prctl_globals, call TSRMLS_FETCH(); after declaring other
+ variables used by that function, or better yet, pass in TSRMLS_CC
+ after the last function argument and declare your utility function
+ with TSRMLS_DC after the last declared argument. Always refer to
+ the globals in your function as PRCTL_G(variable). You are
+ encouraged to rename these macros something shorter, see
+ examples in any other php module directory.
+*/
+
+#ifdef ZTS
+#define PRCTL_G(v) TSRMG(prctl_globals_id, zend_prctl_globals *, v)
+#else
+#define PRCTL_G(v) (prctl_globals.v)
+#endif
+
+#endif /* PHP_PRCTL_H */
+
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
182 prctl.c
@@ -0,0 +1,182 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 5 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2008 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id: header 252479 2008-02-07 19:39:50Z iliaa $ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "php.h"
+#include "php_ini.h"
+#include "ext/standard/info.h"
+#include "php_prctl.h"
+
+/* If you declare any globals in php_prctl.h uncomment this:
+ZEND_DECLARE_MODULE_GLOBALS(prctl)
+*/
+
+/* True global resources - no need for thread safety here */
+static int le_prctl;
+
+/* {{{ prctl_functions[]
+ *
+ * Every user visible function must have an entry in prctl_functions[].
+ */
+const zend_function_entry prctl_functions[] = {
+ PHP_FE(confirm_prctl_compiled, NULL) /* For testing, remove later. */
+ {NULL, NULL, NULL} /* Must be the last line in prctl_functions[] */
+};
+/* }}} */
+
+/* {{{ prctl_module_entry
+ */
+zend_module_entry prctl_module_entry = {
+#if ZEND_MODULE_API_NO >= 20010901
+ STANDARD_MODULE_HEADER,
+#endif
+ "prctl",
+ prctl_functions,
+ PHP_MINIT(prctl),
+ PHP_MSHUTDOWN(prctl),
+ PHP_RINIT(prctl), /* Replace with NULL if there's nothing to do at request start */
+ PHP_RSHUTDOWN(prctl), /* Replace with NULL if there's nothing to do at request end */
+ PHP_MINFO(prctl),
+#if ZEND_MODULE_API_NO >= 20010901
+ "0.1", /* Replace with version number for your extension */
+#endif
+ STANDARD_MODULE_PROPERTIES
+};
+/* }}} */
+
+#ifdef COMPILE_DL_PRCTL
+ZEND_GET_MODULE(prctl)
+#endif
+
+/* {{{ PHP_INI
+ */
+/* Remove comments and fill if you need to have entries in php.ini
+PHP_INI_BEGIN()
+ STD_PHP_INI_ENTRY("prctl.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_prctl_globals, prctl_globals)
+ STD_PHP_INI_ENTRY("prctl.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_prctl_globals, prctl_globals)
+PHP_INI_END()
+*/
+/* }}} */
+
+/* {{{ php_prctl_init_globals
+ */
+/* Uncomment this function if you have INI entries
+static void php_prctl_init_globals(zend_prctl_globals *prctl_globals)
+{
+ prctl_globals->global_value = 0;
+ prctl_globals->global_string = NULL;
+}
+*/
+/* }}} */
+
+/* {{{ PHP_MINIT_FUNCTION
+ */
+PHP_MINIT_FUNCTION(prctl)
+{
+ /* If you have INI entries, uncomment these lines
+ REGISTER_INI_ENTRIES();
+ */
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_MSHUTDOWN_FUNCTION
+ */
+PHP_MSHUTDOWN_FUNCTION(prctl)
+{
+ /* uncomment this line if you have INI entries
+ UNREGISTER_INI_ENTRIES();
+ */
+ return SUCCESS;
+}
+/* }}} */
+
+/* Remove if there's nothing to do at request start */
+/* {{{ PHP_RINIT_FUNCTION
+ */
+PHP_RINIT_FUNCTION(prctl)
+{
+ return SUCCESS;
+}
+/* }}} */
+
+/* Remove if there's nothing to do at request end */
+/* {{{ PHP_RSHUTDOWN_FUNCTION
+ */
+PHP_RSHUTDOWN_FUNCTION(prctl)
+{
+ return SUCCESS;
+}
+/* }}} */
+
+/* {{{ PHP_MINFO_FUNCTION
+ */
+PHP_MINFO_FUNCTION(prctl)
+{
+ php_info_print_table_start();
+ php_info_print_table_header(2, "prctl support", "enabled");
+ php_info_print_table_end();
+
+ /* Remove comments if you have entries in php.ini
+ DISPLAY_INI_ENTRIES();
+ */
+}
+/* }}} */
+
+
+/* Remove the following function when you have succesfully modified config.m4
+ so that your module can be compiled into PHP, it exists only for testing
+ purposes. */
+
+/* Every user-visible function in PHP should document itself in the source */
+/* {{{ proto string confirm_prctl_compiled(string arg)
+ Return a string to confirm that the module is compiled in */
+PHP_FUNCTION(confirm_prctl_compiled)
+{
+ char *arg = NULL;
+ int arg_len, len;
+ char *strg;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
+ return;
+ }
+
+ len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "prctl", arg);
+ RETURN_STRINGL(strg, len, 0);
+}
+/* }}} */
+/* The previous line is meant for vim and emacs, so it can correctly fold and
+ unfold functions in source code. See the corresponding marks just before
+ function definition, where the functions purpose is also documented. Please
+ follow this convention for the convenience of others editing your code.
+*/
+
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: noet sw=4 ts=4 fdm=marker
+ * vim<600: noet sw=4 ts=4
+ */
@@ -0,0 +1,21 @@
+<?php
+$br = (php_sapi_name() == "cli")? "":"<br>";
+
+if(!extension_loaded('prctl')) {
+ dl('prctl.' . PHP_SHLIB_SUFFIX);
+}
+$module = 'prctl';
+$functions = get_extension_funcs($module);
+echo "Functions available in the test extension:$br\n";
+foreach($functions as $func) {
+ echo $func."$br\n";
+}
+echo "$br\n";
+$function = 'confirm_' . $module . '_compiled';
+if (extension_loaded($module)) {
+ $str = $function($module);
+} else {
+ $str = "Module $module is not compiled into PHP";
+}
+echo "$str\n";
+?>
@@ -0,0 +1,21 @@
+--TEST--
+Check for prctl presence
+--SKIPIF--
+<?php if (!extension_loaded("prctl")) print "skip"; ?>
+--FILE--
+<?php
+echo "prctl extension is available";
+/*
+ you can add regression tests for your extension here
+
+ the output of your test code has to be equal to the
+ text in the --EXPECT-- section below for the tests
+ to pass, differences between the output and the
+ expected text are interpreted as failure
+
+ see php5/README.TESTING for further information on
+ writing regression tests
+*/
+?>
+--EXPECT--
+prctl extension is available

0 comments on commit b6cd60a

Please sign in to comment.