walt_waldo_novinger@cup.portal.com (01/02/88)
Note: this may be a doulbe posting. Our gateway was down for a couple
of days.
Walt
I have found and reported to MicroSoft the following bugs in the
QuickC v1.0 `_splitpath` function and its documentation. The
code fragment below illustrates the code which will reproduce
the bug. The following describes the problems:
1) The documentation in the "Run-Time Library Reference",
pp 559-60 contains several errors. The Summary indicates
that `stdlib.h` must be included, while the example shows
`dos.h`; `stdlib.h` is correct.
2) The example program shows the returned variables declared
as "char * var [n]". The example program below shows the
*correct* declaration syntax.
3) The bug, which can be observed under the debugger, is
that the first character of the `prog` variable is left
as a null. For instance, if the string "d:\\tmp\\bazfaz.exe"
is fed to the function, `prog` will contain "\0azfaz\0\0\0"
on return. The rest of the variables are correctly set.
Items 1) and 2) above apply to the documentation for `_makepath`
as well (pp 407-08); `_makepath` *does* work as documented, however.
I am awaiting a response from MicroSoft vis-a-vis a patch
(though the tech with whom I spoke indicated that they probably
won't release one). If I receive one or any hard info on a fix,
I'll post it here.
========================= Example Program =================================
#include <stdio.h>
#include <stdlib.h>
/* get program name from DOS, extract base name and convert to lowercase */
char *progname(pathname)
char pathname[40];
{
char drive[3]; /* note that `*` is *incorrect* */
char dir[60];
char prog[9];
char ext[4];
char *result;
_splitpath(pathname, drive, dir, prog, ext);
result = strlwr(prog); /* convert to lowercase */
return (result);
}
main(argc, argv)
int argc;
char *argv[];
{
char *pro;
pro = progname(argv[0]); /* extract program name w/o extension */
[...]
exit (0);
}
========================================================================
Walt Novinger sun!cup.portal.com!waldo "The real world is
680 Sylvan Ave. #17 waldo@cup.portal.com NOT user-friendly"
Mountain View, CA 94041 (415) 964-9377 Kelvin Throop
========================================================================