walt_waldo_novinger@cup.portal.com (12/31/87)
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 ========================================================================