Changeset 36
- Timestamp:
- 05/30/08 09:57:31
(6 months ago)
- Author:
- jtang
- Message:
Re-indented.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r34 |
r36 |
|
| 35 | 35 | ALL_SUBDIRS = src include bindings/java examples man tests |
|---|
| 36 | 36 | |
|---|
| 37 | | C_INDENT_OPTS = -npro -nbad -bap -nbbb -nbbo -nbc -br -bli0 -bls -c40 -cbi0 -cd40 -cdw -ce -ci8 -cli0 -cp40 -ncs -d0 -nbfda -di1 -nfc1 -nfca -i8 -ip0 -l132 -lp -nlps -npcs -pi0 -nprs -npsl -saf -sai -sbi0 -sob -ss -ts8 -ut |
|---|
| | 37 | C_INDENT_OPTS = -npro -nbad -bap -nbbb -nbbo -nbc -br -bli0 -bls -c40 -cbi0 -cd40 -cdw -ce -ci8 -cli0 -cp40 -ncs -d0 -nbfda -di1 -nfc1 -nfca -i8 -ip0 -l132 -lp -nlps -npcs -pi0 -nprs -npsl -saf -sai -sbi0 -sob -ss -ts8 -ut -T sipc_t |
|---|
| 38 | 38 | |
|---|
| 39 | 39 | all: |
|---|
| r35 |
r36 |
|
| 56 | 56 | |
|---|
| 57 | 57 | /* Free the sipc struct and its contents */ |
|---|
| 58 | | void sipc_close(sipc_t * sipc); |
|---|
| | 58 | void sipc_close(sipc_t *sipc); |
|---|
| 59 | 59 | |
|---|
| 60 | 60 | /* Called by a helper application to destroy an IPC resource. |
|---|
| … | … | |
| 65 | 65 | * This can only be called if sender was specified when sipc_init was called. |
|---|
| 66 | 66 | * returns 0 on success, <0 on failure */ |
|---|
| 67 | | int sipc_send_data(sipc_t * sipc, int msg_len); |
|---|
| | 67 | int sipc_send_data(sipc_t *sipc, int msg_len); |
|---|
| 68 | 68 | |
|---|
| 69 | 69 | /* Blocking call to recieve data. Data will be allocated and filled and |
|---|
| 70 | 70 | * len will be set to the length. Returns 0 on success, <0 on failure */ |
|---|
| 71 | | int sipc_recv_data(sipc_t * sipc, char **data, int *len); |
|---|
| | 71 | int sipc_recv_data(sipc_t *sipc, char **data, int *len); |
|---|
| 72 | 72 | |
|---|
| 73 | 73 | /* Returns a pointer to the data contained within the IPC resource */ |
|---|
| 74 | | char *sipc_get_data_ptr(sipc_t * sipc); |
|---|
| | 74 | char *sipc_get_data_ptr(sipc_t *sipc); |
|---|
| 75 | 75 | |
|---|
| 76 | 76 | /* Prints an error message, accepts printf format string */ |
|---|
| 77 | | void sipc_error(sipc_t * sipc, const char *fmt, ...) |
|---|
| | 77 | void sipc_error(sipc_t *sipc, const char *fmt, ...) |
|---|
| 78 | 78 | __attribute__ ((format(printf, 2, 3))); |
|---|
| 79 | 79 | |
|---|
| … | … | |
| 82 | 82 | |
|---|
| 83 | 83 | /* Receiver calls this when it is done receiving a message in shared memory */ |
|---|
| 84 | | int sipc_shm_recv_done(sipc_t * sipc); |
|---|
| | 84 | int sipc_shm_recv_done(sipc_t *sipc); |
|---|
| 85 | 85 | |
|---|
| 86 | 86 | #endif |
|---|
| r35 |
r36 |
|
| 31 | 31 | |
|---|
| 32 | 32 | /* Receive NOP messages, which will unblock the sender */ |
|---|
| 33 | | int sipc_shm_recv_done(sipc_t * sipc) |
|---|
| | 33 | int sipc_shm_recv_done(sipc_t *sipc) |
|---|
| 34 | 34 | { |
|---|
| 35 | 35 | if (!sipc) |
|---|
| r35 |
r36 |
|
| 29 | 29 | #include "sipc_internal.h" |
|---|
| 30 | 30 | |
|---|
| 31 | | int (*sipc_init_f[SIPC_NUM_TYPES]) (sipc_t * sipc) = { |
|---|
| | 31 | int (*sipc_init_f[SIPC_NUM_TYPES]) (sipc_t *sipc) = { |
|---|
| 32 | 32 | sipc_shm_init, sipc_mqueue_init,}; |
|---|
| 33 | 33 | |
|---|
| … | … | |
| 84 | 84 | } |
|---|
| 85 | 85 | |
|---|
| 86 | | void sipc_close(sipc_t * sipc) |
|---|
| | 86 | void sipc_close(sipc_t *sipc) |
|---|
| 87 | 87 | { |
|---|
| 88 | 88 | if (!sipc) |
|---|
| … | … | |
| 116 | 116 | } |
|---|
| 117 | 117 | |
|---|
| 118 | | char *sipc_get_data_ptr(sipc_t * sipc) |
|---|
| | 118 | char *sipc_get_data_ptr(sipc_t *sipc) |
|---|
| 119 | 119 | { |
|---|
| 120 | 120 | if (!sipc) |
|---|
| … | … | |
| 124 | 124 | } |
|---|
| 125 | 125 | |
|---|
| 126 | | int sipc_send_data(sipc_t * sipc, int msg_len) |
|---|
| | 126 | int sipc_send_data(sipc_t *sipc, int msg_len) |
|---|
| 127 | 127 | { |
|---|
| 128 | 128 | if (!sipc) |
|---|
| … | … | |
| 132 | 132 | } |
|---|
| 133 | 133 | |
|---|
| 134 | | int sipc_recv_data(sipc_t * sipc, char **data, int *len) |
|---|
| | 134 | int sipc_recv_data(sipc_t *sipc, char **data, int *len) |
|---|
| 135 | 135 | { |
|---|
| 136 | 136 | if (!sipc) |
|---|
| … | … | |
| 140 | 140 | } |
|---|
| 141 | 141 | |
|---|
| 142 | | void sipc_error(sipc_t * sipc, const char *fmt, ...) |
|---|
| | 142 | void sipc_error(sipc_t *sipc, const char *fmt, ...) |
|---|
| 143 | 143 | { |
|---|
| 144 | 144 | if (!sipc) |
|---|
| r35 |
r36 |
|
| 38 | 38 | |
|---|
| 39 | 39 | /* Creation functions */ |
|---|
| 40 | | int sipc_mqueue_create(sipc_t * sipc); |
|---|
| 41 | | int sipc_shm_create(sipc_t * sipc); |
|---|
| | 40 | int sipc_mqueue_create(sipc_t *sipc); |
|---|
| | 41 | int sipc_shm_create(sipc_t *sipc); |
|---|
| 42 | 42 | int mqueue_create(key_t key); |
|---|
| 43 | 43 | |
|---|
| 44 | 44 | /* Attach functions */ |
|---|
| 45 | | int sipc_mqueue_attach(sipc_t * sipc); |
|---|
| 46 | | int sipc_shm_attach(sipc_t * sipc); |
|---|
| | 45 | int sipc_mqueue_attach(sipc_t *sipc); |
|---|
| | 46 | int sipc_shm_attach(sipc_t *sipc); |
|---|
| 47 | 47 | |
|---|
| 48 | 48 | /* Detach functions */ |
|---|
| 49 | | void sipc_mqueue_detach(sipc_t * sipc); |
|---|
| 50 | | void sipc_shm_detach(sipc_t * sipc); |
|---|
| | 49 | void sipc_mqueue_detach(sipc_t *sipc); |
|---|
| | 50 | void sipc_shm_detach(sipc_t *sipc); |
|---|
| 51 | 51 | |
|---|
| 52 | 52 | /* Destruction functions */ |
|---|
| … | … | |
| 55 | 55 | |
|---|
| 56 | 56 | /* Initialization functions */ |
|---|
| 57 | | int sipc_mqueue_init(sipc_t * sipc); |
|---|
| 58 | | int sipc_shm_init(sipc_t * sipc); |
|---|
| | 57 | int sipc_mqueue_init(sipc_t *sipc); |
|---|
| | 58 | int sipc_shm_init(sipc_t *sipc); |
|---|
| 59 | 59 | |
|---|
| 60 | 60 | /* all ipc backends must implement all of these functions */ |
|---|
| 61 | 61 | struct sipc_func_table |
|---|
| 62 | 62 | { |
|---|
| 63 | | int (*sipc_create) (sipc_t * sipc); |
|---|
| 64 | | int (*sipc_attach) (sipc_t * sipc); |
|---|
| 65 | | char *(*sipc_get_data_ptr) (sipc_t * sipc); |
|---|
| 66 | | int (*sipc_send_data) (sipc_t * sipc, int msg_len); |
|---|
| 67 | | int (*sipc_recv_data) (sipc_t * sipc, char **data, int *len); |
|---|
| 68 | | void (*sipc_detach) (sipc_t * sipc); |
|---|
| | 63 | int (*sipc_create) (sipc_t *sipc); |
|---|
| | 64 | int (*sipc_attach) (sipc_t *sipc); |
|---|
| | 65 | char *(*sipc_get_data_ptr) (sipc_t *sipc); |
|---|
| | 66 | int (*sipc_send_data) (sipc_t *sipc, int msg_len); |
|---|
| | 67 | int (*sipc_recv_data) (sipc_t *sipc, char **data, int *len); |
|---|
| | 68 | void (*sipc_detach) (sipc_t *sipc); |
|---|
| 69 | 69 | void (*_sipc_error) (const char *fmt, va_list ap); |
|---|
| 70 | 70 | }; |
|---|
| r35 |
r36 |
|
| 50 | 50 | |
|---|
| 51 | 51 | /* Forward decls */ |
|---|
| 52 | | static int get_max_msg(sipc_t * sipc); |
|---|
| 53 | | static int mqueue_send_msg_len(sipc_t * sipc, int msg_len); |
|---|
| 54 | | static int mqueue_send_end_xmit(sipc_t * sipc); |
|---|
| 55 | | static char *split_data(sipc_t * sipc, size_t packet_sz); |
|---|
| | 52 | static int get_max_msg(sipc_t *sipc); |
|---|
| | 53 | static int mqueue_send_msg_len(sipc_t *sipc, int msg_len); |
|---|
| | 54 | static int mqueue_send_end_xmit(sipc_t *sipc); |
|---|
| | 55 | static char *split_data(sipc_t *sipc, size_t packet_sz); |
|---|
| 56 | 56 | static int is_msg_len(struct msgbuf *mbuf); |
|---|
| 57 | 57 | static int is_end_xmit(struct msgbuf *mbuf); |
|---|
| 58 | | static int msg_done(sipc_t * sipc); |
|---|
| | 58 | static int msg_done(sipc_t *sipc); |
|---|
| 59 | 59 | static size_t next_packet_sz(int recv, int max_packet_sz, int msg_len); |
|---|
| 60 | 60 | static size_t next_alloc_sz(int recv, int recv_sz, int max_packet_sz, int msg_len); |
|---|
| 61 | 61 | |
|---|
| 62 | | int sipc_mqueue_init(sipc_t * sipc) |
|---|
| | 62 | int sipc_mqueue_init(sipc_t *sipc) |
|---|
| 63 | 63 | { |
|---|
| 64 | 64 | if (!sipc) |
|---|
| … | … | |
| 79 | 79 | * This function should only be called by a helper application |
|---|
| 80 | 80 | * and not by the sender or reciever. */ |
|---|
| 81 | | int sipc_mqueue_create(sipc_t * sipc) |
|---|
| | 81 | int sipc_mqueue_create(sipc_t *sipc) |
|---|
| 82 | 82 | { |
|---|
| 83 | 83 | int msqid; |
|---|
| … | … | |
| 93 | 93 | } |
|---|
| 94 | 94 | |
|---|
| 95 | | void sipc_mqueue_detach(sipc_t * sipc) |
|---|
| | 95 | void sipc_mqueue_detach(sipc_t *sipc) |
|---|
| 96 | 96 | { |
|---|
| 97 | 97 | free(sipc->data); |
|---|
| … | … | |
| 100 | 100 | |
|---|
| 101 | 101 | /* Attach to an existing message queue. */ |
|---|
| 102 | | int sipc_mqueue_attach(sipc_t * sipc) |
|---|
| | 102 | int sipc_mqueue_attach(sipc_t *sipc) |
|---|
| 103 | 103 | { |
|---|
| 104 | 104 | /* Allocate data member */ |
|---|
| … | … | |
| 120 | 120 | } |
|---|
| 121 | 121 | |
|---|
| 122 | | char *sipc_mqueue_get_data_ptr(sipc_t * sipc) |
|---|
| | 122 | char *sipc_mqueue_get_data_ptr(sipc_t *sipc) |
|---|
| 123 | 123 | { |
|---|
| 124 | 124 | return sipc->data; |
|---|
| … | … | |
| 127 | 127 | /* Sends a message to the queue. |
|---|
| 128 | 128 | * Returns 0 on success, -1 on error */ |
|---|
| 129 | | int sipc_mqueue_send_data(sipc_t * sipc, int msg_len) |
|---|
| | 129 | int sipc_mqueue_send_data(sipc_t *sipc, int msg_len) |
|---|
| 130 | 130 | { |
|---|
| 131 | 131 | int max_packet_sz = SIPC_MQUEUE_MSG_SZ - sizeof(struct msgbuf); |
|---|
| … | … | |
| 180 | 180 | } |
|---|
| 181 | 181 | |
|---|
| 182 | | int sipc_mqueue_recv_data(sipc_t * sipc, char **data, int *len) |
|---|
| | 182 | int sipc_mqueue_recv_data(sipc_t *sipc, char **data, int *len) |
|---|
| 183 | 183 | { |
|---|
| 184 | 184 | int retv = -1, alloc_sz = 0, idx = 0, recv_sz; |
|---|
| … | … | |
| 283 | 283 | /* Gets the maximum allowed size of a message in a message queue. |
|---|
| 284 | 284 | * Returns the maximum allowed size of a message, -1 on error */ |
|---|
| 285 | | static int get_max_msg(sipc_t * sipc) |
|---|
| | 285 | static int get_max_msg(sipc_t *sipc) |
|---|
| 286 | 286 | { |
|---|
| 287 | 287 | FILE *f; |
|---|
| … | … | |
| 304 | 304 | |
|---|
| 305 | 305 | /* Send end of transmission marker */ |
|---|
| 306 | | static int mqueue_send_end_xmit(sipc_t * sipc) |
|---|
| | 306 | static int mqueue_send_end_xmit(sipc_t *sipc) |
|---|
| 307 | 307 | { |
|---|
| 308 | 308 | struct msgbuf mbuf; |
|---|
| … | … | |
| 329 | 329 | } |
|---|
| 330 | 330 | |
|---|
| 331 | | static int mqueue_send_msg_len(sipc_t * sipc, int len) |
|---|
| | 331 | static int mqueue_send_msg_len(sipc_t *sipc, int len) |
|---|
| 332 | 332 | { |
|---|
| 333 | 333 | struct msgbuf *mbuf; |
|---|
| … | … | |
| 376 | 376 | /* Returns 1 if the message has been completely fragmented, |
|---|
| 377 | 377 | * 0 otherwise. */ |
|---|
| 378 | | static int msg_done(sipc_t * sipc) |
|---|
| | 378 | static int msg_done(sipc_t *sipc) |
|---|
| 379 | 379 | { |
|---|
| 380 | 380 | return sipc->copied >= sipc->msg_len ? 1 : 0; |
|---|
| … | … | |
| 385 | 385 | * This function allocates space for the fragmented piece of data. |
|---|
| 386 | 386 | * The caller is responsible for freeign this memory. */ |
|---|
| 387 | | static char *split_data(sipc_t * sipc, size_t packet_sz) |
|---|
| | 387 | static char *split_data(sipc_t *sipc, size_t packet_sz) |
|---|
| 388 | 388 | { |
|---|
| 389 | 389 | size_t remaining = sipc->msg_len - sipc->copied; |
|---|
| r35 |
r36 |
|
| 28 | 28 | #define MQ_NOBLOCK 0 |
|---|
| 29 | 29 | |
|---|
| 30 | | int sipc_mqueue_init(sipc_t * sipc); |
|---|
| 31 | | int sipc_mqueue_connect(sipc_t * sipc); |
|---|
| 32 | | void sipc_mqueue_disconnect(sipc_t * sipc); |
|---|
| 33 | | char *sipc_mqueue_get_data_ptr(sipc_t * sipc); |
|---|
| 34 | | int sipc_mqueue_send_data(sipc_t * sipc, int msg_len); |
|---|
| 35 | | int sipc_mqueue_recv_data(sipc_t * sipc, char **data, int *len); |
|---|
| 36 | | int sipc_mqueue_end_xmit(sipc_t * sipc); |
|---|
| 37 | | void sipc_mqueue_destroy_handle(sipc_t * sipc); |
|---|
| | 30 | int sipc_mqueue_init(sipc_t *sipc); |
|---|
| | 31 | int sipc_mqueue_connect(sipc_t *sipc); |
|---|
| | 32 | void sipc_mqueue_disconnect(sipc_t *sipc); |
|---|
| | 33 | char *sipc_mqueue_get_data_ptr(sipc_t *sipc); |
|---|
| | 34 | int sipc_mqueue_send_data(sipc_t *sipc, int msg_len); |
|---|
| | 35 | int sipc_mqueue_recv_data(sipc_t *sipc, char **data, int *len); |
|---|
| | 36 | int sipc_mqueue_end_xmit(sipc_t *sipc); |
|---|
| | 37 | void sipc_mqueue_destroy_handle(sipc_t *sipc); |
|---|
| 38 | 38 | void sipc_mqueue_error(const char *fmt, va_list ap); |
|---|
| 39 | 39 | |
|---|
| r35 |
r36 |
|
| 50 | 50 | }; |
|---|
| 51 | 51 | |
|---|
| 52 | | int sipc_shm_init(sipc_t * sipc) |
|---|
| | 52 | int sipc_shm_init(sipc_t *sipc) |
|---|
| 53 | 53 | { |
|---|
| 54 | 54 | if (!sipc) |
|---|
| … | … | |
| 61 | 61 | } |
|---|
| 62 | 62 | |
|---|
| 63 | | int sipc_shm_create(sipc_t * sipc) |
|---|
| | 63 | int sipc_shm_create(sipc_t *sipc) |
|---|
| 64 | 64 | { |
|---|
| 65 | 65 | if (!sipc) |
|---|
| … | … | |
| 90 | 90 | } |
|---|
| 91 | 91 | |
|---|
| 92 | | int sipc_shm_attach(sipc_t * sipc) |
|---|
| | 92 | int sipc_shm_attach(sipc_t *sipc) |
|---|
| 93 | 93 | { |
|---|
| 94 | 94 | int flags = 0; |
|---|
| … | … | |
| 125 | 125 | } |
|---|
| 126 | 126 | |
|---|
| 127 | | void sipc_shm_detach(sipc_t * sipc) |
|---|
| | 127 | void sipc_shm_detach(sipc_t *sipc) |
|---|
| 128 | 128 | { |
|---|
| 129 | 129 | if (!sipc) |
|---|
| … | … | |
| 146 | 146 | } |
|---|
| 147 | 147 | |
|---|
| 148 | | char *sipc_shm_get_data_ptr(sipc_t * sipc) |
|---|
| | 148 | char *sipc_shm_get_data_ptr(sipc_t *sipc) |
|---|
| 149 | 149 | { |
|---|
| 150 | 150 | return sipc->data; |
|---|
| … | … | |
| 152 | 152 | |
|---|
| 153 | 153 | /* Sends a DATA_READY marker, followed by 2 NOP markers */ |
|---|
| 154 | | int sipc_shm_send_data(sipc_t * sipc, int msg_len) |
|---|
| | 154 | int sipc_shm_send_data(sipc_t *sipc, int msg_len) |
|---|
| 155 | 155 | { |
|---|
| 156 | 156 | if (!sipc) |
|---|
| … | … | |
| 182 | 182 | * This function will block if the DATA_READY marker is not |
|---|
| 183 | 183 | * present on the queue. */ |
|---|
| 184 | | int sipc_shm_recv_data(sipc_t * sipc, char **data, int *len) |
|---|
| | 184 | int sipc_shm_recv_data(sipc_t *sipc, char **data, int *len) |
|---|
| 185 | 185 | { |
|---|
| 186 | 186 | int mtype = 0; |
|---|
| r35 |
r36 |
|
| 25 | 25 | #include <stdarg.h> |
|---|
| 26 | 26 | |
|---|
| 27 | | int sipc_shm_init(sipc_t * sipc); |
|---|
| 28 | | int sipc_shm_connect(sipc_t * sipc); |
|---|
| 29 | | void sipc_shm_disconnect(sipc_t * sipc); |
|---|
| 30 | | char *sipc_shm_get_data_ptr(sipc_t * sipc); |
|---|
| 31 | | int sipc_shm_send_data(sipc_t * sipc, int msg_len); |
|---|
| 32 | | int sipc_shm_recv_data(sipc_t * sipc, char **data, int *len); |
|---|
| 33 | | int sipc_shm_end_xmit(sipc_t * sipc); |
|---|
| 34 | | void sipc_shm_destroy_handle(sipc_t * sipc); |
|---|
| | 27 | int sipc_shm_init(sipc_t *sipc); |
|---|
| | 28 | int sipc_shm_connect(sipc_t *sipc); |
|---|
| | 29 | void sipc_shm_disconnect(sipc_t *sipc); |
|---|
| | 30 | char *sipc_shm_get_data_ptr(sipc_t *sipc); |
|---|
| | 31 | int sipc_shm_send_data(sipc_t *sipc, int msg_len); |
|---|
| | 32 | int sipc_shm_recv_data(sipc_t *sipc, char **data, int *len); |
|---|
| | 33 | int sipc_shm_end_xmit(sipc_t *sipc); |
|---|
| | 34 | void sipc_shm_destroy_handle(sipc_t *sipc); |
|---|
| 35 | 35 | void sipc_shm_error(const char *fmt, va_list ap); |
|---|
| 36 | 36 | |
|---|
| r35 |
r36 |
|
| 41 | 41 | static sipc_t *writer_ipc; |
|---|
| 42 | 42 | static sipc_t *reader_ipc; |
|---|
| 43 | | static int send_end_xmit(sipc_t * ipc); |
|---|
| | 43 | static int send_end_xmit(sipc_t *ipc); |
|---|
| 44 | 44 | static void do_parent(void); |
|---|
| 45 | 45 | static void do_child(void); |
|---|
| … | … | |
| 219 | 219 | } |
|---|
| 220 | 220 | |
|---|
| 221 | | static int send_end_xmit(sipc_t * ipc) |
|---|
| | 221 | static int send_end_xmit(sipc_t *ipc) |
|---|
| 222 | 222 | { |
|---|
| 223 | 223 | char *data = sipc_get_data_ptr(ipc); |
|---|
| r35 |
r36 |
|
| 46 | 46 | static void do_binary_child(void); |
|---|
| 47 | 47 | static void do_binary_parent(void); |
|---|
| 48 | | static void send_end_xmit(sipc_t * sipc); |
|---|
| | 48 | static void send_end_xmit(sipc_t *sipc); |
|---|
| 49 | 49 | static int verify_data(char *filename, char *recv_data); |
|---|
| 50 | 50 | static inline int END_XMIT(char *data); |
|---|
| … | … | |
| 324 | 324 | } |
|---|
| 325 | 325 | |
|---|
| 326 | | static void send_end_xmit(sipc_t * sipc) |
|---|
| | 326 | static void send_end_xmit(sipc_t *sipc) |
|---|
| 327 | 327 | { |
|---|
| 328 | 328 | char *data = sipc_get_data_ptr(sipc); |
|---|
Download in other formats:
* Generating other formats may take time.