Hi!
23--2004 09:03 [EMAIL PROTECTED] (Kenneth J. Davis) wrote to
[EMAIL PROTECTED]:
else if (memicmp(argp, BOTH, 4) == 0 !both)
- AIU, there should be stricmp() (or third parameter of memicmp() should be
increased to include zero byte)?
KJD Could, but its more of, are exact arguments here really necessary?
I think, yes.
KJD There is next to no chance
?
KJD of a user accidently typing the initial part and expecting it to fail
KJD because they [purposely or accidently] tacted on some additional letters.
? Not very understand these sentences. Also, imagine next command line:
SYS A: BOOTONLY/K mykernel.sys
KJD Wasn't this originally a stricmp?
Don't know.
printf(%s: drive %c must be A:..Z:\n, pgm, *argv[drivearg]);
but I think, this diagnostic may be ommited completely.
KJD It can help pinpoint problems (such as what argument one types that it
KJD thinks is the drive
This bug will be diagnosted later, by code, which will try to access
drive.
strncpy(srcPath, argv[srcarg], sizeof srcPath - 12);
/* leave room for COMMAND.COM\0 */
srcPath[sizeof srcPath - 12] = '\0';
-^^
KJD There are 13 characters in '\\COMMAND.COM\0', which there must be room
KJD for, so the 13 is correct, but the comment could be updated to include
KJD the separator.
Precisely. Anyway, in my current code I rewrote this part.
if ((srcPath[slen - 1] != ':')
((srcPath[slen - 1] != '\\') || (srcPath[slen - 1] != '/')))
- bug? AIU, should be:
if (slen) {
KJD I think at some point the preconditions meant this check was not
KJD required, but perhaps I'm mistaken and it was overlooked.
Probably, there _was_ ready precondition, but not in code, which I see.
if (ch != ':' ch != '\\' ch != '/')
---^^
KJD good catch, I think I originally meant [but screwed up]
BTW, who currently officialy mantain SYS?
srcPath [slen] = '\\', srcPath [slen + 1] = '\0';
KJD I'd rather see
KJD {
KJD srcPath[slen] = '\\';
KJD srcPath[slen+1] = '\0';
KJD }
KJD over the use of the comma operator, as it makes it more clear that a
KJD compound statement is executed.
:) Question of taste, which easy to fix/change.
KJD slen++ or [slen+1] makes little difference to me
KJD (whichever produces more efficent code)
This depends. In case if srcPath is an array, then additional constant
offset is hidden in other displacements. If srcPath is a pointer, you
simply get one-byte instruction increase, but this removes _extra_
instruction(s) to increase slen (which later not used).
/* Don't try root if src==dst drive or source path given */
if ((drive == srcDrive)
|| (*srcPath
((srcPath[1] != ':') || ((srcPath[1] == ':') srcPath[2]
*rootPath = '\0';
else
sprintf(rootPath, %c:\\, 'A' + srcDrive);
- (x || (~x y)) equal to (x y), so, there should be:
/* Don't try root if src==dst drive or source path given */
static char root [] = \0:\\;
if (drive != srcDrive
(srcPath [0] == '\0' ||/* empty string or */
(srcPath [1] == ':' srcPath [2] == '\0'))) /* drive only A: */
root [0] = 'A' + srcDrive;
KJD I'm glad you can figure what's being checked for,
Yes.
KJD ?something about not trying root directory for copies if a path is given
Yes. Root is tried only of source ommited or given as drive letter
(A:), else (c:\temp, d:dir, subdir) only given directory is
accessed.
KJD as we may be trying to run sys onto same drive as source using
KJD kernel command.com contained within a subdirectory of itself
This prevented by srcDrive != drive. Though, I under doubt: may be in
case of and D: always should be checked only root - if you wish to get
current directory, you may use . and D:.?
---
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id56alloc_id438op=click
___
Freedos-kernel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel