pollita Thu Sep 18 13:36:08 2003 EDT Modified files: /php-src/ext/ftp ftp.c ftp.h php_ftp.c php_ftp.h Log: Add ftp_alloc() for servers which require client to predeclare filesize to be sent. Index: php-src/ext/ftp/ftp.c diff -u php-src/ext/ftp/ftp.c:1.91 php-src/ext/ftp/ftp.c:1.92 --- php-src/ext/ftp/ftp.c:1.91 Tue Sep 9 17:12:49 2003 +++ php-src/ext/ftp/ftp.c Thu Sep 18 13:36:08 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ftp.c,v 1.91 2003/09/09 21:12:49 pollita Exp $ */ +/* $Id: ftp.c,v 1.92 2003/09/18 17:36:08 pollita Exp $ */ #include "php.h" @@ -605,6 +605,38 @@ } /* }}} */ +/* {{{ ftp_alloc + */ +int +ftp_alloc(ftpbuf_t *ftp, const int size, char **response) +{ + char buffer[64]; + + if (ftp == NULL || size <= 0) { + return 0; + } + + snprintf(buffer, 64, "%d", size); + + if (!ftp_putcmd(ftp, "ALLO", buffer)) { + return 0; + } + + if (!ftp_getresp(ftp)) { + return 0; + } + + if (response && ftp->inbuf) { + *response = estrdup(ftp->inbuf); + } + + if (ftp->resp < 200 || ftp->resp >= 300) { + return 0; + } + + return 1; +} +/* }}} */ /* {{{ ftp_nlist */ Index: php-src/ext/ftp/ftp.h diff -u php-src/ext/ftp/ftp.h:1.39 php-src/ext/ftp/ftp.h:1.40 --- php-src/ext/ftp/ftp.h:1.39 Fri Jun 27 12:41:41 2003 +++ php-src/ext/ftp/ftp.h Thu Sep 18 13:36:08 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ftp.h,v 1.39 2003/06/27 16:41:41 sniper Exp $ */ +/* $Id: ftp.h,v 1.40 2003/09/18 17:36:08 pollita Exp $ */ #ifndef FTP_H #define FTP_H @@ -140,6 +140,13 @@ /* Set permissions on a file */ int ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename, const int filename_len); + +/* Allocate space on remote server with ALLO command + * Many servers will respond with 202 Allocation not necessary, + * however some servers will not accept STOR or APPE until ALLO is confirmed. + * If response is passed, it is estrdup()ed from ftp->inbuf and must be freed + * or assigned to a zval returned to the user */ +int ftp_alloc(ftpbuf_t *ftp, const int size, char **response); /* returns a NULL-terminated array of filenames in the given path * or NULL on error. the return array must be freed (but don't Index: php-src/ext/ftp/php_ftp.c diff -u php-src/ext/ftp/php_ftp.c:1.95 php-src/ext/ftp/php_ftp.c:1.96 --- php-src/ext/ftp/php_ftp.c:1.95 Mon Sep 8 18:40:12 2003 +++ php-src/ext/ftp/php_ftp.c Thu Sep 18 13:36:08 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ftp.c,v 1.95 2003/09/08 22:40:12 pollita Exp $ */ +/* $Id: php_ftp.c,v 1.96 2003/09/18 17:36:08 pollita Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -50,6 +50,13 @@ static int le_ftpbuf; #define le_ftpbuf_name "FTP Buffer" +static + ZEND_BEGIN_ARG_INFO(third_and_rest_force_ref, 1) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(1) + ZEND_END_ARG_INFO() + function_entry php_ftp_functions[] = { PHP_FE(ftp_connect, NULL) #ifdef HAVE_OPENSSL_EXT @@ -64,6 +71,7 @@ PHP_FE(ftp_mkdir, NULL) PHP_FE(ftp_rmdir, NULL) PHP_FE(ftp_chmod, NULL) + PHP_FE(ftp_alloc, third_and_rest_force_ref) PHP_FE(ftp_nlist, NULL) PHP_FE(ftp_rawlist, NULL) PHP_FE(ftp_systype, NULL) @@ -427,6 +435,35 @@ } RETURN_LONG(mode); +} +/* }}} */ + +/* {{{ proto bool ftp_alloc(resource stream, int size[, &response]) + Attempt to allocate space on the remote FTP server */ +PHP_FUNCTION(ftp_alloc) +{ + zval *z_ftp, *zresponse = NULL; + ftpbuf_t *ftp; + int size, ret; + char *response = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|z", &z_ftp, &size, &zresponse) == FAILURE) { + RETURN_FALSE; + } + + ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); + + ret = ftp_alloc(ftp, size, zresponse ? &response : NULL); + if (response) { + zval_dtor(zresponse); + ZVAL_STRING(zresponse, response, 0); + } + + if (!ret) { + RETURN_FALSE; + } + + RETURN_TRUE; } /* }}} */ Index: php-src/ext/ftp/php_ftp.h diff -u php-src/ext/ftp/php_ftp.h:1.26 php-src/ext/ftp/php_ftp.h:1.27 --- php-src/ext/ftp/php_ftp.h:1.26 Fri Jun 27 12:41:41 2003 +++ php-src/ext/ftp/php_ftp.h Thu Sep 18 13:36:08 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ftp.h,v 1.26 2003/06/27 16:41:41 sniper Exp $ */ +/* $Id: php_ftp.h,v 1.27 2003/09/18 17:36:08 pollita Exp $ */ #ifndef _INCLUDED_FTP_H #define _INCLUDED_FTP_H @@ -47,6 +47,7 @@ PHP_FUNCTION(ftp_mkdir); PHP_FUNCTION(ftp_rmdir); PHP_FUNCTION(ftp_chmod); +PHP_FUNCTION(ftp_alloc); PHP_FUNCTION(ftp_nlist); PHP_FUNCTION(ftp_rawlist); PHP_FUNCTION(ftp_systype);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php