SCP: add generic length limted and case independent string for all platforms

This commit is contained in:
Mark Pizzolato 2017-04-22 21:28:48 -07:00
parent 9179c4ea07
commit 168d0d9c47
4 changed files with 14 additions and 10 deletions

12
scp.c
View file

@ -2123,7 +2123,7 @@ else if (*argv[0]) { /* sim name arg? */
strncpy (nbuf + 1, argv[0], PATH_MAX + 1); /* copy sim name */ strncpy (nbuf + 1, argv[0], PATH_MAX + 1); /* copy sim name */
if ((np = (char *)match_ext (nbuf, "EXE"))) /* remove .exe */ if ((np = (char *)match_ext (nbuf, "EXE"))) /* remove .exe */
*np = 0; *np = 0;
sim_strlcat (nbuf, ".ini\"", sizeof(nbuf)); /* add .ini" */ strlcat (nbuf, ".ini\"", sizeof(nbuf)); /* add .ini" */
stat = do_cmd (-1, nbuf) & ~SCPE_NOMESSAGE; /* proc default cmd file */ stat = do_cmd (-1, nbuf) & ~SCPE_NOMESSAGE; /* proc default cmd file */
if (stat == SCPE_OPENERR) { /* didn't exist/can't open? */ if (stat == SCPE_OPENERR) { /* didn't exist/can't open? */
np = strrchr (nbuf, '/'); /* stript path and try again in cwd */ np = strrchr (nbuf, '/'); /* stript path and try again in cwd */
@ -2916,8 +2916,8 @@ for (nargs = 0; nargs < 10; ) { /* extract arguments */
if (do_arg [0] == NULL) /* need at least 1 */ if (do_arg [0] == NULL) /* need at least 1 */
return SCPE_2FARG; return SCPE_2FARG;
if ((fpin = fopen (do_arg[0], "r")) == NULL) { /* file failed to open? */ if ((fpin = fopen (do_arg[0], "r")) == NULL) { /* file failed to open? */
sim_strlcpy (cbuf, do_arg[0], sizeof (cbuf)); /* try again with .sim extension */ strlcpy (cbuf, do_arg[0], sizeof (cbuf)); /* try again with .sim extension */
sim_strlcat (cbuf, ".sim", sizeof (cbuf)); strlcat (cbuf, ".sim", sizeof (cbuf));
if ((fpin = fopen (cbuf, "r")) == NULL) { /* failed a second time? */ if ((fpin = fopen (cbuf, "r")) == NULL) { /* failed a second time? */
if (flag == 0) /* cmd line file? */ if (flag == 0) /* cmd line file? */
fprintf (stderr, "Can't open file %s\n", do_arg[0]); fprintf (stderr, "Can't open file %s\n", do_arg[0]);
@ -5094,15 +5094,15 @@ sim_strlcpy (WildName, cptr, sizeof(WildName));
cptr = WildName; cptr = WildName;
sim_trim_endspc (WildName); sim_trim_endspc (WildName);
if ((!stat (WildName, &filestat)) && (filestat.st_mode & S_IFDIR)) if ((!stat (WildName, &filestat)) && (filestat.st_mode & S_IFDIR))
sim_strlcat (WildName, "/*", sizeof(WildName)); strlcat (WildName, "/*", sizeof(WildName));
if ((*cptr != '/') || (0 == memcmp (cptr, "./", 2)) || (0 == memcmp (cptr, "../", 3))) { if ((*cptr != '/') || (0 == memcmp (cptr, "./", 2)) || (0 == memcmp (cptr, "../", 3))) {
#if defined (VMS) #if defined (VMS)
getcwd (WholeName, sizeof(WholeName)-1, 0); getcwd (WholeName, sizeof(WholeName)-1, 0);
#else #else
getcwd (WholeName, sizeof(WholeName)-1); getcwd (WholeName, sizeof(WholeName)-1);
#endif #endif
sim_strlcat (WholeName, "/", sizeof(WholeName)); strlcat (WholeName, "/", sizeof(WholeName));
sim_strlcat (WholeName, cptr, sizeof(WholeName)); strlcat (WholeName, cptr, sizeof(WholeName));
sim_trim_endspc (WholeName); sim_trim_endspc (WholeName);
} }
else else

4
scp.h
View file

@ -160,6 +160,10 @@ int sim_strncasecmp (const char *string1, const char *string2, size_t len);
int sim_strcasecmp (const char *string1, const char *string2); int sim_strcasecmp (const char *string1, const char *string2);
size_t sim_strlcat (char *dst, const char *src, size_t size); size_t sim_strlcat (char *dst, const char *src, size_t size);
size_t sim_strlcpy (char *dst, const char *src, size_t size); size_t sim_strlcpy (char *dst, const char *src, size_t size);
#define strlcpy(dst, src, size) sim_strlcpy((dst), (src), (size))
#define strlcat(dst, src, size) sim_strlcat((dst), (src), (size))
#define strncasecmp(str1, str2, len) sim_strncasecmp((str1), (str2), (len))
#define strcasecmp(str1, str2) sim_strcasecmp ((str1), (str2))
CONST char *get_sim_opt (int32 opt, CONST char *cptr, t_stat *st); CONST char *get_sim_opt (int32 opt, CONST char *cptr, t_stat *st);
const char *put_switches (char *buf, size_t bufsize, uint32 sw); const char *put_switches (char *buf, size_t bufsize, uint32 sw);
CONST char *get_glyph (const char *iptr, char *optr, char mchar); CONST char *get_glyph (const char *iptr, char *optr, char mchar);

View file

@ -861,7 +861,7 @@ CONST char *cptr;
int32 saved_switches = sim_switches; int32 saved_switches = sim_switches;
t_stat stat; t_stat stat;
sim_strlcpy (cbuf, sim_rem_command_buf, sizeof (cbuf)); strlcpy (cbuf, sim_rem_command_buf, sizeof (cbuf));
while (isspace(cbuf[0])) while (isspace(cbuf[0]))
memmove (cbuf, cbuf+1, strlen(cbuf+1)+1); /* skip leading whitespace */ memmove (cbuf, cbuf+1, strlen(cbuf+1)+1); /* skip leading whitespace */
sim_sub_args (cbuf, sizeof(cbuf), argv); sim_sub_args (cbuf, sizeof(cbuf), argv);
@ -3598,8 +3598,8 @@ static t_stat sim_os_ttinit (void) {
SIOUXSettings.toppixel = 42; SIOUXSettings.toppixel = 42;
SIOUXSettings.leftpixel = 6; SIOUXSettings.leftpixel = 6;
iBeamCursorH = GetCursor(iBeamCursor); iBeamCursorH = GetCursor(iBeamCursor);
sim_strlcat(title, sim_name, sizeof(title)); strlcat(title, sim_name, sizeof(title));
sim_strlcat(title, " Simulator", sizeof(title)); strlcat(title, " Simulator", sizeof(title));
title[0] = strlen(title) - 1; /* Pascal string done */ title[0] = strlen(title) - 1; /* Pascal string done */
for (i = 0; i <= title[0]; i++) { /* copy to unsigned char */ for (i = 0; i <= title[0]; i++) { /* copy to unsigned char */
ptitle[i] = title[i]; ptitle[i] = title[i];

View file

@ -1144,7 +1144,7 @@ int load_pcap(void) {
char npcap_path[512] = ""; char npcap_path[512] = "";
if (p_GetSystemDirectory (npcap_path, sizeof(npcap_path) - 7)) if (p_GetSystemDirectory (npcap_path, sizeof(npcap_path) - 7))
sim_strlcat (npcap_path, "\\Npcap", sizeof(npcap_path)); strlcat (npcap_path, "\\Npcap", sizeof(npcap_path));
if (p_SetDllDirectory(npcap_path)) if (p_SetDllDirectory(npcap_path))
hLib = LoadLibraryA(lib_name); hLib = LoadLibraryA(lib_name);
p_SetDllDirectory (NULL); p_SetDllDirectory (NULL);