Compiler and static analyzer fixes from Peter Schorn.

This commit is contained in:
Mark Pizzolato 2013-04-13 16:59:54 -07:00
parent ee3d98a125
commit 4bd72e666c
8 changed files with 88 additions and 70 deletions

91
scp.c
View file

@ -564,7 +564,7 @@ const struct scp_error {
{"TTMO", "Console Telnet connection timed out"},
{"STALL", "Console Telnet output stall"},
{"AFAIL", "Assertion failed"},
};
};
const size_t size_map[] = { sizeof (int8),
sizeof (int8), sizeof (int16), sizeof (int32), sizeof (int32)
@ -722,12 +722,12 @@ static CTAB cmd_table[] = {
"sh{ow} fea{tures} show system devices with descriptions\n"
"sh{ow} m{odifiers} show modifiers for all devices\n"
"sh{ow} s{how} show SHOW commands for all devices\n"
"sh{ow} n{ames} show logical names\n"
"sh{ow} q{ueue} show event queue\n"
"sh{ow} n{ames} show logical names\n"
"sh{ow} q{ueue} show event queue\n"
"sh{ow} ti{me} show simulated time\n"
"sh{ow} th{rottle} show simulation rate\n"
"sh{ow} th{rottle} show simulation rate\n"
"sh{ow} a{synch} show asynchronouse I/O state\n"
"sh{ow} ve{rsion} show simulator version\n"
"sh{ow} ve{rsion} show simulator version\n"
"sh{ow} def{ault} show current directory\n"
"sh{ow} <dev> RADIX show device display radix\n"
"sh{ow} <dev> DEBUG show device debug flags\n"
@ -784,19 +784,19 @@ static CTAB cmd_table[] = {
#if defined(_WIN32) || defined(__hpux)
static
int setenv(const char *envname, const char *envval, int overwrite)
{
char *envstr = malloc(strlen(envname)+strlen(envval)+2);
int r;
{
char *envstr = malloc(strlen(envname)+strlen(envval)+2);
int r;
sprintf(envstr, "%s=%s", envname, envval);
sprintf(envstr, "%s=%s", envname, envval);
#if defined(_WIN32)
r = _putenv(envstr);
free(envstr);
r = _putenv(envstr);
free(envstr);
#else
r = putenv(envstr);
r = putenv(envstr);
#endif
return r;
}
return r;
}
#endif
@ -1646,7 +1646,6 @@ do {
cmdp->message ((!echo && !sim_quiet) ? ocptr : NULL, stat);
else
if (stat >= SCPE_BASE) { /* report error if not suppressed */
printf ("%s\n", sim_error_text (stat));
if (sim_log)
fprintf (sim_log, "%s\n", sim_error_text (stat));
@ -1874,7 +1873,7 @@ return SCPE_OK;
}
/* Assert command
Syntax: ASSERT {<dev>} <reg>{<logical-op><value>}<conditional-op><value>
If <dev> is not specified, CPU is assumed. <value> is expressed in the radix
@ -2196,7 +2195,7 @@ return SCPE_OK;
t_stat set_cmd (int32 flag, char *cptr)
{
uint32 lvl;
uint32 lvl = 0;
t_stat r;
char gbuf[CBUFSIZE], *cvptr, *svptr;
DEVICE *dptr;
@ -2592,7 +2591,7 @@ while (*cptr != 0) { /* do all mods */
*cvptr++ = 0;
for (mptr = dptr->modifiers; mptr->mask != 0; mptr++) {
if (((mptr->mask & MTAB_XTD)? /* right level? */
(mptr->mask & lvl): (MTAB_VUN & lvl)) &&
(mptr->mask & lvl): (MTAB_VUN & lvl)) &&
((mptr->disp && mptr->pstring && /* named disp? */
(MATCH_CMD (gbuf, mptr->pstring) == 0))
// ||
@ -2755,7 +2754,7 @@ if (cptr && (*cptr != 0))
fprintf (st, "%s simulator V%d.%d-%d", sim_name, vmaj, vmin, vpat);
if (vdelt)
fprintf (st, " delta %d", vdelt);
#if defined(SIM_VERSION_MODE)
#if defined (SIM_VERSION_MODE)
fprintf (st, " %s", SIM_VERSION_MODE);
#endif
if (flag) {
@ -2774,13 +2773,25 @@ if (flag) {
#if defined (SIM_ASYNCH_IO)
fprintf (st, "\n\t\tAsynchronous I/O support");
#endif
#if defined(SIM_ASYNCH_MUX)
#if defined (SIM_ASYNCH_MUX)
fprintf (st, "\n\t\tAsynchronous Multiplexer support");
#endif
#if defined(SIM_ASYNCH_CLOCKS)
#if defined (SIM_ASYNCH_CLOCKS)
fprintf (st, "\n\t\tAsynchronous Clock support");
#endif
fprintf (st, "\n\tHost Platform:");
#if defined (__clang_version__)
fprintf (st, "\n\t\tCompiler: clang %s", __clang_version__);
#elif defined (__GNUC__) && defined (__VERSION__)
fprintf (st, "\n\t\tCompiler: GCC %s", __VERSION__);
#elif defined (_MSC_FULL_VER) && defined (_MSC_BUILD)
fprintf (st, "\n\t\tCompiler: Microsoft Visual C++ %d.%02d.%05d.%02d", _MSC_FULL_VER/10000000, (_MSC_FULL_VER/100000)%100, _MSC_FULL_VER%100000, _MSC_BUILD);
#elif defined (__DECC_VER)
fprintf (st, "\n\t\tCompiler: DEC C %c%d.%d-%03d", ("T SV")[((__DECC_VER/10000)%10)-6], __DECC_VER/10000000, (__DECC_VER/100000)%100, __DECC_VER%10000);
#endif
#if defined (__DATE__) && defined (__TIME__)
fprintf (st, "\n\t\tSimulator Compiled: %s at %s", __DATE__, __TIME__);
#endif
fprintf (st, "\n\t\tMemory Access: %s Endian", sim_end ? "Little" : "Big");
fprintf (st, "\n\t\tMemory Pointer Size: %d bits", (int)sizeof(dptr)*8);
fprintf (st, "\n\t\t%s", sim_toffset_64 ? "Large File (>2GB) support" : "No Large File support");
@ -2802,6 +2813,15 @@ if (flag) {
#define S_xstr(a) S_str(a)
#define S_str(a) #a
fprintf (st, "%sgit commit id: %8.8s", flag ? "\n " : " ", S_xstr(SIM_GIT_COMMIT_ID));
#undef S_str
#undef S_xstr
#endif
#if defined(SIM_BUILD)
#define S_xstr(a) S_str(a)
#define S_str(a) #a
fprintf (st, "%sBuild: %s", flag ? "\n " : " ", S_xstr(SIM_BUILD));
#undef S_str
#undef S_xstr
#endif
fprintf (st, "\n");
return SCPE_OK;
@ -3011,7 +3031,7 @@ DEVICE *dptr;
if (cptr && (*cptr != 0)) /* now eol? */
return SCPE_2MARG;
for (i = 0; (dptr = sim_devices[i]) != NULL; i++)
for (i = 0; (dptr = sim_devices[i]) != NULL; i++)
show_dev_modifiers (st, dptr, NULL, flag, cptr);
for (i = 0; sim_internal_device_count && (dptr = sim_internal_devices[i]); ++i)
show_dev_modifiers (st, dptr, NULL, flag, cptr);
@ -3106,7 +3126,7 @@ sim_trim_endspc(cptr);
if (chdir(cptr) != 0) {
printf("Unable to change to: %s\n", cptr);
return SCPE_IOERR & SCPE_NOMESSAGE;
}
}
return SCPE_OK;
}
@ -3132,7 +3152,7 @@ t_stat r;
t_addr lo, hi, max = uptr->capac - 1;
int32 cnt;
if (sim_brk_types == 0)
if (sim_brk_types == 0)
return SCPE_NOFNC;
if ((dptr == NULL) || (uptr == NULL))
return SCPE_IERR;
@ -3166,7 +3186,7 @@ while (*cptr) {
sim_brk_showall (st, sim_switches);
else return SCPE_ARG;
}
else {
else {
for ( ; lo <= hi; lo = lo + 1) {
r = ssh_break_one (st, flg, lo, cnt, aptr);
if (r != SCPE_OK)
@ -3377,7 +3397,11 @@ if (sim_switches & SWMASK ('R')) { /* read only? */
else { /* normal */
uptr->fileref = sim_fopen (cptr, "rb+"); /* open r/w */
if (uptr->fileref == NULL) { /* open fail? */
#if defined(EPERM)
if ((errno == EROFS) || (errno == EACCES) || (errno == EPERM)) {/* read only? */
#else
if ((errno == EROFS) || (errno == EACCES)) { /* read only? */
#endif
if ((uptr->flags & UNIT_ROABLE) == 0) /* allowed? */
return attach_err (uptr, SCPE_NORO); /* no error */
uptr->fileref = sim_fopen (cptr, "rb"); /* open rd only */
@ -3807,7 +3831,7 @@ fstat (fileno (rfile), &rstat);
READ_S (buf); /* [V2.5+] read version */
v35 = v32 = FALSE;
if (strcmp (buf, save_vercur) == 0) /* version 3.5? */
v35 = v32 = TRUE;
v35 = v32 = TRUE;
else if (strcmp (buf, save_ver32) == 0) /* version 3.2? */
v32 = TRUE;
else if (strcmp (buf, save_ver30) != 0) { /* version 3.0? */
@ -4307,6 +4331,7 @@ return sim_cancel (&sim_step_unit);
void int_handler (int sig)
{
stop_cpu = 1;
sim_interval = 0; /* should speed up stop detection */
return;
}
@ -4362,7 +4387,7 @@ for (gptr = gbuf, reason = SCPE_OK;
tdptr = sim_dfdev; /* working dptr */
if (strncmp (gptr, "STATE", strlen ("STATE")) == 0) {
tptr = gptr + strlen ("STATE");
if (*tptr && (*tptr++ != ','))
if (*tptr && (*tptr++ != ','))
return SCPE_ARG;
if ((lowr = sim_dfdev->registers) == NULL)
return SCPE_NXREG;
@ -4421,7 +4446,7 @@ return reason;
exdep_addr_loop examine/deposit range of addresses
*/
t_stat exdep_reg_loop (FILE *ofile, SCHTAB *schptr, int32 flag, char *cptr,
t_stat exdep_reg_loop (FILE *ofile, SCHTAB *schptr, int32 flag, char *cptr,
REG *lowr, REG *highr, uint32 lows, uint32 highs)
{
t_stat reason;
@ -4693,13 +4718,13 @@ if ((rptr->depth > 1) && (rptr->flags & REG_UNIT)) {
#if defined (USE_INT64)
if (sz <= sizeof (uint32))
*((uint32 *) uptr) = (*((uint32 *) uptr) &
~(((uint32) mask) << rptr->offset)) |
~(((uint32) mask) << rptr->offset)) |
(((uint32) val) << rptr->offset);
else *((t_uint64 *) uptr) = (*((t_uint64 *) uptr)
& ~(mask << rptr->offset)) | (val << rptr->offset);
#else
*((uint32 *) uptr) = (*((uint32 *) uptr) &
~(((uint32) mask) << rptr->offset)) |
~(((uint32) mask) << rptr->offset)) |
(((uint32) val) << rptr->offset);
#endif
}
@ -4887,7 +4912,7 @@ for (i = 0, j = addr; i < count; i++, j = j + dptr->aincr) {
loc = j / dptr->aincr;
if (uptr->flags & UNIT_BUF) {
SZ_STORE (sz, sim_eval[i], uptr->filebuf, loc);
if (loc >= uptr->hwmark)
if (loc >= uptr->hwmark)
uptr->hwmark = (uint32) loc + 1;
}
else {
@ -5526,7 +5551,7 @@ while (*cptr) { /* loop through modifier
cptr = get_glyph_nc (cptr + 1, gbuf, 0);
sim_ofile = sim_fopen (gbuf, "a"); /* open for append */
if (sim_ofile == NULL) { /* open failed? */
*st = SCPE_OPENERR;
*st = SCPE_OPENERR;
return NULL;
}
sim_opt_out |= CMD_OPT_OF; /* got output file */
@ -6565,7 +6590,7 @@ if (sim_deb && (dptr->dctrl & dbits)) {
Callers should be calling sim_debug() which is a macro
defined in scp.h which evaluates the action condition before
incurring call overhead. */
void _sim_debug (uint32 dbits, DEVICE* dptr, const char* fmt, ...)
{
if (sim_deb && (dptr->dctrl & dbits)) {

View file

@ -1310,7 +1310,7 @@ if ((std_input) && /* Not Background proces
GetConsoleMode (std_input, &saved_mode); /* Save Mode */
return SCPE_OK;
}
static t_stat sim_os_ttrun (void)
{
if ((std_input) && /* If Not Background process? */

View file

@ -579,7 +579,7 @@ struct sim_schtab {
struct sim_brktab {
t_addr addr; /* address */
int32 typ; /* mask of types */
int32 cnt; /* proceed count */
int32 cnt; /* proceed count */
char *act; /* action string */
};

View file

@ -534,7 +534,7 @@ t_stat sim_disk_rdsect (UNIT *uptr, t_lba lba, uint8 *buf, t_seccnt *sectsread,
{
t_stat r;
struct disk_context *ctx = (struct disk_context *)uptr->disk_ctx;
t_seccnt sread;
t_seccnt sread = 0;
sim_debug (ctx->dbit, ctx->dptr, "sim_disk_rdsect(unit=%d, lba=0x%X, sects=%d)\n", (int)(uptr-ctx->dptr->units), lba, sects);
@ -2185,10 +2185,10 @@ typedef t_int64 int64;
typedef struct _VHD_Footer {
/*
Cookies are used to uniquely identify the original creator of the hard disk
image. The values are case-sensitive. Microsoft uses the conectix string
image. The values are case-sensitive. Microsoft uses the "conectix" string
to identify this file as a hard disk image created by Microsoft Virtual
Server, Virtual PC, and predecessor products. The cookie is stored as an
eight-character ASCII string with the c in the first byte, the o in
eight-character ASCII string with the "c" in the first byte, the "o" in
the second byte, and so on.
*/
char Cookie[8];
@ -2303,7 +2303,7 @@ typedef struct _VHD_Footer {
uint32 DiskType;
/*
This field holds a basic checksum of the hard disk footer. It is just a
ones complement of the sum of all the bytes in the footer without the
one's complement of the sum of all the bytes in the footer without the
checksum field.
If the checksum verification fails, the Virtual PC and Virtual Server
products will instead use the header. If the checksum in the header also
@ -2342,7 +2342,7 @@ typedef struct _VHD_Footer {
} VHD_Footer;
/*
For dynamic and differencing disk images, the Data Offset field within
For dynamic and differencing disk images, the "Data Offset" field within
the image footer points to a secondary structure that provides additional
information about the disk image. The dynamic disk header should appear on
a sector (512-byte) boundary.
@ -2389,7 +2389,7 @@ typedef struct _VHD_DynamicDiskHeader {
*/
uint32 BlockSize;
/*
This field holds a basic checksum of the dynamic header. It is a ones
This field holds a basic checksum of the dynamic header. It is a one's
complement of the sum of all the bytes in the header without the checksum
field.
If the checksum verification fails the file should be assumed to be corrupt.
@ -2398,7 +2398,7 @@ typedef struct _VHD_DynamicDiskHeader {
/*
This field is used for differencing hard disks. A differencing hard disk
stores a 128-bit UUID of the parent hard disk. For more information, see
Creating Differencing Hard Disk Images later in this paper.
"Creating Differencing Hard Disk Images" later in this paper.
*/
uint8 ParentUniqueID[16];
/*
@ -2424,8 +2424,8 @@ typedef struct _VHD_DynamicDiskHeader {
/*
The platform code describes which platform-specific format is used for the
file locator. For Windows, a file locator is stored as a path (for example.
c:\disksimages\ParentDisk.vhd). On a Macintosh system, the file locator
is a binary large object (blob) that contains an alias. The parent locator
"c:\disksimages\ParentDisk.vhd"). On a Macintosh system, the file locator
is a binary large object (blob) that contains an "alias." The parent locator
table is used to support moving hard disk images across platforms.
Some current platform codes include the following:
Platform Code Description

View file

@ -2009,41 +2009,41 @@ sim_debug(dev->dbit, dev->dptr, "Determining Address Conflict for MAC address: %
be affected by an address conflict were physically present on a single
Ethernet cable which might have been extended by a couple of repeaters).
Since that time, essentially no networks are single collision domains.
Thick and thinwire Ethernet cables dont exist and very few networks
Thick and thinwire Ethernet cables don't exist and very few networks
even have hubs. Today, essentially all LANs are deployed using one
or more layers of network switches. In a switched LAN environment, the
switches on the LAN learn which ports on the LAN source traffic from
switches on the LAN "learn" which ports on the LAN source traffic from
which MAC addresses and then forward traffic destined for particular
MAC address to the appropriate ports. If a particular MAC address is
already in use somewhere on the LAN, then the switches know where
already in use somewhere on the LAN, then the switches "know" where
it is. The host based test using the loopback protocol is poorly
designed to detect this condition. This test is performed by the host
first changing the devices Physical MAC address to the address which
first changing the device's Physical MAC address to the address which
is to be tested, and then sending a loopback packet FROM AND TO this
MAC address with a loopback reply to be sent by a system which may be
currently using the MAC address. If no reply is received, then the
MAC address is presumed to be unused. The sending of this packet will
result in its delivery to the right system since the switch port/MAC
address tables know where to deliver packets destined to this MAC
address, however the response it generates wont be delivered to the
system performing the test since the switches on the LAN wont know
address, however the response it generates won't be delivered to the
system performing the test since the switches on the LAN won't know
about the local port being the right target for packets with this MAC
address. A better test design to detect these conflicts would be for
the testing system to send a loopback packet FROM the current physical
MAC address (BEFORE changing it) TO the MAC address being tested with
the loopback response coming to the current physical MAC address of
the device. If a response is received, then the address is in use and
the attempt to change the devices MAC address should fail. Since we
cant change the software running in these simulators to implement this
better conflict detection approach, we can still do the right thing
in the sim_ether layer. Were already handling the loopback test
the attempt to change the device's MAC address should fail. Since we
can't change the software running in these simulators to implement this
better conflict detection approach, we can still "do the right thing"
in the sim_ether layer. We're already handling the loopback test
packets specially since we always had to avoid receiving the packets
which were being sent, but needed to allow for the incoming loopback
packets to be properly dealt with. We can extend this current special
handling to change outgoing loopback to self packets to have source
AND loopback destination addresses in the packets to be the host NICs
handling to change outgoing "loopback to self" packets to have source
AND loopback destination addresses in the packets to be the host NIC's
physical address. The switch network will already know the correct
MAC/port relationship for the host NICs physical address, so loopback
MAC/port relationship for the host NIC's physical address, so loopback
response packets will be delivered as needed.
Code in _eth_write and _eth_callback provide the special handling to

View file

@ -78,7 +78,7 @@
#endif
/* cygwin dowsn't have the right features to use the threaded network I/O */
#if defined(__CYGWIN__)
#if defined(__CYGWIN__) || defined(__ZAURUS__) // psco added check for Zaurus platform
#define DONT_USE_READER_THREAD
#endif

View file

@ -180,7 +180,7 @@ return sim_os_msec() - start_time;
const t_bool rtc_avail = TRUE;
uint32 sim_os_msec ()
uint32 sim_os_msec (void)
{
uint32 quo, htod, tod[2];
int32 i;
@ -260,7 +260,7 @@ return 0;
const t_bool rtc_avail = TRUE;
uint32 sim_os_msec ()
uint32 sim_os_msec (void)
{
if (sim_idle_rate_ms)
return timeGetTime ();
@ -330,7 +330,7 @@ return 0;
const t_bool rtc_avail = FALSE;
uint32 sim_os_msec ()
uint32 sim_os_msec (void)
{
return 0;
}
@ -426,7 +426,7 @@ return 0;
const t_bool rtc_avail = TRUE;
uint32 sim_os_msec ()
uint32 sim_os_msec (void)
{
struct timeval cur;
struct timezone foo;

View file

@ -2561,18 +2561,11 @@ return SCPE_OK;
t_stat tmxr_attach_ex (TMXR *mp, UNIT *uptr, char *cptr, t_bool async)
{
char* tptr = NULL;
t_stat r;
tptr = (char *) calloc (1, 1);
if (tptr == NULL) /* no more mem? */
return SCPE_MEM;
r = tmxr_open_master (mp, cptr); /* open master socket */
if (r != SCPE_OK) { /* error? */
free (tptr); /* release buf */
if (r != SCPE_OK) /* error? */
return r;
}
mp->uptr = uptr; /* save unit for polling */
uptr->filename = _mux_attach_string (uptr->filename, mp);/* save */
uptr->flags = uptr->flags | UNIT_ATT; /* no more errors */