]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update
authorAnthony Minessale <anthony.minessale@gmail.com>
Sun, 2 Dec 2007 16:05:19 +0000 (16:05 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Sun, 2 Dec 2007 16:05:19 +0000 (16:05 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@354 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/openzap/src/include/zap_buffer.h
libs/openzap/src/zap_buffer.c

index cd168257872de260542d0672cad81329a97d5600..eaa71524f909e636fe9bce8b88634dc46a849984 100644 (file)
@@ -124,6 +124,7 @@ void zap_buffer_destroy(zap_buffer_t **buffer);
 
 /** @} */
 
+zap_size_t zap_buffer_zwrite(zap_buffer_t *buffer, const void *data, zap_size_t datalen);
 
 #endif
 /* For Emacs:
index 1db918665d214b8ca383f886659cc376acc548c6..9cfb354ad42eac648d3281da3fba4db1f62be9d9 100644 (file)
@@ -187,8 +187,7 @@ zap_size_t zap_buffer_write(zap_buffer_t *buffer, const void *data, zap_size_t d
        }
 
        actual_freespace = buffer->datalen - buffer->actually_used;
-
-       if (actual_freespace < datalen) {
+       if (actual_freespace < datalen && (!buffer->max_len || (buffer->datalen + datalen <= buffer->max_len))) {
                memmove(buffer->data, buffer->head, buffer->used);
                buffer->head = buffer->data;
                buffer->actually_used = buffer->used;
@@ -246,6 +245,18 @@ void zap_buffer_zero(zap_buffer_t *buffer)
        buffer->head = buffer->data;
 }
 
+zap_size_t zap_buffer_zwrite(zap_buffer_t *buffer, const void *data, zap_size_t datalen)
+{
+       zap_size_t w;
+       
+       if (!(w = zap_buffer_write(buffer, data, datalen))) {
+               zap_buffer_zero(buffer);
+               return zap_buffer_write(buffer, data, datalen);
+       }
+
+       return w;
+}
+
 void zap_buffer_destroy(zap_buffer_t **buffer)
 {
        if (*buffer) {