From: Greg Beaver Date: Sat, 20 Jan 2007 05:28:48 +0000 (+0000) Subject: update TODO to include missing items X-Git-Tag: RELEASE_1_0_0RC1~194 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a5dff134659731e43d89d7c2728a5d8c5249e7f1;p=php update TODO to include missing items move permissions to the lowest bits of flags fix warnings about signedness fix unclear /* docs */ --- diff --git a/ext/phar/TODO b/ext/phar/TODO index 9767630839..7de2bf197c 100644 --- a/ext/phar/TODO +++ b/ext/phar/TODO @@ -1,12 +1,18 @@ Version 1.0.0 - * implement metadata in manifest as [metadatacount8][type32][len16][metadata...] + X make permissions in the lowest bits of flags to simplify using them [Greg] + * implement ini handler for phar.readonly and phar.require_hash that allows enabling it on + PHP_INI_ALL if it is disabled in the system, but does not allow disabling it + if it is enabled in the system + * implement metadata in manifest as [type32][len16][metadata...] where 0 type is + used to finish metadata for this file * if SPL is disabled, disable the Phar class * implement in-phar locking, so that a file that is opened for reading can't have a handle opened for writing * docs on file format/manifest description * docs on uses - * support stream context for specifying compression of a file, as well as meta-data + * support stream context for specifying compression of a file, as well as meta-data, and + copying of new prologue to the phar * add setUncompressed(), setCompressedGZ() and setCompressedBZ2() to PharFileInfo class * add uncompressAllFiles(), compressAllFilesGZ() and compressAllFilesBZ2() to Phar class * add setMetaData($key, $contents) to PharFileInfo diff --git a/ext/phar/phar.c b/ext/phar/phar.c index ca13aaf54a..36a97acf76 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -72,22 +72,29 @@ #define PHAR_SIG_USE PHAR_SIG_SHA1 +/* metadata type constants */ + +#define PHAR_METADATA_FINISHED 0x00000000 + +/* #define PHAR_METADATA_WHATEVER 0x000000001 + We don't need anything yet, so put this here + in order to remember how it works */ + /* flags byte for each file adheres to these bitmasks. All unused values are reserved */ -#define PHAR_ENT_COMPRESSION_MASK 0x0000000F +#define PHAR_ENT_COMPRESSION_MASK 0x00001C00 #define PHAR_ENT_COMPRESSED_NONE 0x00000000 -#define PHAR_ENT_COMPRESSED_GZ 0x00000001 -#define PHAR_ENT_COMPRESSED_BZ2 0x00000002 - -#define PHAR_ENT_PERM_MASK 0x0001FF00 -#define PHAR_ENT_PERM_MASK_USR 0x0001C000 -#define PHAR_ENT_PERM_SHIFT_USR 14 -#define PHAR_ENT_PERM_MASK_GRP 0x00003800 -#define PHAR_ENT_PERM_SHIFT_GRP 11 -#define PHAR_ENT_PERM_MASK_OTH 0x00000700 -#define PHAR_ENT_PERM_SHIFT_OTH 8 -#define PHAR_ENT_PERM_DEF_FILE 0x0001B600 -#define PHAR_ENT_PERM_DEF_DIR 0x0001FF00 +#define PHAR_ENT_COMPRESSED_GZ 0x00000200 +#define PHAR_ENT_COMPRESSED_BZ2 0x00000400 + +#define PHAR_ENT_PERM_MASK 0x000001FF +#define PHAR_ENT_PERM_MASK_USR 0x000001C0 +#define PHAR_ENT_PERM_SHIFT_USR 6 +#define PHAR_ENT_PERM_MASK_GRP 0x00000038 +#define PHAR_ENT_PERM_SHIFT_GRP 3 +#define PHAR_ENT_PERM_MASK_OTH 0x00000007 +#define PHAR_ENT_PERM_DEF_FILE 0x000001B6 +#define PHAR_ENT_PERM_DEF_DIR 0x000001FF #ifdef ZTS # include "TSRM.h" @@ -664,7 +671,7 @@ static int phar_open_file(php_stream *fp, char *fname, int fname_len, char *alia manifest_flags &= ~PHAR_HDR_COMPRESSION_MASK; - /* The lowest nibble contains the phar wide flags. The any compressed can */ + /* The lowest nibble contains the phar wide flags. The compression flags can */ /* be ignored on reading because it is being generated anyways. */ if (manifest_flags & PHAR_HDR_SIGNATURE) { unsigned char buf[1024]; @@ -1998,7 +2005,7 @@ static int phar_flush(phar_entry_data *data TSRMLS_DC) /* {{{ */ PHP_SHA1Update(&context, buf, len); } PHP_SHA1Final(digest, &context); - php_stream_write(newfile, digest, sizeof(digest)); + php_stream_write(newfile, (char *) digest, sizeof(digest)); sig_flags |= PHAR_SIG_SHA1; break; } @@ -2011,7 +2018,7 @@ static int phar_flush(phar_entry_data *data TSRMLS_DC) /* {{{ */ PHP_MD5Update(&context, buf, len); } PHP_MD5Final(digest, &context); - php_stream_write(newfile, digest, sizeof(digest)); + php_stream_write(newfile, (char *) digest, sizeof(digest)); sig_flags |= PHAR_SIG_MD5; break; } @@ -2124,7 +2131,7 @@ static void phar_dostat(phar_archive_data *phar, phar_entry_info *data, php_stre if (!is_dir) { ssb->sb.st_size = data->uncompressed_filesize; - ssb->sb.st_mode = (data->flags & PHAR_ENT_PERM_MASK) >> PHAR_ENT_PERM_SHIFT_OTH; + ssb->sb.st_mode = data->flags & PHAR_ENT_PERM_MASK; ssb->sb.st_mode |= S_IFREG; /* regular file */ /* timestamp is just the timestamp when this was added to the phar */ #ifdef NETWARE diff --git a/ext/phar/tests/phar_test.inc b/ext/phar/tests/phar_test.inc index 0b3ceabd6c..01b36b3be9 100755 --- a/ext/phar/tests/phar_test.inc +++ b/ext/phar/tests/phar_test.inc @@ -8,7 +8,7 @@ foreach($files as $name => $cont) $clen = $ulen; $time = isset($ftime) ? $ftime : mktime(12, 0, 0, 3, 1, 2006); $manifest .= pack('V', strlen($name)) . $name; - $manifest .= pack('VVVVV', $ulen, $time, $clen, crc32($cont), 0x0001B600); + $manifest .= pack('VVVVV', $ulen, $time, $clen, crc32($cont), 0x000001B6); } $alias = 'hio'; $manifest = pack('VnVV', count($files), 0x0900, 0x00000000, strlen($alias)) . $alias . $manifest;