ftok.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 5 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1997-2016 The PHP Group |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 3.01 of the PHP license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.php.net/license/3_01.txt |
  11. | If you did not receive a copy of the PHP license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@php.net so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | Author: Andrew Sitnikov <sitnikov@infonet.ee> |
  16. +----------------------------------------------------------------------+
  17. */
  18. /* $Id$ */
  19. #include "php.h"
  20. #include <sys/types.h>
  21. #ifdef HAVE_SYS_IPC_H
  22. #include <sys/ipc.h>
  23. #endif
  24. #if HAVE_FTOK
  25. /* {{{ proto int ftok(string pathname, string proj)
  26. Convert a pathname and a project identifier to a System V IPC key */
  27. PHP_FUNCTION(ftok)
  28. {
  29. char *pathname, *proj;
  30. int pathname_len, proj_len;
  31. key_t k;
  32. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ps", &pathname, &pathname_len, &proj, &proj_len) == FAILURE) {
  33. return;
  34. }
  35. if (pathname_len == 0){
  36. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Pathname is invalid");
  37. RETURN_LONG(-1);
  38. }
  39. if (proj_len != 1){
  40. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Project identifier is invalid");
  41. RETURN_LONG(-1);
  42. }
  43. if (php_check_open_basedir(pathname TSRMLS_CC)) {
  44. RETURN_LONG(-1);
  45. }
  46. k = ftok(pathname, proj[0]);
  47. if (k == -1) {
  48. php_error_docref(NULL TSRMLS_CC, E_WARNING, "ftok() failed - %s", strerror(errno));
  49. }
  50. RETURN_LONG(k);
  51. }
  52. /* }}} */
  53. #endif
  54. /*
  55. * Local variables:
  56. * tab-width: 4
  57. * c-basic-offset: 4
  58. * End:
  59. */