Changeset 5146:716400712348 in roaraudio for libroar/error.c
- Timestamp:
- 10/15/11 12:48:07 (13 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/error.c
r5097 r5146 45 45 int roar_errno = ROAR_ERROR_NONE; 46 46 47 struct roar_error_frame * roar_err_errorframe(void) { 48 static struct roar_error_frame frame = { 49 .version = 0, 50 .cmd = -1, 51 .ra_errno = ROAR_ERROR_UNKNOWN, 52 .ra_suberrno = -1, 53 .p_errno = -1, 54 .flags = 0, 55 .datalen = 0, 56 .data = NULL 57 }; 58 59 return &frame; 60 } 61 47 62 int roar_err_int(struct roar_error_frame * frame) { 48 if ( frame == NULL ) 63 roar_debug_warn_obsolete("roar_err_int", "roar_err_init", NULL); 64 return roar_err_init(frame); 65 } 66 int roar_err_init(struct roar_error_frame * frame) { 67 if ( frame == NULL ) { 68 roar_err_set(ROAR_ERROR_FAULT); 49 69 return -1; 70 } 50 71 51 72 memset(frame, 0, sizeof(struct roar_error_frame)); 52 73 53 74 frame->cmd = -1; 54 frame->ra_errno = -1;75 frame->ra_errno = ROAR_ERROR_UNKNOWN; 55 76 frame->ra_suberrno = -1; 56 77 frame->p_errno = -1; 78 frame->datalen = 0; 79 frame->data = NULL; 57 80 58 81 return 0; 59 82 } 60 83 84 61 85 void * roar_err_buildmsg(struct roar_message * mes, struct roar_error_frame * frame) { 86 roar_debug_warn_obsolete("roar_err_buildmsg", "roar_err_buildmsg2", NULL); 87 return roar_err_buildmsg2(mes, NULL, frame); 88 } 89 void * roar_err_buildmsg2(struct roar_message * mes, void ** data, struct roar_error_frame * frame) { 90 char * databuf = NULL; 62 91 int16_t * d; 63 64 if ( mes == NULL || frame == NULL ) 92 size_t datalen; 93 94 if ( mes == NULL || frame == NULL ) { 95 roar_err_set(ROAR_ERROR_FAULT); 65 96 return NULL; 97 } 98 99 if ( data != NULL ) 100 *data = NULL; 101 102 datalen = 8 + frame->datalen; 103 if ( datalen > LIBROAR_BUFFER_MSGDATA ) { 104 if ( data == NULL ) { 105 roar_err_set(ROAR_ERROR_FAULT); 106 return NULL; 107 } 108 109 roar_err_clear_errno(); 110 *data = malloc(datalen); 111 roar_err_from_errno(); 112 if ( *data == NULL ) 113 return NULL; 114 115 databuf = *data; 116 } else { 117 databuf = mes->data; 118 } 66 119 67 120 memset(mes, 0, sizeof(struct roar_message)); 68 69 d = (int16_t*)mes->data; 70 71 mes->datalen = 8 + frame->datalen; 72 frame->data = &(mes->data[8]); 73 74 mes->data[0] = 0; // version. 75 mes->data[1] = frame->cmd; 76 mes->data[2] = frame->ra_errno; 77 mes->data[3] = frame->ra_suberrno; 121 memset(databuf, 0, mes->datalen); 122 123 mes->datalen = datalen; 124 125 d = (int16_t*)databuf; 126 127 frame->data = &(databuf[8]); 128 129 databuf[0] = 0; // version. 130 databuf[1] = frame->cmd; 131 databuf[2] = frame->ra_errno; 132 databuf[3] = frame->ra_suberrno; 78 133 d[2] = ROAR_HOST2NET16(frame->p_errno); 79 134 d[3] = ROAR_HOST2NET16(frame->flags); … … 83 138 84 139 int roar_err_parsemsg(struct roar_message * mes, struct roar_error_frame * frame) { 140 roar_debug_warn_obsolete("roar_err_parsemsg", "roar_err_parsemsg", NULL); 141 return roar_err_parsemsg2(mes, NULL, frame); 142 } 143 int roar_err_parsemsg2(struct roar_message * mes, void * data, struct roar_error_frame * frame) { 144 char * databuf = (char *)data; 85 145 int16_t * d; 86 146 87 if ( mes == NULL || frame == NULL ) 147 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 148 mes, (int)mes->datalen, mes->data, data, frame); 149 150 if ( mes == NULL || frame == NULL ) { 151 roar_err_set(ROAR_ERROR_FAULT); 152 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = -1 // error=FAULT", 153 mes, (int)mes->datalen, mes->data, data, frame); 88 154 return -1; 89 90 d = (int16_t*)mes->data; 91 92 if ( mes->datalen < 8 ) 155 } 156 157 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 158 mes, (int)mes->datalen, mes->data, data, frame); 159 160 if ( databuf == NULL ) 161 databuf = mes->data; 162 163 d = (int16_t*)databuf; 164 165 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 166 mes, (int)mes->datalen, mes->data, data, frame); 167 168 if ( mes->datalen < 8 ) { 169 roar_err_set(ROAR_ERROR_MSGSIZE); 170 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = -1 // error=MSGSIZE", 171 mes, (int)mes->datalen, mes->data, data, frame); 93 172 return -1; 94 95 if ( mes->data[0] != 0 ) 173 } 174 175 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 176 mes, (int)mes->datalen, mes->data, data, frame); 177 178 if ( databuf[0] != 0 ) { 179 roar_err_set(ROAR_ERROR_NSVERSION); 180 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = -1 // error=NSVERSION", 181 mes, (int)mes->datalen, mes->data, data, frame); 96 182 return -1; 97 98 frame->cmd = mes->data[1]; 99 frame->ra_errno = mes->data[2]; 100 frame->ra_suberrno = mes->data[3]; 183 } 184 185 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = ?", 186 mes, (int)mes->datalen, mes->data, data, frame); 187 188 frame->cmd = databuf[1]; 189 frame->ra_errno = databuf[2]; 190 frame->ra_suberrno = databuf[3]; 101 191 frame->p_errno = ROAR_NET2HOST16(d[2]); 102 192 frame->flags = ROAR_NET2HOST16(d[3]); 103 193 104 194 frame->datalen = mes->datalen - 8; 105 frame->data = &(mes->data[8]); 106 195 frame->data = &(databuf[8]); 196 197 ROAR_DBG("roar_err_parsemsg2(mes=%p{.datalen=%i, .data=%p}, data=%p, frame=%p) = 0", 198 mes, (int)mes->datalen, mes->data, data, frame); 107 199 return 0; 108 200 } … … 128 220 int * err = roar_errno2(); 129 221 130 // NOTE: _NEVER_ call ROAR_{DBG,INFO,WARN,ERRO }() in here! (will result in endless loop)222 // NOTE: _NEVER_ call ROAR_{DBG,INFO,WARN,ERROR}() in here! (will result in endless loop) 131 223 //printf("*err=%i, errno=%i\n", *err, (int)errno); 132 224
Note: See TracChangeset
for help on using the changeset viewer.