From: Sara Golemon Date: Mon, 27 Jan 2003 02:54:12 +0000 (+0000) Subject: Feature Request #21748. Added function ftp_chmod(). X-Git-Tag: PHP_5_0_dev_before_13561_fix~24 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=761fa96412960d942e8767df7a3874f84371db34;p=php Feature Request #21748. Added function ftp_chmod(). --- diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c index ef27ed0df2..96e2a7f299 100644 --- a/ext/ftp/ftp.c +++ b/ext/ftp/ftp.c @@ -535,6 +535,31 @@ ftp_rmdir(ftpbuf_t *ftp, const char *dir) } /* }}} */ +/* {{{ ftp_chmod + */ +int +ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename) +{ + char buffer[1024]; + + if (ftp == NULL) { + return 0; + } + + sprintf(buffer, "CHMOD %o %s", mode, filename); + + if (!ftp_putcmd(ftp, "SITE", buffer)) { + return 0; + } + + if (!ftp_getresp(ftp) || ftp->resp != 200) { + return 0; + } + return 1; +} +/* }}} */ + + /* {{{ ftp_nlist */ char** diff --git a/ext/ftp/ftp.h b/ext/ftp/ftp.h index dd6be94c8b..35bf12bffb 100644 --- a/ext/ftp/ftp.h +++ b/ext/ftp/ftp.h @@ -135,6 +135,9 @@ char* ftp_mkdir(ftpbuf_t *ftp, const char *dir); /* removes a directory, return true on success, false on error */ int ftp_rmdir(ftpbuf_t *ftp, const char *dir); +/* Set permissions on a file */ +int ftp_chmod(ftpbuf_t *ftp, const int mode, const char *filename); + /* returns a NULL-terminated array of filenames in the given path * or NULL on error. the return array must be freed (but don't * free the array elements) diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c index 3b218385fd..b8fc548b1e 100644 --- a/ext/ftp/php_ftp.c +++ b/ext/ftp/php_ftp.c @@ -58,6 +58,7 @@ function_entry php_ftp_functions[] = { PHP_FE(ftp_exec, NULL) PHP_FE(ftp_mkdir, NULL) PHP_FE(ftp_rmdir, NULL) + PHP_FE(ftp_chmod, NULL) PHP_FE(ftp_nlist, NULL) PHP_FE(ftp_rawlist, NULL) PHP_FE(ftp_systype, NULL) @@ -380,6 +381,30 @@ PHP_FUNCTION(ftp_rmdir) } /* }}} */ +/* {{{ proto int ftp_chmod(resource stream, int mode, string filename) + Sets permissions on a file */ +PHP_FUNCTION(ftp_chmod) +{ + zval *z_ftp; + ftpbuf_t *ftp; + char *filename; + int mode, filename_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &z_ftp, &mode, &filename, &filename_len) == FAILURE) { + RETURN_FALSE; + } + + ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); + + if (!ftp_chmod(ftp, mode, filename)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); + RETURN_FALSE; + } + + RETURN_LONG(mode); +} +/* }}} */ + /* {{{ proto array ftp_nlist(resource stream, string directory) Returns an array of filenames in the given directory */ PHP_FUNCTION(ftp_nlist) diff --git a/ext/ftp/php_ftp.h b/ext/ftp/php_ftp.h index 10c87b7b0a..f203987b23 100644 --- a/ext/ftp/php_ftp.h +++ b/ext/ftp/php_ftp.h @@ -45,6 +45,7 @@ PHP_FUNCTION(ftp_chdir); PHP_FUNCTION(ftp_exec); PHP_FUNCTION(ftp_mkdir); PHP_FUNCTION(ftp_rmdir); +PHP_FUNCTION(ftp_chmod); PHP_FUNCTION(ftp_nlist); PHP_FUNCTION(ftp_rawlist); PHP_FUNCTION(ftp_systype);