summaryrefslogtreecommitdiff
path: root/wiretap/iseries.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2016-03-28 18:37:27 -0700
committerGuy Harris <guy@alum.mit.edu>2016-03-29 01:38:09 +0000
commit24768a7147b27daba28e2e88c333f0826724fe80 (patch)
treec570ec2dd3b94904d4937a3238f8b7cf2207aaab /wiretap/iseries.c
parent9f40a75bbb9ea8e205bf0ebf9f0651971417cd6e (diff)
downloadwireshark-24768a7147b27daba28e2e88c333f0826724fe80.tar.gz
Assorted cleanups.
1) Handle the ASCII and Unicode magic numbers the same way - as static const char arrays. Note that Unicode specifically means little-endian UCS-2 (or UTF-16, but they probably use few if any characters outside of ASCII, much less the Basic Multilingual Plane). 2) Treat all seek errors as open errors rather than "not my file type". 3) Fix capitalization of "Unicode". Change-Id: I47b7e057ccada00347499a6b17f8f8fc44e7c503 Reviewed-on: https://code.wireshark.org/review/14689 Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'wiretap/iseries.c')
-rw-r--r--wiretap/iseries.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/wiretap/iseries.c b/wiretap/iseries.c
index 29fc5332bd..4f446eee33 100644
--- a/wiretap/iseries.c
+++ b/wiretap/iseries.c
@@ -22,7 +22,7 @@
/*
* This module will read the contents of the iSeries (OS/400) Communication trace
- * Both ASCII & Unicode formatted traces are supported.
+ * Both ASCII & Unicode (little-endian UCS-2) formatted traces are supported.
*
* iSeries Comms traces consist of a header page and a subsequent number of packet records
*
@@ -30,7 +30,7 @@
* currently the following options are a requirement for this module:
*
* 1. Object protocol = ETHERNET (Default)
- * 2. ASCII or UNICODE file formats.
+ * 2. ASCII or Unicode file formats.
*
* The above can be acheived by passing option ASCII(*YES) with the trace command
*
@@ -159,8 +159,6 @@ Number S/R Length Timer MAC Address MAC Address
#include <wsutil/str_util.h>
-#define ISERIES_HDR_MAGIC_STR "COMMUNICATIONS TRACE"
-#define ISERIES_HDR_MAGIC_LEN 20
#define ISERIES_LINE_LENGTH 270
#define ISERIES_HDR_LINES_TO_CHECK 100
#define ISERIES_PKT_LINES_TO_CHECK 4
@@ -170,6 +168,24 @@ Number S/R Length Timer MAC Address MAC Address
#define ISERIES_FORMAT_ASCII 1
#define ISERIES_FORMAT_UNICODE 2
+/*
+ * Magic strings - "COMMUNICATIONS TRACE", in ASCII and little-endian UCS-2.
+ */
+static const char iseries_hdr_magic_ascii[] = {
+ 'C', 'O', 'M', 'M',
+ 'U', 'N', 'I', 'C',
+ 'A', 'T', 'I', 'O',
+ 'N', 'S', ' ', 'T',
+ 'R', 'A', 'C', 'E'
+};
+static const char iseries_hdr_magic_le_ucs_2[] = {
+ 'C', 0x0, 'O', 0x0, 'M', 0x0, 'M', 0x0,
+ 'U', 0x0, 'N', 0x0, 'I', 0x0, 'C', 0x0,
+ 'A', 0x0, 'T', 0x0, 'I', 0x0, 'O', 0x0,
+ 'N', 0x0, 'S', 0x0, ' ', 0x0, 'T', 0x0,
+ 'R', 0x0, 'A', 0x0, 'C', 0x0, 'E', 0x0
+};
+
typedef struct {
gboolean have_date; /* TRUE if we found a capture start date */
int year, month, day; /* The start date */
@@ -200,11 +216,6 @@ iseries_open (wtap * wth, int *err, gchar ** err_info)
{
gint offset;
char magic[ISERIES_LINE_LENGTH];
- char unicodemagic[] =
- { '\x43', '\x00', '\x4F', '\x00', '\x4D',
- '\x00', '\x4D', '\x00', '\x55', '\x00', '\x4E', '\x00', '\x49', '\x00',
- '\x43', '\x00', '\x41'
- };
/*
* Check that file starts with a valid iSeries COMMS TRACE header
@@ -218,15 +229,16 @@ iseries_open (wtap * wth, int *err, gchar ** err_info)
}
/*
- * Check if this is a UNICODE formatted file by scanning for the magic string
+ * Check if this is a little-endian UCS-2 Unicode formatted file by scanning
+ * for the magic string
*/
offset=0;
- while ((unsigned int)offset < (ISERIES_LINE_LENGTH - (sizeof unicodemagic)))
+ while ((unsigned int)offset < (ISERIES_LINE_LENGTH - (sizeof iseries_hdr_magic_le_ucs_2)))
{
- if (memcmp (magic + offset, unicodemagic, sizeof unicodemagic) == 0) {
+ if (memcmp (magic + offset, iseries_hdr_magic_le_ucs_2, sizeof iseries_hdr_magic_le_ucs_2) == 0) {
if (file_seek (wth->fh, 0, SEEK_SET, err) == -1)
{
- return WTAP_OPEN_NOT_MINE;
+ return WTAP_OPEN_ERROR;
}
/*
* Do some basic sanity checking to ensure we can handle the
@@ -260,13 +272,13 @@ iseries_open (wtap * wth, int *err, gchar ** err_info)
* Check if this is a ASCII formatted file by scanning for the magic string
*/
offset=0;
- while (offset < (ISERIES_LINE_LENGTH - ISERIES_HDR_MAGIC_LEN))
+ while ((unsigned int)offset < (ISERIES_LINE_LENGTH - sizeof iseries_hdr_magic_ascii))
{
- if (memcmp (magic + offset, ISERIES_HDR_MAGIC_STR, ISERIES_HDR_MAGIC_LEN) == 0)
+ if (memcmp (magic + offset, iseries_hdr_magic_ascii, sizeof iseries_hdr_magic_ascii) == 0)
{
if (file_seek (wth->fh, 0, SEEK_SET, err) == -1)
{
- return WTAP_OPEN_NOT_MINE;
+ return WTAP_OPEN_ERROR;
}
/*
* Do some basic sanity checking to ensure we can handle the
@@ -289,7 +301,7 @@ iseries_open (wtap * wth, int *err, gchar ** err_info)
if (file_seek (wth->fh, 0, SEEK_SET, err) == -1)
{
- return WTAP_OPEN_NOT_MINE;
+ return WTAP_OPEN_ERROR;
}
return WTAP_OPEN_MINE;
}