]> granicus.if.org Git - php/commitdiff
MFH: improve php_userstreamop_seek()
authorAntony Dovgal <tony2001@php.net>
Tue, 13 Feb 2007 19:50:59 +0000 (19:50 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 13 Feb 2007 19:50:59 +0000 (19:50 +0000)
main/streams/userspace.c

index 0fe6e213425e5505ab768de0ee3ed8ce1b564e96..235147b7ff21d166bcc5fc531a52fc10d91d9f97 100644 (file)
@@ -759,6 +759,10 @@ static int php_userstreamop_seek(php_stream *stream, off_t offset, int whence, o
                retval = NULL;
        }
 
+       if (ret) {
+               return ret;
+       }
+
        /* now determine where we are */
        ZVAL_STRINGL(&func_name, USERSTREAM_TELL, sizeof(USERSTREAM_TELL)-1, 0);
 
@@ -768,16 +772,20 @@ static int php_userstreamop_seek(php_stream *stream, off_t offset, int whence, o
                &retval,
                0, NULL, 0, NULL TSRMLS_CC);
 
-       if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) == IS_LONG)
+       if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) == IS_LONG) {
                *newoffs = Z_LVAL_P(retval);
-       else
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_TELL " is not implemented!",
-                               us->wrapper->classname);
+               ret = 0;
+       } else if (call_result == FAILURE) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::" USERSTREAM_TELL " is not implemented!", us->wrapper->classname);
+               ret = -1;
+       } else {
+               ret = -1;
+       }
 
-       if (retval)
+       if (retval) {
                zval_ptr_dtor(&retval);
-       
-       return 0;
+       }
+       return ret;
 }
 
 /* parse the return value from one of the stat functions and store the