Ethereal-dev: [ethereal-dev] New Gryphon patch and answers to old comments.

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Steve Limkemann <stevelim@xxxxxxxxxx>
Date: Tue, 14 Dec 1999 15:50:40 -0500 (EST)
  I just found this and thought I'd answer it.

On Tue, 7 Dec 1999, Guy Harris wrote:

> > You'll want to convert your uses of ntohs(x) to pntohs(&x).
> 
> ...or, in this case, convert it to do
> 
>     	end_of_frame =  pntohs (data + 4) + 8;

  Done.  I also removed the unnecessary castings that were left with the
previous patch.

> However, the checks for "fd" aren't necessary ("fd" is always non-NULL),
> so perhaps it could just be
> 
> 	end_of_frame = END_OF_FRAME;

  True in general.  In this case, dissect_gryphon() is called recursively
with the "fd" argument set to NULL.

> In addition, there's a C++-style comment in one line:

  Removed.

			Steve
 ______________________  _______________________________________________
/  Steve Limkemann     \/  A microsecond here and a microsecond there,  \
|  Westland, Michigan  ||    and before you know it, you're talking     |
|  USA, North America  ||                real-time.                     |
|  Earth, Solar System ||                                               |
|  Milky Way           ||      Smoking: Not just an addiction,          |
|    MGX467 271 48185  ||               but a way of death.             |
\ _____________________/\ ______________________________________________/

--- packet-gryphon.c.orig	Tue Dec 14 14:54:17 1999
+++ packet-gryphon.c	Tue Dec 14 15:39:43 1999
@@ -104,7 +104,7 @@
     if (fd)
     	end_of_frame = END_OF_FRAME;
     else {
-    	end_of_frame =  pntohs ((unsigned short *)(data + 4)) + 8;
+    	end_of_frame =  pntohs (data + 4) + 8;
 	end_of_frame += 3 - (end_of_frame + 3) % 4;
     }
     dataend = data + end_of_frame;
@@ -133,7 +133,7 @@
 	    src = data[0];
 	    dest = data[2];
 	    frmtyp = data[6];
-	    msglen = pntohs ((unsigned short *)&data[4]);
+	    msglen = pntohs (&data[4]);
 
     	    header_item = proto_tree_add_text(gryphon_tree, offset,
 	    	    MSG_HDR_SZ, "Header", NULL);
@@ -206,7 +206,6 @@
 		proto_tree_add_text(gryphon_tree, offset, i, "padding", NULL);
 		BUMP (offset, data, i);
 	    }
-//	    data = dataend;
 	}
 
    }
@@ -483,7 +482,7 @@
     proto_tree_add_text (pt, *offset, 4, "Command: %s", cmds[i].strptr);
     BUMP (*offset, *data, 4);
     
-    resp = pntohl ((unsigned long *)data[0]);
+    resp = pntohl (data[0]);
     for (j = 0; j < SIZEOF(responses); j++) {
     	if (responses[j].value == resp)
 	    break;
@@ -511,7 +510,7 @@
 
 	hdrsize = (*data)[0];
 	hdrbits = (*data)[1];
-	datasize = pntohs ((unsigned short *)((*data)+2));
+	datasize = pntohs ((*data)+2);
 	extrasize = (*data)[4];
 	padding = 3 - (hdrsize + datasize + extrasize + 3) % 4;
 	msgsize = hdrsize + datasize + extrasize + padding + 16;
@@ -538,7 +537,7 @@
 	}
     	proto_tree_add_text(tree, *offset+6, 1, "Priority: %d", (*data)[6]);
     	proto_tree_add_text(tree, *offset+7, 1, "Error status: %hd", (*data)[7]);
-	timestamp = pntohl ((unsigned long *)((*data)+8));
+	timestamp = pntohl ((*data)+8);
 	hours = timestamp /(100000 * 60 *60);
 	minutes = (timestamp / (100000 * 60)) % 60;
 	seconds = (timestamp / 100000) % 60;
@@ -580,7 +579,7 @@
     proto_tree_add_text(pt, *offset+1, 1, "Event context: %hd", *((*data)+1));
     proto_tree_add_text(pt, *offset+2, 2, "reserved", NULL);
     BUMP (*offset, *data, 4);
