Changeset 1215:5cf113ac883c in roaraudio for libroar/buffer.c
- Timestamp:
- 02/19/09 15:32:56 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/buffer.c
r996 r1215 36 36 37 37 int roar_buffer_new (struct roar_buffer ** buf, size_t len) { 38 void * data; 39 40 if ((data = malloc(len)) == NULL) { 41 return -1; 42 } 43 44 if ( roar_buffer_new_no_ma(buf, len, data) == -1 ) { 45 free(data); 46 return -1; 47 } 48 49 if ( roar_buffer_set_flag(*buf, ROAR_BUFFER_FLAG_NOFREE, ROAR_BUFFER_RESET) == -1 ) { 50 roar_buffer_free(*buf); 51 free(data); 52 return -1; 53 } 54 55 return 0; 56 } 57 58 int roar_buffer_new_no_ma(struct roar_buffer ** buf, size_t len, void * data) { // no internal malloc 38 59 struct roar_buffer * new; 39 60 40 61 ROAR_DBG("buffer_new(buf=%p, len=%i) = ?", buf, len); 62 63 if ( buf == NULL || data == NULL ) 64 return -1; 41 65 42 66 if ((new = malloc(sizeof(struct roar_buffer))) == NULL) { … … 45 69 } 46 70 47 if ((new->data = malloc(len)) == NULL) { 48 free(new); 49 *buf = NULL; 50 return -1; 51 } 71 new->data = data; 72 73 new->flags = ROAR_BUFFER_FLAG_NONE|ROAR_BUFFER_FLAG_NOFREE; 52 74 53 75 new->user_data = new->data; … … 76 98 } 77 99 78 free(buf->data); 100 if ( roar_buffer_get_flag(buf, ROAR_BUFFER_FLAG_NOFREE) != 1 ) 101 free(buf->data); 102 79 103 free(buf); 80 104 … … 245 269 } 246 270 271 int roar_buffer_set_flag (struct roar_buffer * buf, int flag, int reset) { 272 if ( buf == NULL ) 273 return -1; 274 275 buf->flags |= flag; 276 277 if ( reset ) 278 buf->flags -= flag; 279 280 return 0; 281 } 282 283 int roar_buffer_get_flag (struct roar_buffer * buf, int flag) { 284 if ( buf == NULL ) 285 return -1; 286 287 return buf->flags & flag; 288 } 289 247 290 int roar_buffer_duplicate (struct roar_buffer * buf, struct roar_buffer ** copy) { 248 291 struct roar_buffer * cur = buf;
Note: See TracChangeset
for help on using the changeset viewer.