2
2
#include "php_git2_priv.h"
3
3
#include "submodule.h"
4
4
5
+ static int php_git2_git_submodule_foreach_cb (git_submodule * sm , const char * name , void * payload )
6
+ {
7
+ php_git2_t * result , * submodule ;
8
+ zval * param_sm , * param_name , * retval_ptr = NULL ;
9
+ php_git2_cb_t * p = (php_git2_cb_t * )payload ;
10
+ int i = 0 ;
11
+ long retval = 0 ;
12
+ GIT2_TSRMLS_SET (p -> tsrm_ls )
13
+
14
+ Z_ADDREF_P (p -> payload );
15
+ MAKE_STD_ZVAL (param_sm );
16
+ MAKE_STD_ZVAL (param_name );
17
+ if (php_git2_make_resource (& submodule , PHP_GIT2_TYPE_SUBMODULE , sm , 0 TSRMLS_CC )) {
18
+ return GIT_EUSER ;
19
+ }
20
+ ZVAL_RESOURCE (param_sm , GIT2_RVAL_P (submodule ));
21
+
22
+ ZVAL_STRING (param_name , name , 1 );
23
+ if (php_git2_call_function_v (p -> fci , p -> fcc TSRMLS_CC , & retval_ptr , 3 ,
24
+ & param_sm , & param_name , & p -> payload )) {
25
+ return GIT_EUSER ;
26
+ }
27
+
28
+ retval = Z_LVAL_P (retval_ptr );
29
+ zval_ptr_dtor (& retval_ptr );
30
+ return retval ;
31
+
32
+
33
+ }
34
+
5
35
/* {{{ proto long git_submodule_lookup(resource $repo, string $name)
6
36
*/
7
37
PHP_FUNCTION (git_submodule_lookup )
8
38
{
9
39
int result = 0 , name_len = 0 , error = 0 ;
10
40
git_submodule * submodule = NULL ;
11
41
zval * repo = NULL ;
12
- php_git2_t * _repo = NULL ;
42
+ php_git2_t * _repo = NULL , * _result = NULL ;
13
43
char * name = NULL ;
14
44
15
45
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC ,
@@ -19,27 +49,35 @@ PHP_FUNCTION(git_submodule_lookup)
19
49
20
50
ZEND_FETCH_RESOURCE (_repo , php_git2_t * , & repo , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
21
51
result = git_submodule_lookup (& submodule , PHP_GIT2_V (_repo , repository ), name );
22
- RETURN_LONG (result );
52
+ if (php_git2_make_resource (& _result , PHP_GIT2_TYPE_SUBMODULE , submodule , 0 TSRMLS_CC )) {
53
+ RETURN_FALSE ;
54
+ }
55
+ ZVAL_RESOURCE (return_value , GIT2_RVAL_P (_result ));
23
56
}
24
57
/* }}} */
25
58
26
- /* {{{ proto long git_submodule_foreach(resource $repo, long $sm, string $name , $payload)
59
+ /* {{{ proto long git_submodule_foreach(resource $repo, Callable $callback , $payload)
27
60
*/
28
61
PHP_FUNCTION (git_submodule_foreach )
29
62
{
30
63
int result = 0 , name_len = 0 , error = 0 ;
31
64
zval * repo = NULL , * payload = NULL ;
32
65
php_git2_t * _repo = NULL ;
33
- long sm = 0 ;
34
- char * name = NULL ;
35
-
66
+ zend_fcall_info fci = empty_fcall_info ;
67
+ zend_fcall_info_cache fcc = empty_fcall_info_cache ;
68
+ php_git2_cb_t * cb = NULL ;
69
+
36
70
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC ,
37
- "rls<void><void> " , & repo , & sm , & name , & name_len , & payload ) == FAILURE ) {
71
+ "rfz " , & repo , & fci , & fcc , & payload ) == FAILURE ) {
38
72
return ;
39
73
}
40
74
41
75
ZEND_FETCH_RESOURCE (_repo , php_git2_t * , & repo , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
42
- //result = git_submodule_foreach(PHP_GIT2_V(_repo, repository), sm, name, cb);
76
+ if (php_git2_cb_init (& cb , & fci , & fcc , payload TSRMLS_CC )) {
77
+ RETURN_FALSE ;
78
+ }
79
+ result = git_submodule_foreach (PHP_GIT2_V (_repo , repository ), php_git2_git_submodule_foreach_cb , cb );
80
+ php_git2_cb_free (cb );
43
81
RETURN_LONG (result );
44
82
}
45
83
/* }}} */
@@ -139,7 +177,7 @@ PHP_FUNCTION(git_submodule_owner)
139
177
140
178
ZEND_FETCH_RESOURCE (_submodule , php_git2_t * , & submodule , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
141
179
result = git_submodule_owner (PHP_GIT2_V (_submodule , submodule ));
142
- if (php_git2_make_resource (& __result , PHP_GIT2_TYPE_SUBMODULE , result , 1 TSRMLS_CC )) {
180
+ if (php_git2_make_resource (& __result , PHP_GIT2_TYPE_REPOSITORY , result , 0 TSRMLS_CC )) {
143
181
RETURN_FALSE ;
144
182
}
145
183
ZVAL_RESOURCE (return_value , GIT2_RVAL_P (__result ));
@@ -223,7 +261,7 @@ PHP_FUNCTION(git_submodule_set_url)
223
261
}
224
262
/* }}} */
225
263
226
- /* {{{ proto resource git_submodule_index_id(resource $submodule)
264
+ /* {{{ proto string git_submodule_index_id(resource $submodule)
227
265
*/
228
266
PHP_FUNCTION (git_submodule_index_id )
229
267
{
@@ -244,7 +282,7 @@ PHP_FUNCTION(git_submodule_index_id)
244
282
}
245
283
/* }}} */
246
284
247
- /* {{{ proto resource git_submodule_head_id(resource $submodule)
285
+ /* {{{ proto string git_submodule_head_id(resource $submodule)
248
286
*/
249
287
PHP_FUNCTION (git_submodule_head_id )
250
288
{
@@ -265,7 +303,7 @@ PHP_FUNCTION(git_submodule_head_id)
265
303
}
266
304
/* }}} */
267
305
268
- /* {{{ proto resource git_submodule_wd_id(resource $submodule)
306
+ /* {{{ proto string git_submodule_wd_id(resource $submodule)
269
307
*/
270
308
PHP_FUNCTION (git_submodule_wd_id )
271
309
{
@@ -286,7 +324,7 @@ PHP_FUNCTION(git_submodule_wd_id)
286
324
}
287
325
/* }}} */
288
326
289
- /* {{{ proto resource git_submodule_ignore(resource $submodule)
327
+ /* {{{ proto long git_submodule_ignore(resource $submodule)
290
328
*/
291
329
PHP_FUNCTION (git_submodule_ignore )
292
330
{
@@ -301,26 +339,27 @@ PHP_FUNCTION(git_submodule_ignore)
301
339
302
340
ZEND_FETCH_RESOURCE (_submodule , php_git2_t * , & submodule , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
303
341
result = git_submodule_ignore (PHP_GIT2_V (_submodule , submodule ));
304
- /* TODO(chobie): implement this */
342
+ RETURN_LONG ( result );
305
343
}
306
344
/* }}} */
307
345
308
- /* {{{ proto resource git_submodule_set_ignore(resource $submodule, $ignore)
346
+ /* {{{ proto long git_submodule_set_ignore(resource $submodule, $ignore)
309
347
*/
310
348
PHP_FUNCTION (git_submodule_set_ignore )
311
349
{
312
350
git_submodule_ignore_t * result = NULL ;
313
- zval * submodule = NULL , * ignore = NULL ;
351
+ zval * submodule = NULL ;
314
352
php_git2_t * _submodule = NULL ;
353
+ long ignore = 0 ;
315
354
316
355
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC ,
317
- "r<git_submodule_ignore_t> " , & submodule , & ignore ) == FAILURE ) {
356
+ "rl " , & submodule , & ignore ) == FAILURE ) {
318
357
return ;
319
358
}
320
359
321
360
ZEND_FETCH_RESOURCE (_submodule , php_git2_t * , & submodule , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
322
361
result = git_submodule_set_ignore (PHP_GIT2_V (_submodule , submodule ), ignore );
323
- /* TODO(chobie): implement this */
362
+ RETURN_LONG ( result );
324
363
}
325
364
/* }}} */
326
365
@@ -339,7 +378,7 @@ PHP_FUNCTION(git_submodule_update)
339
378
340
379
ZEND_FETCH_RESOURCE (_submodule , php_git2_t * , & submodule , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
341
380
result = git_submodule_update (PHP_GIT2_V (_submodule , submodule ));
342
- /* TODO(chobie): implement this */
381
+ RETURN_LONG ( result );
343
382
}
344
383
/* }}} */
345
384
@@ -348,17 +387,18 @@ PHP_FUNCTION(git_submodule_update)
348
387
PHP_FUNCTION (git_submodule_set_update )
349
388
{
350
389
git_submodule_update_t * result = NULL ;
351
- zval * submodule = NULL , * update = NULL ;
390
+ zval * submodule = NULL ;
352
391
php_git2_t * _submodule = NULL ;
392
+ long update = 0 ;
353
393
354
394
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC ,
355
- "r<git_submodule_update_t> " , & submodule , & update ) == FAILURE ) {
395
+ "rl " , & submodule , & update ) == FAILURE ) {
356
396
return ;
357
397
}
358
398
359
399
ZEND_FETCH_RESOURCE (_submodule , php_git2_t * , & submodule , -1 , PHP_GIT2_RESOURCE_NAME , git2_resource_handle );
360
400
result = git_submodule_set_update (PHP_GIT2_V (_submodule , submodule ), update );
361
- /* TODO(chobie): implement this */
401
+ RETURN_LONG ( result );
362
402
}
363
403
/* }}} */
364
404
0 commit comments