1
+
2
+ /*
3
+ * Copyright (C) Yichun Zhang (agentzh)
4
+ */
5
+
6
+
7
+ #ifndef DDEBUG
1
8
#define DDEBUG 0
9
+ #endif
2
10
#include "ddebug.h"
3
11
4
- #include "ngx_http_array_var_util.h"
5
12
13
+ #include "ngx_http_array_var_util.h"
6
14
#include <ndk.h>
7
15
16
+
8
17
static ngx_str_t ngx_http_array_it_key = ngx_string ("array_it" );
9
18
19
+
10
20
typedef struct {
11
21
ngx_uint_t nargs ;
12
-
13
22
} ngx_http_array_split_data_t ;
14
23
24
+
15
25
typedef struct {
16
- ngx_flag_t in_place ;
26
+ unsigned in_place ;
17
27
ngx_http_complex_value_t * template ;
18
28
ngx_int_t array_it_index ;
19
-
20
29
} ngx_http_array_map_data_t ;
21
30
22
- typedef struct {
23
- ngx_flag_t in_place ;
24
31
32
+ typedef struct {
33
+ unsigned in_place ;
25
34
} ngx_http_array_map_op_data_t ;
26
35
27
36
28
37
static char * ngx_http_array_split (ngx_conf_t * cf , ngx_command_t * cmd ,
29
- void * conf );
30
-
38
+ void * conf );
31
39
static char * ngx_http_array_map (ngx_conf_t * cf , ngx_command_t * cmd ,
32
- void * conf );
33
-
40
+ void * conf );
34
41
static char * ngx_http_array_map_op (ngx_conf_t * cf , ngx_command_t * cmd ,
35
- void * conf );
36
-
42
+ void * conf );
37
43
static char * ngx_http_array_join (ngx_conf_t * cf , ngx_command_t * cmd ,
38
- void * conf );
39
-
44
+ void * conf );
40
45
static ngx_int_t ngx_http_array_var_split (ngx_http_request_t * r ,
41
- ngx_str_t * res , ngx_http_variable_value_t * v , void * data );
42
-
46
+ ngx_str_t * res , ngx_http_variable_value_t * v , void * data );
43
47
static ngx_int_t ngx_http_array_var_map (ngx_http_request_t * r ,
44
- ngx_str_t * res , ngx_http_variable_value_t * v , void * data );
45
-
48
+ ngx_str_t * res , ngx_http_variable_value_t * v , void * data );
46
49
static ngx_int_t ngx_http_array_var_map_op (ngx_http_request_t * r ,
47
- ngx_str_t * res , ngx_http_variable_value_t * v , void * data );
48
-
50
+ ngx_str_t * res , ngx_http_variable_value_t * v , void * data );
49
51
static ngx_int_t ngx_http_array_var_join (ngx_http_request_t * r ,
50
- ngx_str_t * res , ngx_http_variable_value_t * v );
52
+ ngx_str_t * res , ngx_http_variable_value_t * v );
51
53
52
54
53
55
static ngx_command_t ngx_http_array_var_commands [] = {
54
56
{
55
57
ngx_string ("array_split" ),
56
58
NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_SIF_CONF
57
- |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF |NGX_CONF_2MORE ,
59
+ |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF |NGX_CONF_2MORE ,
58
60
ngx_http_array_split ,
59
61
0 ,
60
62
0 ,
@@ -63,7 +65,8 @@ static ngx_command_t ngx_http_array_var_commands[] = {
63
65
{
64
66
ngx_string ("array_map" ),
65
67
NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_SIF_CONF
66
- |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF |NGX_CONF_TAKE23 ,
68
+ |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF
69
+ |NGX_CONF_TAKE23 ,
67
70
ngx_http_array_map ,
68
71
0 ,
69
72
0 ,
@@ -72,7 +75,8 @@ static ngx_command_t ngx_http_array_var_commands[] = {
72
75
{
73
76
ngx_string ("array_map_op" ),
74
77
NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_SIF_CONF
75
- |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF |NGX_CONF_TAKE23 ,
78
+ |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF
79
+ |NGX_CONF_TAKE23 ,
76
80
ngx_http_array_map_op ,
77
81
0 ,
78
82
0 ,
@@ -81,7 +85,8 @@ static ngx_command_t ngx_http_array_var_commands[] = {
81
85
{
82
86
ngx_string ("array_join" ),
83
87
NGX_HTTP_MAIN_CONF |NGX_HTTP_SRV_CONF |NGX_HTTP_SIF_CONF
84
- |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF |NGX_CONF_TAKE23 ,
88
+ |NGX_HTTP_LOC_CONF |NGX_HTTP_LIF_CONF
89
+ |NGX_CONF_TAKE23 ,
85
90
ngx_http_array_join ,
86
91
0 ,
87
92
0 ,
@@ -109,16 +114,16 @@ static ngx_http_module_t ngx_http_array_var_module_ctx = {
109
114
110
115
ngx_module_t ngx_http_array_var_module = {
111
116
NGX_MODULE_V1 ,
112
- & ngx_http_array_var_module_ctx , // module context
113
- ngx_http_array_var_commands , // module directives
114
- NGX_HTTP_MODULE , // module type
115
- NULL , // init master
116
- NULL , // init module
117
- NULL , // init process
118
- NULL , // init thread
119
- NULL , // exit thread
120
- NULL , // exit process
121
- NULL , // exit master
117
+ & ngx_http_array_var_module_ctx , /* module context */
118
+ ngx_http_array_var_commands , /* module directives */
119
+ NGX_HTTP_MODULE , /* module type */
120
+ NULL , /* init master */
121
+ NULL , /* init module */
122
+ NULL , /* init process */
123
+ NULL , /* init thread */
124
+ NULL , /* exit thread */
125
+ NULL , /* exit process */
126
+ NULL , /* exit master */
122
127
NGX_MODULE_V1_PADDING
123
128
};
124
129
@@ -414,22 +419,22 @@ ngx_http_array_join(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
414
419
415
420
416
421
static ngx_int_t
417
- ngx_http_array_var_split (ngx_http_request_t * r ,
418
- ngx_str_t * res , ngx_http_variable_value_t * v , void * data )
422
+ ngx_http_array_var_split (ngx_http_request_t * r , ngx_str_t * res ,
423
+ ngx_http_variable_value_t * v , void * data )
419
424
{
420
425
ngx_http_array_split_data_t * conf = data ;
421
426
ngx_http_variable_value_t * sep , * str ;
422
427
ngx_str_t * s ;
423
428
u_char * pos , * end , * last ;
424
- ssize_t max , i ;
429
+ ssize_t max , i , len = 4 ;
425
430
ngx_array_t * array ;
426
431
427
432
if (conf -> nargs == 3 ) {
428
433
max = ngx_atosz (v [2 ].data , v [2 ].len );
429
434
if (max == NGX_ERROR ) {
430
435
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
431
- "array_split: invalid max items: \"%V\"" ,
432
- & v [2 ]);
436
+ "array_split: invalid max items: \"%V\"" ,
437
+ & v [2 ]);
433
438
434
439
return NGX_ERROR ;
435
440
}
@@ -438,13 +443,10 @@ ngx_http_array_var_split(ngx_http_request_t *r,
438
443
}
439
444
440
445
if (max ) {
441
- array = ngx_array_create (r -> pool , max ,
442
- sizeof (ngx_str_t ));
443
- } else {
444
- array = ngx_array_create (r -> pool , 4 ,
445
- sizeof (ngx_str_t ));
446
+ len = max ;
446
447
}
447
448
449
+ array = ngx_array_create (r -> pool , len , sizeof (ngx_str_t ));
448
450
if (array == NULL ) {
449
451
return NGX_ERROR ;
450
452
}
@@ -521,8 +523,8 @@ ngx_http_array_var_split(ngx_http_request_t *r,
521
523
522
524
523
525
static ngx_int_t
524
- ngx_http_array_var_map (ngx_http_request_t * r ,
525
- ngx_str_t * res , ngx_http_variable_value_t * v , void * data )
526
+ ngx_http_array_var_map (ngx_http_request_t * r , ngx_str_t * res ,
527
+ ngx_http_variable_value_t * v , void * data )
526
528
{
527
529
ngx_http_array_map_data_t * conf = data ;
528
530
ngx_http_variable_value_t * array_it ;
@@ -540,8 +542,8 @@ ngx_http_array_var_map(ngx_http_request_t *r,
540
542
541
543
if (v [0 ].len != sizeof (ngx_array_t )) {
542
544
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
543
- "array_join: invalid array variable value in the 2nd "
544
- "argument: \"%.*s\"" , & v [0 ]);
545
+ "array_join: invalid array variable value in the 2nd "
546
+ "argument: \"%.*s\"" , & v [0 ]);
545
547
546
548
return NGX_ERROR ;
547
549
}
@@ -554,9 +556,10 @@ ngx_http_array_var_map(ngx_http_request_t *r,
554
556
555
557
if ( conf -> in_place ) {
556
558
new_array = array ;
559
+
557
560
} else {
558
561
new_array = ngx_array_create (r -> pool , array -> nelts ,
559
- sizeof (ngx_str_t ));
562
+ sizeof (ngx_str_t ));
560
563
if (new_array == NULL ) {
561
564
return NGX_ERROR ;
562
565
}
@@ -602,7 +605,7 @@ ngx_http_array_var_map(ngx_http_request_t *r,
602
605
603
606
static ngx_int_t
604
607
ngx_http_array_var_map_op (ngx_http_request_t * r ,
605
- ngx_str_t * res , ngx_http_variable_value_t * v , void * data )
608
+ ngx_str_t * res , ngx_http_variable_value_t * v , void * data )
606
609
{
607
610
ngx_http_variable_value_t arg ;
608
611
ngx_http_array_map_op_data_t * conf = data ;
@@ -618,17 +621,17 @@ ngx_http_array_var_map_op(ngx_http_request_t *r,
618
621
619
622
if (func == NULL ) {
620
623
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
621
- "array_map_op: directive \"%v\" not found "
622
- "or does not use ndk_set_var_value" ,
623
- & v [0 ]);
624
+ "array_map_op: directive \"%v\" not found "
625
+ "or does not use ndk_set_var_value" ,
626
+ & v [0 ]);
624
627
625
628
return NGX_ERROR ;
626
629
}
627
630
628
631
if (v [1 ].len != sizeof (ngx_array_t )) {
629
632
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
630
- "array_map_op: invalid array variable value in the 2nd "
631
- "argument: \"%.*s\"" , & v [0 ]);
633
+ "array_map_op: invalid array variable value in the 2nd "
634
+ "argument: \"%.*s\"" , & v [0 ]);
632
635
633
636
return NGX_ERROR ;
634
637
}
@@ -642,7 +645,7 @@ ngx_http_array_var_map_op(ngx_http_request_t *r,
642
645
643
646
} else {
644
647
new_array = ngx_array_create (r -> pool , array -> nelts ,
645
- sizeof (ngx_str_t ));
648
+ sizeof (ngx_str_t ));
646
649
if (new_array == NULL ) {
647
650
return NGX_ERROR ;
648
651
}
@@ -679,7 +682,7 @@ ngx_http_array_var_map_op(ngx_http_request_t *r,
679
682
680
683
static ngx_int_t
681
684
ngx_http_array_var_join (ngx_http_request_t * r ,
682
- ngx_str_t * res , ngx_http_variable_value_t * v )
685
+ ngx_str_t * res , ngx_http_variable_value_t * v )
683
686
{
684
687
ngx_http_variable_value_t * sep ;
685
688
ngx_array_t * array ;
@@ -694,8 +697,8 @@ ngx_http_array_var_join(ngx_http_request_t *r,
694
697
695
698
if (v [1 ].len != sizeof (ngx_array_t )) {
696
699
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
697
- "array_join: invalid array variable value in the "
698
- "2nd argument: \"%V\"" , & v [1 ]);
700
+ "array_join: invalid array variable value in the "
701
+ "2nd argument: \"%V\"" , & v [1 ]);
699
702
700
703
return NGX_ERROR ;
701
704
}
@@ -740,11 +743,10 @@ ngx_http_array_var_join(ngx_http_request_t *r,
740
743
741
744
if (p != res -> data + res -> len ) {
742
745
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
743
- "array_join: buffer error" );
746
+ "array_join: buffer error" );
744
747
745
748
return NGX_ERROR ;
746
749
}
747
750
748
751
return NGX_OK ;
749
752
}
750
-
0 commit comments