diff --git a/shell/command.c b/shell/command.c index 76f048d0..965c62dd 100644 --- a/shell/command.c +++ b/shell/command.c @@ -159,6 +159,14 @@ char switchar(void) } #endif +unsigned isdrive(unsigned char cc) { + if (isalpha(cc)) + return 1; + if ((cc - 'A') < 32) + return 1; + return 0; +} + void execute(char *first, char *rest, int lh_lf) { /* @@ -177,7 +185,7 @@ void execute(char *first, char *rest, int lh_lf) assert(rest); /* check for a drive change (not for loadhigh/loadfix) */ - if (!lh_lf && (strcmp(first + 1, ":") == 0) && isalpha(*first)) + if (!lh_lf && (strcmp(first + 1, ":") == 0) && isdrive(*first)) { changeDrive(*first); return; diff --git a/suppl/src/dfnpath.c b/suppl/src/dfnpath.c index 0a1294f4..0153712a 100644 --- a/suppl/src/dfnpath.c +++ b/suppl/src/dfnpath.c @@ -75,9 +75,9 @@ char *dfnpath(int drive) DBG_ENTER("dfnpath", Suppl_dfn) DBG_ARGUMENTS( ("drive=%u ('%c')", drive, drive < 32? '.': drive) ) - if(isupper(drive)) drive -= 'A' - 1; - else if(islower(drive)) drive -= 'a' - 1; - else if((unsigned)drive > 32) { + if (islower(drive)) drive -= 'a' - 'A'; + if (drive >= 'A') drive -= 'A' - 1; + if ((unsigned)drive > 32) { eno_set( ENODEV); DBG_RETURN_S( 0) }