Skip to content

Commit 6241738

Browse files
committed
llist refactoring
1 parent 170782b commit 6241738

File tree

4 files changed

+10
-207
lines changed

4 files changed

+10
-207
lines changed

src/appserver.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,12 @@ static void php_appserver_shutdown_globals (zend_appserver_globals *appserver_gl
143143
static void php_appserver_init_globals(zend_appserver_globals *appserver_globals)
144144
{
145145

146-
/* Override header generation in SAPI */
146+
/* Override header generation in SAPI
147147
if (sapi_module.header_handler != appserver_header_handler) {
148148
appserver_orig_header_handler = sapi_module.header_handler;
149149
sapi_module.header_handler = appserver_header_handler;
150150
}
151+
*/
151152

152153
appserver_globals->headers = NULL;
153154

src/appserver.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
echo "SAPI_TYPE: " . PHP_SAPI;
77
echo PHP_EOL . "==========================================". PHP_EOL;
88

9+
echo "CALL headers_list()" . PHP_EOL;
10+
echo var_export(headers_list(), true);
11+
echo PHP_EOL . "==========================================". PHP_EOL;
912

10-
11-
echo var_export(appserver_get_headers(), true);
13+
echo "CALL appserver_get_headers()" . PHP_EOL;
14+
echo var_export(appserver_get_headers(), true);
15+
echo PHP_EOL . "==========================================". PHP_EOL;

src/appserver_llist.c

Lines changed: 1 addition & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -10,164 +10,7 @@
1010

1111
#include "appserver_llist.h"
1212

13-
14-
appserver_llist *appserver_llist_alloc(appserver_llist_dtor dtor)
15-
{
16-
appserver_llist *l;
17-
18-
l = malloc(sizeof(appserver_llist));
19-
appserver_llist_init(l, dtor);
20-
21-
return l;
22-
}
23-
24-
void appserver_llist_init(appserver_llist *l, appserver_llist_dtor dtor)
25-
{
26-
l->size = 0;
27-
l->dtor = dtor;
28-
l->head = NULL;
29-
l->tail = NULL;
30-
}
31-
32-
int appserver_llist_insert_next(appserver_llist *l, appserver_llist_element *e, const void *p)
33-
{
34-
appserver_llist_element *ne;
35-
36-
if (!e) {
37-
e = APPSERVER_LLIST_TAIL(l);
38-
}
39-
40-
ne = (appserver_llist_element *) malloc(sizeof(appserver_llist_element));
41-
ne->ptr = (void *) p;
42-
if (l->size == 0) {
43-
l->head = ne;
44-
l->head->prev = NULL;
45-
l->head->next = NULL;
46-
l->tail = ne;
47-
} else {
48-
ne->next = e->next;
49-
ne->prev = e;
50-
if (e->next) {
51-
e->next->prev = ne;
52-
} else {
53-
l->tail = ne;
54-
}
55-
e->next = ne;
56-
}
57-
58-
++l->size;
59-
60-
return 1;
61-
}
62-
63-
int appserver_llist_insert_prev(appserver_llist *l, appserver_llist_element *e, const void *p)
64-
{
65-
appserver_llist_element *ne;
66-
67-
if (!e) {
68-
e = APPSERVER_LLIST_HEAD(l);
69-
}
70-
71-
ne = (appserver_llist_element *) malloc(sizeof(appserver_llist_element));
72-
ne->ptr = (void *) p;
73-
if (l->size == 0) {
74-
l->head = ne;
75-
l->head->prev = NULL;
76-
l->head->next = NULL;
77-
l->tail = ne;
78-
} else {
79-
ne->next = e;
80-
ne->prev = e->prev;
81-
if (e->prev)
82-
e->prev->next = ne;
83-
else
84-
l->head = ne;
85-
e->prev = ne;
86-
}
87-
88-
++l->size;
89-
90-
return 0;
91-
}
92-
93-
int appserver_llist_remove(appserver_llist *l, appserver_llist_element *e, void *user)
94-
{
95-
if (e == NULL || l->size == 0)
96-
return 0;
97-
98-
if (e == l->head) {
99-
l->head = e->next;
100-
101-
if (l->head == NULL)
102-
l->tail = NULL;
103-
else
104-
e->next->prev = NULL;
105-
} else {
106-
e->prev->next = e->next;
107-
if (!e->next)
108-
l->tail = e->prev;
109-
else
110-
e->next->prev = e->prev;
111-
}
112-
113-
if (l->dtor) {
114-
l->dtor(user, e->ptr);
115-
}
116-
free(e);
117-
--l->size;
118-
119-
return 0;
120-
}
121-
122-
int appserver_llist_remove_next(appserver_llist *l, appserver_llist_element *e, void *user)
123-
{
124-
return appserver_llist_remove(l, e->next, user);
125-
}
126-
127-
int appserver_llist_remove_prev(appserver_llist *l, appserver_llist_element *e, void *user)
128-
{
129-
return appserver_llist_remove(l, e->prev, user);
130-
}
131-
132-
appserver_llist_element *appserver_llist_jump(appserver_llist *l, int where, int pos)
133-
{
134-
appserver_llist_element *e=NULL;
135-
int i;
136-
137-
if (where == LIST_HEAD) {
138-
e = APPSERVER_LLIST_HEAD(l);
139-
for (i = 0; i < pos; ++i) {
140-
e = APPSERVER_LLIST_NEXT(e);
141-
}
142-
}
143-
else if (where == LIST_TAIL) {
144-
e = APPSERVER_LLIST_TAIL(l);
145-
for (i = 0; i < pos; ++i) {
146-
e = APPSERVER_LLIST_PREV(e);
147-
}
148-
}
149-
150-
return e;
151-
}
152-
153-
size_t appserver_llist_count(appserver_llist *l)
154-
{
155-
return l->size;
156-
}
157-
158-
void appserver_llist_empty(appserver_llist *l, void *user)
159-
{
160-
while (appserver_llist_count(l) > 0) {
161-
appserver_llist_remove(l, APPSERVER_LLIST_TAIL(l), user);
162-
}
163-
}
164-
165-
void appserver_llist_destroy(appserver_llist *l, void *user)
166-
{
167-
appserver_llist_empty(l, user);
168-
169-
free (l);
170-
}
13+
// implementation follows
17114

17215
/*
17316
* Local Variables:

src/appserver_llist.h

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,51 +10,6 @@
1010

1111
#include <stddef.h>
1212

13-
typedef void (*appserver_llist_dtor)(void *, void *);
14-
15-
typedef struct _appserver_llist_element {
16-
void *ptr;
17-
18-
struct _appserver_llist_element *prev;
19-
struct _appserver_llist_element *next;
20-
} appserver_llist_element;
21-
22-
typedef struct _appserver_llist {
23-
appserver_llist_element *head;
24-
appserver_llist_element *tail;
25-
26-
appserver_llist_dtor dtor;
27-
28-
size_t size;
29-
} appserver_llist;
30-
31-
appserver_llist *appserver_llist_alloc(appserver_llist_dtor dtor);
32-
void appserver_llist_init(appserver_llist *l, appserver_llist_dtor dtor);
33-
int appserver_llist_insert_next(appserver_llist *l, appserver_llist_element *e, const void *p);
34-
int appserver_llist_insert_prev(appserver_llist *l, appserver_llist_element *e, const void *p);
35-
int appserver_llist_remove(appserver_llist *l, appserver_llist_element *e, void *user);
36-
int appserver_llist_remove_next(appserver_llist *l, appserver_llist_element *e, void *user);
37-
38-
appserver_llist_element *appserver_llist_jump(appserver_llist *l, int where, int pos);
39-
size_t appserver_llist_count(appserver_llist *l);
40-
void appserver_llist_empty(appserver_llist *l, void *user);
41-
void appserver_llist_destroy(appserver_llist *l, void *user);
42-
43-
#if !defined(LIST_HEAD)
44-
#define LIST_HEAD 0
45-
#endif
46-
47-
#if !defined(LIST_TAIL)
48-
#define LIST_TAIL 1
49-
#endif
50-
51-
#define APPSERVER_LLIST_HEAD(__l) ((__l)->head)
52-
#define APPSERVER_LLIST_TAIL(__l) ((__l)->tail)
53-
#define APPSERVER_LLIST_NEXT(__e) ((__e)->next)
54-
#define APPSERVER_LLIST_PREV(__e) ((__e)->prev)
55-
#define APPSERVER_LLIST_VALP(__e) ((__e)->ptr)
56-
#define APPSERVER_LLIST_IS_TAIL(__e) ((__e)->next ? 0 : 1)
57-
#define APPSERVER_LLIST_IS_HEAD(__e) ((__e)->prev ? 0 : 1)
58-
#define APPSERVER_LLIST_COUNT(__l) ((__l)->size)
13+
// implementation follows
5914

6015
#endif /* __APPSERVER_LLIST_H__ */

0 commit comments

Comments
 (0)