#include "ul_utmalloc.h"
#include "ul_dbuff.h"
+#ifdef UL_DBUFF_LOGGING
+#include "ul_log.h"
+extern UL_LOG_CUST(ulogd_dbuff)
+#endif /*UL_DBUFF_LOGGING*/
+
typedef unsigned char byte;
//#undef DEBUG
-//-----------------------------------------------------------------
/**
* ul_dbuff_set_capacity - change capacity of buffer to at least @new_capacity
* @buf: buffer structure
else {
/* Old data are not changed if realloc fails, capacity remains at old value */
#ifdef UL_DBUFF_LOGGING
- vca_log("dbuff", LOG_DEB, "realloc buffer to %d failed\n", new_capacity);
+ ul_logdeb("realloc buffer to %d failed\n", new_capacity);
#endif
}
}
}
if(buf->len > buf->capacity) buf->len = buf->capacity;
#ifdef UL_DBUFF_LOGGING
- vca_log("dbuff", LOG_DEB, "capacity changed from %d to %ld, required %d\n", old_capacity, buf->capacity, new_capacity);
+ ul_logdeb("capacity changed from %d to %ld, required %d\n", old_capacity, buf->capacity, new_capacity);
#endif
return buf->capacity;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_set_len - sets a new len of the buffer, change the capacity if neccessary
* @buf: buffer structure
return buf->len;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_cpy - copies bytes to buffer and change its capacity if neccessary like memset
* @buf: buffer structure
return buf->len;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_cpy - copies bytes to buffer and change its capacity if neccessary
* @buf: buffer structure
return buf->len;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_cat - appends bytes at end of buffer and change its capacity if neccessary
* @buf: buffer structure
if(b == NULL) return 0;
if(new_len == ul_dbuff_set_len(buf, new_len)) {
memcpy(buf->data + old_len, b, n);
+ } else {
+ #ifdef UL_DBUFF_LOGGING
+ ul_logdeb("ul_dbuff_cat: set_len(%lu) error, old_len == %lu\n, act len == %lu\n", new_len, old_len, buf->len);
+ #endif
}
- #ifdef UL_DBUFF_LOGGING
- else {
- vca_log("dbuff", LOG_DEB, "ul_dbuff_cat: set_len(%lu) error, old_len == %lu\n, act len == %lu\n", new_len, old_len, buf->len);
- }
- #endif
return buf->len;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_strcat - appends str at dhe end of buffer and change its capacity if neccessary
* @buf: buffer structure
{
/*
#ifdef UL_DBUFF_LOGGING
- if(buf->len > 0) vca_log("dbuff", LOG_DEB, "ul_dbuff_strcat: '%s' + '%s'\n", buf->data, str);
- else vca_log("dbuff", LOG_DEB, "ul_dbuff_strcat: '' + %s\n", str);
+ if(buf->len > 0) ul_logdeb("ul_dbuff_strcat: '%s' + '%s'\n", buf->data, str);
+ else ul_logdeb("ul_dbuff_strcat: '' + %s\n", str);
#endif
*/
if(str == NULL) return 0;
if(buf->len > 0 && buf->data[buf->len-1] == '\0') {
/* #ifdef UL_DBUFF_LOGGING
- vca_log("dbuff", LOG_DEB, "ul_dbuff_strcat: terminating zero found at %ld, after '%c'\n", buf->len-1, buf->data[buf->len - 2]);
+ ul_logdeb("ul_dbuff_strcat: terminating zero found at %ld, after '%c'\n", buf->len-1, buf->data[buf->len - 2]);
#endif
*/
ul_dbuff_set_len(buf, buf->len - 1);
}
#ifdef UL_DBUFF_LOGGING
if(buf->len > 0 && buf->data[buf->len-1] != '\0') {
- vca_log("dbuff", LOG_ERR, "ul_dbuff_strcat: terminating zero not found at %ld, found '%c'\n", buf->len-1, buf->data[buf->len-1]);
+ ul_logerr("ul_dbuff_strcat: terminating zero not found at %ld, found '%c'\n", buf->len-1, buf->data[buf->len-1]);
}
#endif
/* #ifdef UL_DBUFF_LOGGING
ul_dbuff_cat(buf, str, strlen(str) + 1);
- vca_log("dbuff", LOG_DEB, "ul_dbuff_strcat: returning '%s'\n", buf->data);
+ ul_logdeb("ul_dbuff_strcat: returning '%s'\n", buf->data);
return buf->len;
#else
return ul_dbuff_cat(buf, str, strlen(str) + 1);
return ul_dbuff_cat(buf, str, strlen(str) + 1);
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_strcpy - copy str to the buffer and change its capacity if neccessary
* @buf: buffer structure
return ul_dbuff_strcat(buf, str);
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_append_byte - appends byte at dhe end of buffer and change its capacity if neccessary
* @buf: buffer structure
return ul_dbuff_cat(buf, &b, 1);
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_ltrim - remove all white space characters from the left
* @buf: buffer structure
return buf->len;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_rtrim - remove all white space characters from the right
* @buf: buffer structure
return buf->len;
}
-//-----------------------------------------------------------------
/**
* ul_dbuff_trim - remove all white space characters from the right and from the left
* @buf: buffer structure
ul_dbuff_rtrim(buf);
return ul_dbuff_ltrim(buf);
}
-//-----------------------------------------------------------------
+
/**
* ul_dbuff_cpos - searches string for char
* @buf: searched dbuff
if(ret >= buf->len) ret = -1;
return ret;
}
-//-----------------------------------------------------------------
+
/**
* ul_str_cpos - searches string for char
* @str: zero terminated string
if(!str[ret]) ret = -1;
return ret;
}
-//-----------------------------------------------------------------
+
/**
* ul_str_pos - searches string for substring
* @str: zero terminated string
}
return -1;
}
-//-----------------------------------------------------------------
+
/**
* ul_str_ncpy - copies string to the buffer
* @to: buffer where to copy str
to[i] = '\0';
return i;
}
-//-----------------------------------------------------------------
+
/**
* ul_dbuff_cut_pos - cut first @n bytes from @fromdb and copies it to @todb.
* If @n is greater than fromdb.len whole @fromdb is copied to @todb.
memmove(fromdb->data, fromdb->data + n, fromdb->len - n);
ul_dbuff_set_len(fromdb, newlen);
}
-//-----------------------------------------------------------------
+
/**
* ul_dbuff_cut - cuts bytes before delimiter + delimiter char from @fromdb and copies tham to the @todb
* If @fromdb doesn't contain delimiter @todb is trimmed to zero length.
if(pos < 0) pos = -1;
ul_dbuff_cut_pos(fromdb, todb, pos+1);
}
-//-----------------------------------------------------------------
+
/**
* ul_dbuff_cut_token - cuts not whitespaces from %fromdb to %todb.
* Leading whitespaces are ignored. Cut string is trimmed.
{
const unsigned char *pc = (unsigned char*)fromdb->data;
int pos;
- // skip leading white spaces
+ /* skip leading white spaces */
for(pos=0; pc[pos]>0 && pc[pos]<=' ' && pos<fromdb->len; pos++);
- // skip token
+ /* skip token */
for(; pc[pos]>' ' && pos<fromdb->len; pos++);
ul_dbuff_cut_pos(fromdb, todb, pos);
ul_dbuff_trim(todb);
}
-//-----------------------------------------------------------------
+/**
+ * ul_dbuff_export - Copies data from %srcdb to the buffer %dest.
+ * @srcdb: source dbuff
+ * @dest: destination buffer
+ * @maxlen: maximum number of bytes to copy
+ *
+ * Returns: the number of bytes copied.
+ */
+int ul_dbuff_export(ul_dbuff_t *srcdb, void *dest, int maxlen)
+{
+ int len;
+ if (!dest) return 0;
+ len = srcdb->len < maxlen ? srcdb->len : maxlen;
+ memcpy(dest, srcdb->data, len);
+ return len;
+}