All macros have three forms:
one that accepts zvals, another one for zval *s, and finally one for zval **s.
The difference in their names is that the first has no suffix, the zval * has a
suffix of _P (as in one pointer), and the latter, zval **, has a suffix of _PP (two
pointers).
Now, you have enough information to complete the file_read() and
file_write() functions on your own. Here’s a possible implementation:
PHP_FUNCTION(file_read)
{
int argc = ZEND_NUM_ARGS();
long size;
zval *filehandle = NULL;
FILE *fp;
char *result;
size_t bytes_read;
if (zend_parse_parameters(argc TSRMLS_CC, “rl”, &filehandle,
&size) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(fp, FILE *, &filehandle, -1, “standard-c
file”, le_myfile);
result = (char *) emalloc(size+1);
bytes_read = fread(result, 1, size, fp);
result[bytes_read] = ‘\0′;
RETURN_STRING(result, 0);
}
PHP_FUNCTION(file_write)
{
char *buffer = NULL;
int argc = ZEND_NUM_ARGS();
int buffer_len;
zval *filehandle = NULL;
FILE *fp;
if (zend_parse_parameters(argc TSRMLS_CC, “rs”, &filehandle,
&buffer, &buffer_len) == FAILURE) {
return;
}
ZEND_FETCH_RESOURCE(fp, FILE *, &filehandle, -1, “standard-c
file”, le_myfile);
if (fwrite(buffer, 1, buffer_len, fp) != buffer_len) {
RETURN_FALSE;
}
RETURN_TRUE;
}
-
‹ Home
-
Categories
-
Tags
acrobat adobe amazon apple basic of computer CSS css3 current news David Hill delete dell escape google Hack HP IBM IE interesting news internet IT Javascript keyboard knowledge laptop lenovo miscellaneos tricks mouse event mozilla firefox Netezza Corp news News and Alerts onmouseout onmouseover opera oracle PC pdf Robin Johnson safari shortcuts sun microsystems Teradata Corp Tips and tricks windows yahoo
-
Archives
-
RSS Feeds
-
Account
Post a Comment