aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2005-08-10 13:56:34 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2005-08-10 13:56:34 +0000
commitb4441e6748170f63f19a3d0467d301f5852f161c (patch)
treeafe8f4108828e267390a6158e9312e1644a2818f
parentec3ab9ec3e56a8d2c4f037a8714eba007c0dfcf3 (diff)
rename ep_tvb_fake_unicode() to tvb_get_ephemeral_faked_unicode() and update the README file.
svn path=/trunk/; revision=15271
-rw-r--r--doc/README.developer29
-rw-r--r--epan/dissectors/packet-tds.c24
-rw-r--r--epan/tvbuff.c9
-rw-r--r--epan/tvbuff.h19
4 files changed, 50 insertions, 31 deletions
diff --git a/doc/README.developer b/doc/README.developer
index c7ba8a0c07..d3a5258e9d 100644
--- a/doc/README.developer
+++ b/doc/README.developer
@@ -360,10 +360,10 @@ the buffer.
If you're fetching into such a chunk of memory a 2-byte Unicode string
from the buffer, and the string has a specified size, you can use
-"tvb_fake_unicode()", which will check whether the entire string is
-present before allocating a buffer for the string, and will also put a
-trailing '\0' at the end of the buffer. The resulting string will be a
-sequence of single-byte characters; the only Unicode characters that
+"tvb_get_ephemeral_faked_unicode()", which will check whether the entire
+string is present before allocating a buffer for the string, and will also
+put a trailing '\0' at the end of the buffer. The resulting string will be
+a sequence of single-byte characters; the only Unicode characters that
will be handled correctly are those in the ASCII range. (Ethereal's
ability to handle non-ASCII strings is limited; it needs to be
improved.)
@@ -896,7 +896,7 @@ tvbuff, starting at the specified offset, and containing the specified
length worth of characters (the length of the buffer will be length+1,
as it includes a null character to terminate the string).
-tvb_get_string() returns a bugger allocated by g_malloc() so you must
+tvb_get_string() returns a buffer allocated by g_malloc() so you must
g_free() it when you are finished with the string. Failure to g_free() this
buffer will lead to memory leaks.
tvb_get_ephemeral_string() returns a buffer allocated from a special heap
@@ -913,6 +913,25 @@ specified offset, and containing all characters from the tvbuff up to
and including a terminating null character in the tvbuff. "*lengthp"
will be set to the length of the string, including the terminating null.
+
+guint8 *tvb_fake_unicode(tvbuff_t*, gint offset, gint length);
+guint8 *tvb_get_ephemeral_faked_unicode(tvbuff_t*, gint offset, gint length);
+
+Converts a 2-byte unicode string to an ASCII string.
+Returns a null-terminated buffer containing data from the specified
+tvbuff, starting at the specified offset, and containing the specified
+length worth of characters (the length of the buffer will be length+1,
+as it includes a null character to terminate the string).
+
+tvb_fake_unicode() returns a buffer allocated by g_malloc() so you must
+g_free() it when you are finished with the string. Failure to g_free() this
+buffer will lead to memory leaks.
+tvb_get_ephemeral_faked_unicode() returns a buffer allocated from a special
+heap with a lifetime until the next packet is dissected. You do not need to
+free() this buffer, it will happen automatically once the next packet is
+dissected.
+
+
Copying memory:
guint8* tvb_memcpy(tvbuff_t*, guint8* target, gint offset, gint length);
diff --git a/epan/dissectors/packet-tds.c b/epan/dissectors/packet-tds.c
index bb8bd29beb..5c3873349a 100644
--- a/epan/dissectors/packet-tds.c
+++ b/epan/dissectors/packet-tds.c
@@ -683,7 +683,7 @@ dissect_tds_query_packet(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
is_unicode = FALSE;
if (is_unicode)
- msg = ep_tvb_fake_unicode(tvb, offset, len/2, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, len/2, TRUE);
else
msg = tvb_get_ephemeral_string(tvb, offset, len);
@@ -702,7 +702,7 @@ dissect_tds5_lang_token(tvbuff_t *tvb, guint offset, guint len, proto_tree *tree
len -= 1;
if (is_unicode)
- msg = ep_tvb_fake_unicode(tvb, offset, (len)/2, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, (len)/2, TRUE);
else
msg = tvb_get_ephemeral_string(tvb, offset, len);
@@ -866,7 +866,7 @@ dissect_tds7_login(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (len != 0) {
if( i != 2) {
if (is_unicode == TRUE) {
- val = ep_tvb_fake_unicode(tvb, offset2, len, TRUE);
+ val = tvb_get_ephemeral_faked_unicode(tvb, offset2, len, TRUE);
len *= 2;
} else
val = tvb_get_ephemeral_string(tvb, offset2, len);
@@ -1163,7 +1163,7 @@ dissect_tds_env_chg(tvbuff_t *tvb, guint offset, guint token_sz,
if (env_type != 7) { /* if it's not 'Collation Info - which is not textual! */
string_offset = offset + 2;
if (is_unicode == TRUE) {
- new_val = ep_tvb_fake_unicode(tvb, string_offset,
+ new_val = tvb_get_ephemeral_faked_unicode(tvb, string_offset,
new_len, TRUE);
new_len *= 2;
} else
@@ -1190,7 +1190,7 @@ dissect_tds_env_chg(tvbuff_t *tvb, guint offset, guint token_sz,
if (old_len) {
string_offset = old_len_offset + 1;
if (is_unicode == TRUE) {
- old_val = ep_tvb_fake_unicode(tvb, string_offset,
+ old_val = tvb_get_ephemeral_faked_unicode(tvb, string_offset,
old_len, TRUE);
old_len *= 2;
} else
@@ -1223,7 +1223,7 @@ dissect_tds_err_token(tvbuff_t *tvb, guint offset, guint token_sz _U_, proto_tre
is_unicode = TRUE;
if(is_unicode) {
- msg = ep_tvb_fake_unicode(tvb, offset, msg_len, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, msg_len, TRUE);
msg_len *= 2;
} else {
msg = tvb_get_ephemeral_string(tvb, offset, msg_len);
@@ -1237,7 +1237,7 @@ dissect_tds_err_token(tvbuff_t *tvb, guint offset, guint token_sz _U_, proto_tre
offset +=1;
if(srvr_len) {
if (is_unicode) {
- msg = ep_tvb_fake_unicode(tvb, offset, srvr_len, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, srvr_len, TRUE);
srvr_len *=2;
} else {
msg = tvb_get_ephemeral_string(tvb, offset, srvr_len);
@@ -1252,7 +1252,7 @@ dissect_tds_err_token(tvbuff_t *tvb, guint offset, guint token_sz _U_, proto_tre
offset +=1;
if(proc_len) {
if (is_unicode) {
- msg = ep_tvb_fake_unicode(tvb, offset, proc_len, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, proc_len, TRUE);
proc_len *=2;
} else {
msg = tvb_get_ephemeral_string(tvb, offset, proc_len);
@@ -1288,7 +1288,7 @@ dissect_tds_login_ack_token(tvbuff_t *tvb, guint offset, guint token_sz, proto_t
is_unicode = TRUE;
proto_tree_add_text(tree, tvb, offset, 0, "msg_len: %d, token_sz: %d, total: %d",msg_len, token_sz, msg_len + 6U + 3U);
if(is_unicode) {
- msg = ep_tvb_fake_unicode(tvb, offset, msg_len, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, msg_len, TRUE);
msg_len *= 2;
} else {
msg = tvb_get_ephemeral_string(tvb, offset, msg_len);
@@ -1341,7 +1341,7 @@ dissect_tds7_results_token(tvbuff_t *tvb, guint offset, proto_tree *tree)
table_len = tvb_get_letohs(tvb, offset);
offset +=2;
if(table_len != 0) {
- msg = ep_tvb_fake_unicode(tvb, offset, table_len, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, table_len, TRUE);
proto_tree_add_text(tree, tvb, offset, table_len*2, "Table name: %s", msg);
offset += table_len*2;
}
@@ -1367,7 +1367,7 @@ dissect_tds7_results_token(tvbuff_t *tvb, guint offset, proto_tree *tree)
proto_tree_add_text(tree, tvb, offset, 1, "message length: %d",msg_len);
offset += 1;
if(msg_len != 0) {
- msg = ep_tvb_fake_unicode(tvb, offset, msg_len, TRUE);
+ msg = tvb_get_ephemeral_faked_unicode(tvb, offset, msg_len, TRUE);
proto_tree_add_text(tree, tvb, offset, msg_len*2, "Text: %s", msg);
offset += msg_len*2;
}
@@ -1421,7 +1421,7 @@ dissect_tds_rpc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
offset += 2;
}
else if (len != 0) {
- val = ep_tvb_fake_unicode(tvb, offset, len, TRUE);
+ val = tvb_get_ephemeral_faked_unicode(tvb, offset, len, TRUE);
len *= 2;
proto_tree_add_text(tree, tvb, offset, len, "RPC Name: %s", val);
offset += len;
diff --git a/epan/tvbuff.c b/epan/tvbuff.c
index 19ec18ccc5..dab173e9ae 100644
--- a/epan/tvbuff.c
+++ b/epan/tvbuff.c
@@ -1684,18 +1684,15 @@ tvb_fake_unicode(tvbuff_t *tvb, int offset, int len, gboolean little_endian)
}
/* Convert a string from Unicode to ASCII. At the moment we fake it by
- * replacing all non-ASCII characters with a '.' )-: The caller must
- * free the result returned. The len parameter is the number of guint16's
- * to convert from Unicode.
+ * replacing all non-ASCII characters with a '.' )-: The len parameter is
+ * the number of guint16's to convert from Unicode.
*
* This function allocates memory from a buffer with packet lifetime.
* You do not have to free this buffer, it will be automatically freed
* when ethereal starts decoding the next packet.
- * Do not use this function if you want the allocated memory to be persistent
- * after the current packet has been dissected.
*/
char *
-ep_tvb_fake_unicode(tvbuff_t *tvb, int offset, int len, gboolean little_endian)
+tvb_get_ephemeral_faked_unicode(tvbuff_t *tvb, int offset, int len, gboolean little_endian)
{
char *buffer;
int i;
diff --git a/epan/tvbuff.h b/epan/tvbuff.h
index 859c40365a..d76f9b2395 100644
--- a/epan/tvbuff.h
+++ b/epan/tvbuff.h
@@ -390,16 +390,19 @@ extern guint tvb_strsize(tvbuff_t *tvb, gint offset);
extern gint tvb_strnlen(tvbuff_t*, gint offset, guint maxlength);
/** Convert a string from Unicode to ASCII. At the moment we fake it by
- * assuming all characters are ASCII )-: The caller must free the
- * result returned. The len parameter is the number of guint16's to
- * convert from Unicode. */
+ * assuming all characters are ASCII )-: The len parameter is the number
+ * of guint16's to convert from Unicode.
+ *
+ * tvb_fake_unicode() returns a buffer allocated by g_malloc() and must
+ * be g_free() by the caller.
+ * tvb_get_ephemeral_faked_unicode() returns a buffer that does not need
+ * to be explicitely freed. Instead this buffer is
+ * automatically freed when ethereal starts dissecting
+ * the next packet.
+ */
extern char *tvb_fake_unicode(tvbuff_t *tvb, int offset, int len,
gboolean little_endian);
-/* Same as above but the buffer returned from this function does not have to
- * be freed. It will be automatically freed after the packet is dissected.
- * Buffers allocated by this function are NOT persistent.
- */
-extern char *ep_tvb_fake_unicode(tvbuff_t *tvb, int offset, int len,
+extern char *tvb_get_ephemeral_faked_unicode(tvbuff_t *tvb, int offset, int len,
gboolean little_endian);
/**