void * oggz_table_insert (OggzTable * table, long key, void * data) { void * old_data; if ((old_data = oggz_table_lookup (table, key)) != NULL) { if (oggz_vector_remove_l (table->keys, key) == NULL) return NULL; if (oggz_vector_remove_p (table->data, old_data) == NULL) { /* XXX: This error condition can only happen if the previous * removal succeeded, and this removal failed, ie. there was * an error reallocing table->data->data downwards. */ return NULL; } } if (oggz_vector_insert_l (table->keys, key) == -1) return NULL; if (oggz_vector_insert_p (table->data, data) == NULL) { oggz_vector_remove_l (table->keys, key); return NULL; } return data; }
oggz_stream_t * oggz_add_stream (OGGZ * oggz, long serialno) { oggz_stream_t * stream; stream = oggz_malloc (sizeof (oggz_stream_t)); if (stream == NULL) return NULL; ogg_stream_init (&stream->ogg_stream, (int)serialno); stream->delivered_non_b_o_s = 0; stream->b_o_s = 1; stream->e_o_s = 0; stream->granulepos = 0; stream->packetno = -1; /* will be incremented on first write */ stream->metric = NULL; stream->metric_user_data = NULL; stream->metric_internal = 0; stream->order = NULL; stream->order_user_data = NULL; stream->read_packet = NULL; stream->read_user_data = NULL; oggz_vector_insert_p (oggz->streams, stream); return stream; }
static OggzComment * _oggz_comment_add_byname (oggz_stream_t * stream, const char * name, const char * value) { OggzComment * comment, * new_comment; int i; /* Check that the same name=value pair is not already present */ for (i = 0; i < oggz_vector_size (stream->comments); i++) { comment = (OggzComment *) oggz_vector_nth_p (stream->comments, i); if (comment->name && !strcasecmp (name, comment->name)) { if (comment->value == NULL) { if (value == NULL) return comment; } else if ((value && !strcmp (value, comment->value)) || (value == NULL && comment->value == NULL)) { return comment; } } } /* Allocate new comment and insert it */ if ((new_comment = oggz_comment_new (name, value)) == NULL) return NULL; return oggz_vector_insert_p (stream->comments, new_comment); }
oggz_stream_t * oggz_add_stream (OGGZ * oggz, long serialno) { oggz_stream_t * stream; stream = oggz_malloc (sizeof (oggz_stream_t)); if (stream == NULL) return NULL; ogg_stream_init (&stream->ogg_stream, (int)serialno); oggz_comments_init (stream); stream->content = OGGZ_CONTENT_UNKNOWN; stream->numheaders = 3; /* Default to 3 headers for Ogg logical bitstreams */ stream->preroll = 0; stream->granulerate_n = 1; stream->granulerate_d = 1; stream->basegranule = 0; stream->granuleshift = 0; stream->delivered_non_b_o_s = 0; stream->b_o_s = 1; stream->e_o_s = 0; stream->granulepos = 0; stream->packetno = -1; /* will be incremented on first read or write */ stream->metric = NULL; stream->metric_user_data = NULL; stream->metric_internal = 0; stream->order = NULL; stream->order_user_data = NULL; stream->read_packet = NULL; stream->read_user_data = NULL; stream->read_page = NULL; stream->read_page_user_data = NULL; stream->calculate_data = NULL; oggz_vector_insert_p (oggz->streams, stream); return stream; }