remodel file adding to accept paths, streams and plain data as upload files
[m6w6/ext-http] / php_http_resource_factory.c
1 /*
2 +--------------------------------------------------------------------+
3 | PECL :: http |
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the conditions mentioned |
7 | in the accompanying LICENSE file are met. |
8 +--------------------------------------------------------------------+
9 | Copyright (c) 2004-2011, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 #include "php_http_api.h"
14
15 PHP_HTTP_API php_http_resource_factory_t *php_http_resource_factory_init(php_http_resource_factory_t *f, php_http_resource_factory_ops_t *fops, void *data, void (*dtor)(void *data))
16 {
17 if (!f) {
18 f = emalloc(sizeof(*f));
19 }
20 memset(f, 0, sizeof(*f));
21
22 memcpy(&f->fops, fops, sizeof(*fops));
23
24 f->data = data;
25 f->dtor = dtor;
26
27 return f;
28 }
29
30 PHP_HTTP_API void php_http_resource_factory_dtor(php_http_resource_factory_t *f)
31 {
32 if (f->dtor) {
33 f->dtor(f->data);
34 }
35 }
36 PHP_HTTP_API void php_http_resource_factory_free(php_http_resource_factory_t **f)
37 {
38 if (*f) {
39 php_http_resource_factory_dtor(*f);
40 efree(*f);
41 *f = NULL;
42 }
43 }
44
45 PHP_HTTP_API void *php_http_resource_factory_handle_ctor(php_http_resource_factory_t *f TSRMLS_DC)
46 {
47 if (f->fops.ctor) {
48 return f->fops.ctor(f->data TSRMLS_CC);
49 }
50 return NULL;
51 }
52
53 PHP_HTTP_API void *php_http_resource_factory_handle_copy(php_http_resource_factory_t *f, void *handle TSRMLS_DC)
54 {
55 if (f->fops.copy) {
56 return f->fops.copy(f->data, handle TSRMLS_CC);
57 }
58 return NULL;
59 }
60
61 PHP_HTTP_API void php_http_resource_factory_handle_dtor(php_http_resource_factory_t *f, void *handle TSRMLS_DC)
62 {
63 if (f->fops.dtor) {
64 f->fops.dtor(f->data, handle TSRMLS_CC);
65 }
66 }
67
68 /*
69 * Local variables:
70 * tab-width: 4
71 * c-basic-offset: 4
72 * End:
73 * vim600: noet sw=4 ts=4 fdm=marker
74 * vim<600: noet sw=4 ts=4
75 */
76