11
11
#include "zend_hash.h"
12
12
#include "ext/standard/info.h"
13
13
#include "SAPI.h"
14
+ #include "stdint.h"
14
15
15
16
#include "php_fastlz.h"
17
+ #include "libfastlz/fastlz.h"
16
18
17
19
/* {{{ fastlz globals
18
20
*
22
24
23
25
/* {{{ PHP_FUNCTION declarations */
24
26
PHP_FUNCTION (fastlz_compress );
25
- PHP_FUNCTION (fastlz_uncompress );
27
+ PHP_FUNCTION (fastlz_decompress );
26
28
/* }}} */
27
29
28
30
/* {{{ ZEND_DECLARE_MODULE_GLOBALS(fastlz) */
@@ -59,12 +61,12 @@ PHP_INI_END()
59
61
/* {{{ arginfo */
60
62
FASTLZ_ARGINFO_STATIC
61
63
ZEND_BEGIN_ARG_INFO (php_fastlz_compress_arginfo , 0 )
62
- ZEND_ARG_INFO (0 , key )
64
+ ZEND_ARG_INFO (0 , value )
63
65
ZEND_END_ARG_INFO ()
64
66
65
67
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 )
68
70
ZEND_END_ARG_INFO ()
69
71
/* }}} */
70
72
@@ -75,7 +77,7 @@ ZEND_END_ARG_INFO()
75
77
*/
76
78
zend_function_entry fastlz_functions [] = {
77
79
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 )
79
81
{NULL , NULL , NULL } /* Must be the last line in fastlz_functions[] */
80
82
};
81
83
/* }}} */
@@ -104,7 +106,7 @@ ZEND_GET_MODULE(fastlz)
104
106
105
107
/* {{{ PHP_MINIT_FUNCTION
106
108
*/
107
- PHP_MINIT_FUNCTION (hidef )
109
+ PHP_MINIT_FUNCTION (fastlz )
108
110
{
109
111
ZEND_INIT_MODULE_GLOBALS (fastlz , php_fastlz_init_globals , php_fastlz_shutdown_globals );
110
112
@@ -145,29 +147,82 @@ PHP_MINFO_FUNCTION(fastlz)
145
147
146
148
/* {{{ proto string fastlz_compress(string value)
147
149
*/
148
- PHP_FUNCTION (fastlz_fetch )
150
+ PHP_FUNCTION (fastlz_compress )
149
151
{
150
- char * strkey ;
151
- int strkey_len ;
152
+ char * value ;
153
+ int value_len ;
154
+ uint32_t compressed_len ;
155
+ char * compressed ;
152
156
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 )
154
158
{
155
159
return ;
156
160
}
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 ();
157
185
}
158
186
/* }}} */
159
187
160
- /* {{{ proto string fastlz_uncompress (string key)
188
+ /* {{{ proto string fastlz_decompress (string key)
161
189
*/
162
- PHP_FUNCTION (fastlz_uncompress )
190
+ PHP_FUNCTION (fastlz_decompress )
163
191
{
164
- char * strkey ;
165
- int strkey_len ;
192
+ char * value ;
193
+ uint32_t value_len ;
194
+ int compressed_len ;
195
+ char * compressed ;
166
196
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 )
168
198
{
169
199
return ;
170
200
}
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 ();
171
226
}
172
227
/* }}} */
173
228
0 commit comments