Changeset 5146:716400712348 in roaraudio for libroar/error.c


Ignore:
Timestamp:
10/15/11 12:48:07 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Moved error frame handling into proto functions (pr0)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/error.c

    r5097 r5146  
    4545int roar_errno = ROAR_ERROR_NONE; 
    4646 
     47struct 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 
    4762int    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} 
     66int    roar_err_init(struct roar_error_frame * frame) { 
     67 if ( frame == NULL ) { 
     68  roar_err_set(ROAR_ERROR_FAULT); 
    4969  return -1; 
     70 } 
    5071 
    5172 memset(frame, 0, sizeof(struct roar_error_frame)); 
    5273 
    5374 frame->cmd         = -1; 
    54  frame->ra_errno    = -1; 
     75 frame->ra_errno    = ROAR_ERROR_UNKNOWN; 
    5576 frame->ra_suberrno = -1; 
    5677 frame->p_errno     = -1; 
     78 frame->datalen     =  0; 
     79 frame->data        = NULL; 
    5780 
    5881 return 0; 
    5982} 
    6083 
     84 
    6185void * 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} 
     89void * roar_err_buildmsg2(struct roar_message * mes, void ** data, struct roar_error_frame * frame) { 
     90 char * databuf = NULL; 
    6291 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); 
    6596  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 } 
    66119 
    67120 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; 
    78133 d[2]            = ROAR_HOST2NET16(frame->p_errno); 
    79134 d[3]            = ROAR_HOST2NET16(frame->flags); 
     
    83138 
    84139int    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} 
     143int    roar_err_parsemsg2(struct roar_message * mes, void *  data, struct roar_error_frame * frame) { 
     144 char * databuf = (char *)data; 
    85145 int16_t * d; 
    86146 
    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); 
    88154  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); 
    93172  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); 
    96182  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]; 
    101191 frame->p_errno     = ROAR_NET2HOST16(d[2]); 
    102192 frame->flags       = ROAR_NET2HOST16(d[3]); 
    103193 
    104194 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); 
    107199 return 0; 
    108200} 
     
    128220 int * err = roar_errno2(); 
    129221 
    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) 
    131223 //printf("*err=%i, errno=%i\n", *err, (int)errno); 
    132224 
Note: See TracChangeset for help on using the changeset viewer.