CHAPTER 15 - Macros Used to Access zval Values

24 views

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;
}



« CHAPTER 15 - Removing a Resource CHAPTER 15 - Testing the Extension »
Posted on Thursday, June 7th, 2007 at 1:13 pm under PHP 5 Power Programming | RSS 2.0 Feed

Post Comment

You must be logged in to post a comment.



ComputerEducationWorld.com All Rights Reserved © RSS | CBSE | Education Boards Of India | What is My IP?