Changeset 6029:c25f9d9f78a6 in roaraudio


Ignore:
Timestamp:
07/15/14 11:07:45 (5 years ago)
Author:
phi
Branch:
default
Message:

some smaller improvements in error handling

Location:
libroar
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • libroar/caps.c

    r5961 r6029  
    4848 size_t needlen = 4; 
    4949 
    50  if ( mes == NULL || caps == NULL ) 
    51   return -1; 
     50 if ( mes == NULL || caps == NULL ) { 
     51  roar_err_set(ROAR_ERROR_FAULT); 
     52  return -1; 
     53 } 
    5254 
    5355 needlen += caps->len; 
    5456 
    5557 if ( needlen > sizeof(mes->data) ) { 
    56   if ( data == NULL ) 
     58  if ( data == NULL ) { 
     59   roar_err_set(ROAR_ERROR_FAULT); 
    5760   return -1; 
     61  } 
    5862 
    5963  if ( (*data = roar_mm_malloc(needlen)) == NULL ) 
     
    8286 char * datap; 
    8387 
    84  if ( mes == NULL || caps == NULL ) 
    85   return -1; 
     88 if ( mes == NULL || caps == NULL ) { 
     89  roar_err_set(ROAR_ERROR_FAULT); 
     90  return -1; 
     91 } 
    8692 
    8793 if ( data != NULL ) { 
     
    9298 
    9399 // versin check. 
    94  if ( datap[0] != 0 || mes->datalen < 4 ) 
    95   return -1; 
     100 if ( datap[0] != 0 ) { 
     101  roar_err_set(ROAR_ERROR_NSVERSION); 
     102  return -1; 
     103 } 
     104 
     105 if ( mes->datalen < 4 ) { 
     106  roar_err_set(ROAR_ERROR_PROTO); 
     107  return -1; 
     108 } 
    96109 
    97110 memset(caps, 0, sizeof(struct roar_caps)); 
     
    132145  flags |= ROAR_CF_REQUEST; 
    133146 
    134  if ( (flags & ROAR_CF_REQUEST) && out == NULL ) 
    135   return -1; 
     147 if ( (flags & ROAR_CF_REQUEST) && out == NULL ) { 
     148  roar_err_set(ROAR_ERROR_FAULT); 
     149  return -1; 
     150 } 
    136151 
    137152 if ( in != NULL ) 
     
    179194 if ( mes.cmd != ROAR_CMD_OK ) { 
    180195  if ( data != NULL ) 
    181    roar_mm_free(data); 
     196   roar_mm_free_noerror(data); 
    182197  return -1; 
    183198 } 
     
    185200 if ( roar_caps_from_msg(&caps, &mes, data) == -1 ) { 
    186201  if ( data != NULL ) 
    187    roar_mm_free(data); 
     202   roar_mm_free_noerror(data); 
    188203  return -1; 
    189204 } 
     
    193208  if ( data != NULL ) 
    194209   roar_mm_free(data); 
     210  roar_err_set(ROAR_ERROR_PROTO); 
    195211  return -1; 
    196212 } 
     
    200216  if ( *out == NULL ) { 
    201217   if ( data != NULL ) 
    202     roar_mm_free(data); 
     218    roar_mm_free_noerror(data); 
    203219   return -1; 
    204220  } 
     
    237253 
    238254 if ( ret->stds == NULL ) { 
    239   roar_mm_free(ret); 
     255  roar_mm_free_noerror(ret); 
    240256  return NULL; 
    241257 } 
  • libroar/random.c

    r5961 r6029  
    198198  return 0; 
    199199 
    200  if ( buffer == NULL ) 
     200 if ( buffer == NULL ) { 
     201  roar_err_set(ROAR_ERROR_FAULT); 
    201202  return -1; 
     203 } 
    202204 
    203205 roar_random_init(); 
     
    224226#endif 
    225227  default: 
     228    roar_err_set(ROAR_ERROR_NOENT); 
    226229    return -1; 
    227230   break; 
     
    239242 if ( locked ) { 
    240243  if ( roar_mm_mlock(ret, len) == -1 ) { 
    241    roar_mm_free(ret); 
     244   roar_mm_free_noerror(ret); 
    242245   return NULL; 
    243246  } 
     
    245248 
    246249 if ( roar_random_gen(ret, len, quality) == -1 ) { 
    247   roar_mm_free(ret); 
     250  roar_mm_free_noerror(ret); 
    248251  return NULL; 
    249252 } 
  • libroar/serverinfo.c

    r5961 r6029  
    174174 char * mesdata; 
    175175 
    176  if ( mes == NULL || info == NULL ) 
     176 if ( mes == NULL || info == NULL ) { 
     177  roar_err_set(ROAR_ERROR_FAULT); 
    177178  return -1; 
     179 } 
    178180 
    179181 _add(ROAR_ITST_VERSION, version); 
     
    193195 
    194196 if ( needlen > LIBROAR_BUFFER_MSGDATA ) { 
    195   if ( data == NULL ) 
     197  if ( data == NULL ) { 
     198   roar_err_set(ROAR_ERROR_MSGSIZE); 
    196199   return -1; 
     200  } 
    197201 
    198202  mesdata = roar_mm_malloc(needlen); 
     
    250254 ROAR_DBG("roar_server_info(mes=%p{.datalen=%llu) = ?", mes, (long long unsigned int)mes->datalen); 
    251255 
    252  if ( mes == NULL ) 
    253   return NULL; 
     256 if ( mes == NULL ) { 
     257  roar_err_set(ROAR_ERROR_FAULT); 
     258  return NULL; 
     259 } 
    254260 
    255261 if ( data == NULL ) { 
     
    264270 
    265271 // some basic texts like version: 
    266  if ( mes->datalen < needlen ) 
    267   return NULL; 
    268  
    269  ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
    270  
    271  if ( mesdata[0] != 0 ) /* version */ 
    272   return NULL; 
    273  
    274  ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
    275  
    276  if ( mesdata[1] != 0 ) /* reserved */ 
    277   return NULL; 
     272 if ( mes->datalen < needlen ) { 
     273  roar_err_set(ROAR_ERROR_PROTO); 
     274  return NULL; 
     275 } 
     276 
     277 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
     278 
     279 if ( mesdata[0] != 0 ) { /* version */ 
     280  roar_err_set(ROAR_ERROR_NSVERSION); 
     281  return NULL; 
     282 } 
     283 
     284 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
     285 
     286 if ( mesdata[1] != 0 ) { /* reserved */ 
     287  roar_err_set(ROAR_ERROR_PROTO); 
     288  return NULL; 
     289 } 
    278290 
    279291 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
     
    286298 
    287299 // return error if our index buffer is too short. 
    288  if ( idx > (sizeof(iebuf)/sizeof(*iebuf)) ) 
    289   return NULL; 
     300 if ( idx > (sizeof(iebuf)/sizeof(*iebuf)) ) { 
     301  roar_err_set(ROAR_ERROR_MSGSIZE); 
     302  return NULL; 
     303 } 
    290304 
    291305 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
     
    296310 
    297311 // recheck if we have a complet index. 
    298  if ( mes->datalen < needlen ) 
    299   return NULL; 
     312 if ( mes->datalen < needlen ) { 
     313  roar_err_set(ROAR_ERROR_PROTO); 
     314  return NULL; 
     315 } 
    300316 
    301317 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
     
    321337 
    322338 // recheck if we have all the data... 
    323  if ( mes->datalen < needlen ) 
    324   return NULL; 
     339 if ( mes->datalen < needlen ) { 
     340  roar_err_set(ROAR_ERROR_PROTO); 
     341  return NULL; 
     342 } 
    325343 
    326344 ROAR_DBG("roar_server_info(mes=%p) = ?", mes); 
  • libroar/vio_misc.c

    r5961 r6029  
    3939 struct roar_vio_misc * self = vio->inst; 
    4040 
    41  if ( self->read == NULL ) 
     41 if ( self->read == NULL ) { 
     42  roar_err_set(ROAR_ERROR_NOSYS); 
    4243  return -1; 
     44 } 
    4345 
    4446 return self->read(buf, count, vio, self); 
     
    4850 struct roar_vio_misc * self = vio->inst; 
    4951 
    50  if ( self->write == NULL ) 
     52 if ( self->write == NULL ) { 
     53  roar_err_set(ROAR_ERROR_RO); 
    5154  return -1; 
     55 } 
    5256 
    5357 return self->write(buf, count, vio, self); 
     
    7478 switch (cmd) { 
    7579  case ROAR_VIO_CTL_GET_NAME: 
    76     if ( data == NULL ) 
     80    if ( data == NULL ) { 
     81     roar_err_set(ROAR_ERROR_FAULT); 
    7782     return -1; 
     83    } 
    7884 
    7985    *(const char**)data = self->name; 
     
    9197     return 0; 
    9298 
     99    roar_err_set(ROAR_ERROR_NOSYS); 
    93100    return -1; 
    94101   break;  
    95102 } 
    96103 
     104 roar_err_set(ROAR_ERROR_BADRQC); 
    97105 return -1; 
    98106} 
     
    104112 
    105113int     roar_vio_open_misc    (struct roar_vio_calls * calls, const struct roar_vio_misc * callbacks) { 
    106  if ( calls == NULL || callbacks == NULL ) 
     114 if ( calls == NULL || callbacks == NULL ) { 
     115  roar_err_set(ROAR_ERROR_FAULT); 
    107116  return -1; 
     117 } 
    108118 
    109119 memset(calls, 0, sizeof(struct roar_vio_calls)); 
     
    173183 size_t i; 
    174184 
    175  if ( calls == NULL || name == NULL ) 
     185 if ( calls == NULL || name == NULL ) { 
     186  roar_err_set(ROAR_ERROR_FAULT); 
    176187  return -1; 
     188 } 
    177189 
    178190 for (i = 0; i < (sizeof(libroar_vio_miscs)/sizeof(*libroar_vio_miscs)); i++) 
     
    180192   return roar_vio_open_misc(calls, &(libroar_vio_miscs[i])); 
    181193 
     194 roar_err_set(ROAR_ERROR_NOENT); 
    182195 return -1; 
    183196} 
  • libroar/vio_winsock.c

    r5961 r6029  
    4848 
    4949ssize_t roar_vio_winsock_read    (struct roar_vio_calls * vio, void *buf, size_t count) { 
    50  return recv(_get_fh(vio), buf, count, 0); 
     50 ssize_t ret; 
     51 
     52 roar_err_clear_all(); 
     53 ret = recv(_get_fh(vio), buf, count, 0); 
     54 roar_err_update(); 
     55 
     56 return ret; 
    5157} 
    5258 
    5359ssize_t roar_vio_winsock_write   (struct roar_vio_calls * vio, void *buf, size_t count) { 
    54  return send(_get_fh(vio), buf, count, 0); 
     60 ssize_t ret; 
     61 
     62 roar_err_clear_all(); 
     63 ret = send(_get_fh(vio), buf, count, 0); 
     64 roar_err_update(); 
     65 
     66 return ret; 
    5567} 
    5668 
     
    7082 switch (cmd) { 
    7183  case ROAR_VIO_CTL_GET_NAME: 
    72     if ( data == NULL ) 
     84    if ( data == NULL ) { 
     85     roar_err_set(ROAR_ERROR_FAULT); 
    7386     return -1; 
     87    } 
    7488 
    7589    *(char**)data = "winsock"; 
     
    88102   break; 
    89103  case ROAR_VIO_CTL_ACCEPT: 
     104    roar_err_clear_all(); 
    90105    tmp = accept(_get_fh(vio), NULL, 0); 
     106    roar_err_update(); 
    91107    if ( tmp == -1 ) 
    92108     return -1; 
     
    113129    } 
    114130 
    115     if ( tmp != 0 ) /* we currently only support R and W shutdowns */ 
     131    if ( tmp != 0 ) { /* we currently only support R and W shutdowns */ 
     132     roar_err_set(ROAR_ERROR_NOSYS); 
    116133     return -1; 
     134    } 
    117135 
    118136    if ( s_r && s_w ) { 
Note: See TracChangeset for help on using the changeset viewer.