Skip to content

Commit d33f93d

Browse files
committed
working fastlz
1 parent 8dfe28a commit d33f93d

File tree

1 file changed

+70
-15
lines changed

1 file changed

+70
-15
lines changed

php_fastlz.c

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
#include "zend_hash.h"
1212
#include "ext/standard/info.h"
1313
#include "SAPI.h"
14+
#include "stdint.h"
1415

1516
#include "php_fastlz.h"
17+
#include "libfastlz/fastlz.h"
1618

1719
/* {{{ fastlz globals
1820
*
@@ -22,7 +24,7 @@
2224

2325
/* {{{ PHP_FUNCTION declarations */
2426
PHP_FUNCTION(fastlz_compress);
25-
PHP_FUNCTION(fastlz_uncompress);
27+
PHP_FUNCTION(fastlz_decompress);
2628
/* }}} */
2729

2830
/* {{{ ZEND_DECLARE_MODULE_GLOBALS(fastlz) */
@@ -59,12 +61,12 @@ PHP_INI_END()
5961
/* {{{ arginfo */
6062
FASTLZ_ARGINFO_STATIC
6163
ZEND_BEGIN_ARG_INFO(php_fastlz_compress_arginfo, 0)
62-
ZEND_ARG_INFO(0, key)
64+
ZEND_ARG_INFO(0, value)
6365
ZEND_END_ARG_INFO()
6466

6567
FASTLZ_ARGINFO_STATIC
66-
ZEND_BEGIN_ARG_INFO(php_fastlz_uncompress_arginfo, 0)
67-
ZEND_ARG_INFO(0, key)
68+
ZEND_BEGIN_ARG_INFO(php_fastlz_decompress_arginfo, 0)
69+
ZEND_ARG_INFO(0, compressed)
6870
ZEND_END_ARG_INFO()
6971
/* }}} */
7072

@@ -75,7 +77,7 @@ ZEND_END_ARG_INFO()
7577
*/
7678
zend_function_entry fastlz_functions[] = {
7779
PHP_FE(fastlz_compress, php_fastlz_compress_arginfo)
78-
PHP_FE(fastlz_uncompress, php_fastlz_uncompress_arginfo)
80+
PHP_FE(fastlz_decompress, php_fastlz_decompress_arginfo)
7981
{NULL, NULL, NULL} /* Must be the last line in fastlz_functions[] */
8082
};
8183
/* }}} */
@@ -104,7 +106,7 @@ ZEND_GET_MODULE(fastlz)
104106

105107
/* {{{ PHP_MINIT_FUNCTION
106108
*/
107-
PHP_MINIT_FUNCTION(hidef)
109+
PHP_MINIT_FUNCTION(fastlz)
108110
{
109111
ZEND_INIT_MODULE_GLOBALS(fastlz, php_fastlz_init_globals, php_fastlz_shutdown_globals);
110112

@@ -145,29 +147,82 @@ PHP_MINFO_FUNCTION(fastlz)
145147

146148
/* {{{ proto string fastlz_compress(string value)
147149
*/
148-
PHP_FUNCTION(fastlz_fetch)
150+
PHP_FUNCTION(fastlz_compress)
149151
{
150-
char *strkey;
151-
int strkey_len;
152+
char *value;
153+
int value_len;
154+
uint32_t compressed_len;
155+
char *compressed;
152156

153-
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strkey, &strkey_len) == FAILURE)
157+
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &value, &value_len) == FAILURE)
154158
{
155159
return;
156160
}
161+
162+
compressed_len = sizeof(uint32_t) + ((value_len*1.05) + 1);
163+
164+
compressed = emalloc(compressed_len);
165+
166+
if(compressed)
167+
{
168+
memcpy(compressed, &value_len, sizeof(uint32_t));
169+
compressed += sizeof(uint32_t);
170+
compressed_len = fastlz_compress_level(FASTLZ_G(compression_level), value, value_len, compressed);
171+
if(compressed_len > 0)
172+
{
173+
compressed_len += sizeof(uint32_t);
174+
compressed -= sizeof(uint32_t);
175+
RETURN_STRINGL(compressed, compressed_len, 0);
176+
return;
177+
}
178+
else
179+
{
180+
efree(compressed);
181+
}
182+
}
183+
184+
RETURN_NULL();
157185
}
158186
/* }}} */
159187

160-
/* {{{ proto string fastlz_uncompress(string key)
188+
/* {{{ proto string fastlz_decompress(string key)
161189
*/
162-
PHP_FUNCTION(fastlz_uncompress)
190+
PHP_FUNCTION(fastlz_decompress)
163191
{
164-
char *strkey;
165-
int strkey_len;
192+
char *value;
193+
uint32_t value_len;
194+
int compressed_len;
195+
char *compressed;
166196

167-
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strkey, &strkey_len) == FAILURE)
197+
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &compressed, &compressed_len) == FAILURE)
168198
{
169199
return;
170200
}
201+
202+
if(compressed_len > sizeof(uint32_t))
203+
{
204+
memcpy(&value_len, compressed, sizeof(uint32_t));
205+
if(value_len > 0)
206+
{
207+
compressed += sizeof(uint32_t);
208+
compressed_len -= sizeof(uint32_t);
209+
value = emalloc(value_len);
210+
if(value)
211+
{
212+
if(value_len == fastlz_decompress(compressed, compressed_len, value, value_len))
213+
{
214+
RETURN_STRINGL(value, value_len, 0);
215+
return;
216+
}
217+
else
218+
{
219+
efree(value);
220+
}
221+
}
222+
}
223+
}
224+
225+
RETURN_NULL();
171226
}
172227
/* }}} */
173228

0 commit comments

Comments
 (0)