1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- How do I use APR'ized programs in connection with programs that don't
- use APR? These darn incomplete types don't let me fill out the APR types.
- The APR developers acknowledge that most programs are not using APR, and
- we don't expect them to migrate to using APR just because APR has been
- released. So, we have provided a way for non-APR'ized programs to interact
- very cleanly with APR.
- There are a set of functions, all documented in fspr_portable.h, which allow
- a programmer to either get a native type from an APR type, or to setup an
- APR type from a native type.
- For example, if you are writing an add-on to another program that does not use
- APR for file I/O, but you (in your infinite wisdom) want to use APR to make
- sure your section is portable. Assume the program provides a type foo_t with
- a file descriptor in it (fd).
- void function_using_apr(foo_t non_fspr_struct, ap_pool_t *p)
- {
- ap_file_t *fspr_file = NULL;
- ap_put_os_file(&fspr_file, &non_fspr_struct->fd, p);
- ...
- }
- There are portable functions for each APR incomplete type. They are all
- called ap_put_os_foobar(), and they each take the same basic arguments, a
- pointer to a pointer to the incomplete type (the last pointer in that list
- should be NULL), a pointer to the native type, and a pool. Each of these can
- be found in fspr_portable.h.
- If you have to do the exact opposite (take an APR type and convert it to a
- native type, there are functions for that too. For example:
- void function_not_using_apr(fspr_file_t *fspr_file)
- {
- int unix_file_desc;
- ap_get_os_file(&unix_file_desc, fspr_file);
-
- ...
- }
- For each ap_put_os_foobar, there is a corresponding ap_get_os_file. These are
- also documented in fspr_portable.h.
|