ftok.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 7 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1997-2018 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. #include "php.h"
  19. #include <sys/types.h>
  20. #ifdef HAVE_SYS_IPC_H
  21. #include <sys/ipc.h>
  22. #endif
  23. #ifdef PHP_WIN32
  24. #include "win32/ipc.h"
  25. #endif
  26. #if HAVE_FTOK
  27. /* {{{ proto int ftok(string pathname, string proj)
  28. Convert a pathname and a project identifier to a System V IPC key */
  29. PHP_FUNCTION(ftok)
  30. {
  31. char *pathname, *proj;
  32. size_t pathname_len, proj_len;
  33. key_t k;
  34. ZEND_PARSE_PARAMETERS_START(2, 2)
  35. Z_PARAM_PATH(pathname, pathname_len)
  36. Z_PARAM_STRING(proj, proj_len)
  37. ZEND_PARSE_PARAMETERS_END();
  38. if (pathname_len == 0){
  39. php_error_docref(NULL, E_WARNING, "Pathname is invalid");
  40. RETURN_LONG(-1);
  41. }
  42. if (proj_len != 1){
  43. php_error_docref(NULL, E_WARNING, "Project identifier is invalid");
  44. RETURN_LONG(-1);
  45. }
  46. if (php_check_open_basedir(pathname)) {
  47. RETURN_LONG(-1);
  48. }
  49. k = ftok(pathname, proj[0]);
  50. if (k == -1) {
  51. php_error_docref(NULL, E_WARNING, "ftok() failed - %s", strerror(errno));
  52. }
  53. RETURN_LONG(k);
  54. }
  55. /* }}} */
  56. #endif
  57. /*
  58. * Local variables:
  59. * tab-width: 4
  60. * c-basic-offset: 4
  61. * End:
  62. */