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