-    timestamp = pntohl ((unsigned long *)(*data));
+    timestamp = pntohl ((*data));
     hours = timestamp /(100000 * 60 *60);
     minutes = (timestamp / (100000 * 60)) % 60;
     seconds = (timestamp / 100000) % 60;
@@ -638,8 +637,8 @@
     unsigned int    timestamp;
     unsigned char   date[45];
     
-    ts.lng[1] = pntohl ((unsigned int *)(*data));
-    ts.lng[0] = pntohl ((unsigned int *)((*data)+4));
+    ts.lng[1] = pntohl ((*data));
+    ts.lng[0] = pntohl ((*data)+4);
     timestamp = ts.lnglng / 100000LL;
     strncpy (date, ctime((time_t*)&timestamp), sizeof(date));
     date[strlen(date)-1] = 0x00;
@@ -656,11 +655,11 @@
 void
 cmd_setfilt (int src, const u_char **data, const u_char *dataend, int *offset, int msglen, proto_tree *pt)
 {
-    int     	    flag = pntohl ((unsigned int *)((*data)+4));
+    int     	    flag = pntohl ((*data)+4);
     int     	    length, padding;
     unsigned char   mode[30];
     
-    length =  *((*data)+4) + *((*data)+5) + pntohs ((unsigned short *)((*data)+6));
+    length =  *((*data)+4) + *((*data)+5) + pntohs ((*data)+6);
     if (flag)
     	strcpy (mode, "Pass");
     else
@@ -687,7 +686,7 @@
     unsigned int    ioctl;
     int     	    i;
 
-    ioctl = pntohl ((unsigned int *)(*data));
+    ioctl = pntohl ((*data));
     for (i = 0; i < SIZEOF(ioctls); i++) {
     	if (ioctls[i].value == ioctl)
 	    break;
@@ -730,7 +729,7 @@
     proto_tree_add_text(pt, *offset+1, 6, "reserved", NULL);
     BUMP (*offset, *data, 7);
     for (i = 1; i <= blocks; i++) {
-	length = pntohs ((unsigned short *)((*data)+2)) * 2 + 8;
+	length = pntohs ((*data)+2) * 2 + 8;
 	length += 3 - (length + 3) % 4;
 	item = proto_tree_add_text(pt, *offset, length, "Filter block %d", i);
 	tree = proto_item_add_subtree (item, ett_gryphon_cmd_filter_block);
@@ -918,7 +917,7 @@
 	proto_tree_add_text(ft, *offset, 20, "Hardware serial number: %s", string);
 	BUMP (*offset, *data, 20);
 
-    	x = pntohs ((unsigned short *)*data);
+    	x = pntohs ((*data));
 	for (j = 0; j < SIZEOF(protocol_types); j++) {
 	    if (protocol_types[j].value == x)
 	    	break;
@@ -945,13 +944,13 @@
     char    	    crit[] = ".... ...1 = Critical scheduler";
     char    	    norm[] = ".... ...0 = Normal scheduler";
     
-    x = pntohl ((unsigned int *)*data);
+    x = pntohl ((*data));
     if (x == 0xFFFFFFFF)
     	proto_tree_add_text(pt, *offset, 4, "Number of iterations: infinite", NULL);
     else
     	proto_tree_add_text(pt, *offset, 4, "Number of iterations: %d", x);
     BUMP (*offset, *data, 4);
-    x = pntohl ((unsigned int *)*data);
+    x = pntohl ((*data));
     item = proto_tree_add_text(pt, *offset, 4, "Flags", NULL);
     tree = proto_item_add_subtree (item, ett_gryphon_flags);
     ptr = x & 1 ? crit : norm;
@@ -959,17 +958,17 @@
     BUMP (*offset, *data, 4);
     i = 1;
     while (*data < dataend) {
-    	length = 16 + (*data)[16] + pntohs ((unsigned short *)((*data)+18)) + (*data)[20] + 16;
+    	length = 16 + (*data)[16] + pntohs ((*data)+18) + (*data)[20] + 16;
 	length += 3 - (length + 3) % 4;
 	item = proto_tree_add_text(pt, *offset, length, "Message %d", i);
 	tree = proto_item_add_subtree (item, ett_gryphon_cmd_sched_data);
-	x = pntohl ((unsigned int *)*data);
+	x = pntohl ((*data));
 	proto_tree_add_text(tree, *offset, 4, "Sleep: %d milliseconds", x);
 	BUMP (*offset, *data, 4);
-	x = pntohl ((unsigned int *)*data);
+	x = pntohl ((*data));
 	proto_tree_add_text(tree, *offset, 4, "Transmit count: %d", x);
 	BUMP (*offset, *data, 4);
-	x = pntohl ((unsigned int *)*data);
+	x = pntohl ((*data));
 	proto_tree_add_text(tree, *offset, 4, "Transmit period: %d milliseconds", x);
 	BUMP (*offset, *data, 4);
 	proto_tree_add_text(tree, *offset, 2, "reserved flags", NULL);
@@ -998,7 +997,7 @@
     	"Historic peak bus load: %d.%02d%%"
     };
 
-    timestamp = pntohl ((unsigned long *)(*data));
+    timestamp = pntohl ((*data));
     hours = timestamp /(100000 * 60 *60);
     minutes = (timestamp / (100000 * 60)) % 60;
     seconds = (timestamp / 100000) % 60;
@@ -1006,7 +1005,7 @@
     proto_tree_add_text(pt, *offset, 4, "Timestamp: %d:%02d:%02d.%05d", hours, minutes, seconds, fraction);
     BUMP (*offset, *data, 4);
     for (i = 0; i < SIZEOF(fields); i++){
-    	x = pntohs ((unsigned short *)(*data));
+    	x = pntohs ((*data));
 	fract = x % 100;
 	x /= 100;
 	proto_tree_add_text(pt, *offset, 2, fields[i], x, fract);
@@ -1029,7 +1028,7 @@
 
     resp_blm_data (src, data, dataend, offset, msglen, pt);
     for (i = 0; i < SIZEOF(fields); i++){
-    	x = pntohl ((unsigned int *)(*data));
+    	x = pntohl ((*data));
 	proto_tree_add_text(pt, *offset, 4, fields[i], x);
 	BUMP (*offset, *data, 4);
     }
@@ -1096,7 +1095,7 @@
     	proto_tree_add_text(tree, *offset, 1,
 	    	".11. .... Delete this response for a conforming message", NULL);
     }
-    actionValue = pntohs ((unsigned short *)((*data)+2));
+    actionValue = pntohs ((*data)+2);
     if (actionValue) {
 	if (action & FR_PERIOD_MSGS){
     	    ptr = "...1 .... The period is in frames";
@@ -1119,14 +1118,14 @@
     }
     BUMP (*offset, *data, 2);
     for (i = 1; i <= blocks; i++) {
-	length = pntohs ((unsigned short *)((*data)+2)) * 2 + 8;
+	length = pntohs ((*data)+2) * 2 + 8;
 	length += 3 - (length + 3) % 4;
 	item = proto_tree_add_text(pt, *offset, length, "Filter block %d", i);
 	tree = proto_item_add_subtree (item, ett_gryphon_cmd_filter_block);
 	filter_block (src, data, dataend, offset, msglen, tree);
     }
     for (i = 1; i <= responses; i++) {
-	length = pntohs ((unsigned short *)((*data)+4)) + 8;
+	length = pntohs ((*data)+4) + 8;
 	length += 3 - (length + 3) % 4;
 	item = proto_tree_add_text(pt, *offset, length, "Response block %d", i);
 	tree = proto_item_add_subtree (item, ett_gryphon_cmd_response_block);
@@ -1189,7 +1188,7 @@
 void
 resp_sched (int src, const u_char **data, const u_char *dataend, int *offset, int msglen, proto_tree *pt)
 {
-    unsigned int    id = pntohl ((unsigned int *)(*data));
+    unsigned int    id = pntohl ((*data));
     proto_tree_add_text(pt, *offset, 4, "Transmit schedule ID: %d", id);
     BUMP (*offset, *data, 4);
 }
@@ -1199,7 +1198,7 @@
 {
     u_char  string[81];
     
-    proto_tree_add_text(pt, *offset, 4, "Program size: %d bytes", pntohl ((unsigned int *)(*data)));
+    proto_tree_add_text(pt, *offset, 4, "Program size: %d bytes", pntohl ((*data)));
     BUMP (*offset, *data, 4);
     strncpy (string, *data, 32);
     string[32] = 0;
@@ -1236,7 +1235,7 @@
 cmd_upload (int src, const u_char **data, const u_char *dataend, int *offset, int msglen, proto_tree *pt) {
     unsigned int    length;
     
-    proto_tree_add_text(pt, *offset, 2, "Block number: %d", pntohs ((unsigned short *)(*data)));
+    proto_tree_add_text(pt, *offset, 2, "Block number: %d", pntohs ((*data)));
     BUMP (*offset, *data, 4);
     proto_tree_add_text(pt, *offset+2, 1, "Handle: %hd", (*data)[2]);
     BUMP (*offset, *data, 3);
@@ -1279,7 +1278,7 @@
     proto_tree_add_text(pt, *offset, 1, "Number of programs in this response: %d", count);
     proto_tree_add_text(pt, *offset+1, 1, "reserved", NULL);
     BUMP (*offset, *data, 2);
-    proto_tree_add_text(pt, *offset, 2, "Number of remaining programs: %d", pntohs ((unsigned short *)(*data)));
+    proto_tree_add_text(pt, *offset, 2, "Number of remaining programs: %d", pntohs ((*data)));
     BUMP (*offset, *data, 2);
     for (i = 1; i <= count; i++) {
 	item = proto_tree_add_text(pt, *offset, 112, "Program %d", i);
@@ -1366,10 +1365,10 @@
 	    option_value = (*data)[2];
 	    break;
 	case 2:
-	    option_value = pntohs ((unsigned short *)((*data)+2));
+	    option_value = pntohs ((*data)+2);
 	    break;
 	case 4:
-	    option_value = pntohl ((unsigned int *)((*data)+2));
+	    option_value = pntohl ((*data)+2);
 	    break;
 	default:
 	    option_value = 0;
@@ -1420,8 +1419,8 @@
 filter_block (int src, const u_char **data, const u_char *dataend, int *offset, int msglen, proto_tree *pt) {
     int     length, type, i, operator, padding;
     
-    proto_tree_add_text(pt, *offset, 2, "Filter field starts at byte %d", pntohs ((unsigned short *)(*data)));
-    length = pntohs ((unsigned short *)((*data)+2));
+    proto_tree_add_text(pt, *offset, 2, "Filter field starts at byte %d", pntohs ((*data)));
+    length = pntohs ((*data)+2);
     proto_tree_add_text(pt, *offset+2, 2, "Filter field is %d bytes long", length);
     type = *((*data)+4);
     for (i = 0; i < SIZEOF(filter_data_types); i++) {
@@ -1452,10 +1451,10 @@
     	    proto_tree_add_text(pt, *offset, 1, "Value: %hd", **data);
 	    break;
 	case 2:
-   	    proto_tree_add_text(pt, *offset, 2, "Value: %d", pntohs ((unsigned short *)(*data)));
+   	    proto_tree_add_text(pt, *offset, 2, "Value: %d", pntohs ((*data)));
 	    break;
 	case 4:
-   	    proto_tree_add_text(pt, *offset, 4, "Value: %dl", pntohl ((unsigned long *)(*data)));
+   	    proto_tree_add_text(pt, *offset, 4, "Value: %dl", pntohl ((*data)));
 	    break;
 	default:
    	    proto_tree_add_text(pt, *offset, length, "Value", NULL);
@@ -1475,8 +1474,8 @@
     char    *mode, line[50];
     int     x, y, seconds;
     
-    x = pntohl ((unsigned long *)(*data));
-    y = pntohl ((unsigned long *)((*data)+4));
+    x = pntohl ((*data));
+    y = pntohl ((*data)+4);
     switch (x) {
     case 0:
     	mode = "Off";