Re: [Freedos-kernel] Unable to use drive number 32 with some functions
Thank you. I will try to get a fix implemented this week. Your patch corrects supporting the 32nd drive if provided as value 1 thru 32 (0 is default) but still doesn't handle if passed as ascii value ` (0x60). Jeremy On Apr 26, 2015 3:51 PM, Damien Guibouret damien.guibou...@partition-saving.com wrote: Hello, I found a small problem in ioctl code that leads to drive number 32 to not be usable with device related functions (int 0x21, ah=0x44..) and leading to returning information about another drive without signaling any error. As I suppose this is not widely used (drive 27 to 32 are most often not known by users), I think this is quite minor. I wrote a patch, but did not test nor even compile it. In this patch I keep some code that from interface point of view is wrong but that is the way I understood the NDN related comment. Regards, Damien --- ioctl.c.orig2015-04-26 21:01:18.0 +0200 +++ ioctl.c 2015-04-26 21:26:48.0 +0200 @@ -164,6 +164,7 @@ { struct dpb FAR *dpbp; unsigned attr; + BYTE used_drive; /* This line previously returned the deviceheader at r-bl. But, DOS numbers its drives starting at 1, not 0. A=1, B=2, and so @@ -173,9 +174,18 @@ */ /* JPP - changed to use default drive if drive=0 */ /* JT Fixed it */ - - /* NDN feeds the actual ASCII drive letter to this function */ - dpbp = get_dpb((r-BL 0x1f) == 0 ? default_drive : (r-BL 0x1f) - 1); + if (r-BL == 0) +used_drive = default_drive; + else if ((r-BL = 1) (r-BL = 32)) +used_drive = r-BL - 1; + else if (((r-BL = 'A') (r-BL = 'Z')) || + ((r-BL = 'a') (r-BL = 'z'))) +/* NDN feeds the actual ASCII drive letter to this function */ +used_drive = (r-BL 0x1f) - 1; + else +return DE_INVLDDRV; + + dpbp = get_dpb(used_drive); if (dpbp) { CharReqHdr.r_unit = dpbp-dpb_subunit; @@ -196,7 +206,7 @@ { /* note from get_dpb()*/ /* that if cdsp == NULL then dev must be NULL too */ - struct cds FAR *cdsp = get_cds1(r-BL 0x1f); + struct cds FAR *cdsp = get_cds(used_drive); if (cdsp == NULL) return DE_INVLDDRV; if (cdsp-cdsFlags CDSSUBST) -- One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y ___ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel -- One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y___ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel
Re: [Freedos-kernel] Unable to use drive number 32 with some functions
Hello, That's right, I was not expecting NDN will use it as it is already out of the spec. You can change the else if (((r-BL = 'A') (r-BL = 'Z')) || ((r-BL = 'a') (r-BL = 'z'))) /* NDN feeds the actual ASCII drive letter to this function */ used_drive = (r-BL 0x1f) - 1; into else if (((r-BL = 'A') (r-BL = '`')) || ((r-BL = 'a') (r-BL = 'z'))) /* NDN feeds the actual ASCII drive letter to this function */ used_drive = (r-BL - 1) 0x1f; I think the lowercase case can remain as it is (there is no correspondance between lower and upper case for letters above 'z' and more over it goes outside of 7 bits ASCII range). Regards, Damien perditi...@gmail.com wrote: Thank you. I will try to get a fix implemented this week. Your patch corrects supporting the 32nd drive if provided as value 1 thru 32 (0 is default) but still doesn't handle if passed as ascii value ` (0x60). Jeremy On Apr 26, 2015 3:51 PM, Damien Guibouret damien.guibou...@partition-saving.com wrote: Hello, I found a small problem in ioctl code that leads to drive number 32 to not be usable with device related functions (int 0x21, ah=0x44..) and leading to returning information about another drive without signaling any error. As I suppose this is not widely used (drive 27 to 32 are most often not known by users), I think this is quite minor. I wrote a patch, but did not test nor even compile it. In this patch I keep some code that from interface point of view is wrong but that is the way I understood the NDN related comment. Regards, Damien --- ioctl.c.orig2015-04-26 21:01:18.0 +0200 +++ ioctl.c 2015-04-26 21:26:48.0 +0200 @@ -164,6 +164,7 @@ { struct dpb FAR *dpbp; unsigned attr; + BYTE used_drive; /* This line previously returned the deviceheader at r-bl. But, DOS numbers its drives starting at 1, not 0. A=1, B=2, and so @@ -173,9 +174,18 @@ */ /* JPP - changed to use default drive if drive=0 */ /* JT Fixed it */ - - /* NDN feeds the actual ASCII drive letter to this function */ - dpbp = get_dpb((r-BL 0x1f) == 0 ? default_drive : (r-BL 0x1f) - 1); + if (r-BL == 0) +used_drive = default_drive; + else if ((r-BL = 1) (r-BL = 32)) +used_drive = r-BL - 1; + else if (((r-BL = 'A') (r-BL = 'Z')) || + ((r-BL = 'a') (r-BL = 'z'))) +/* NDN feeds the actual ASCII drive letter to this function */ +used_drive = (r-BL 0x1f) - 1; + else +return DE_INVLDDRV; + + dpbp = get_dpb(used_drive); if (dpbp) { CharReqHdr.r_unit = dpbp-dpb_subunit; @@ -196,7 +206,7 @@ { /* note from get_dpb()*/ /* that if cdsp == NULL then dev must be NULL too */ - struct cds FAR *cdsp = get_cds1(r-BL 0x1f); + struct cds FAR *cdsp = get_cds(used_drive); if (cdsp == NULL) return DE_INVLDDRV; if (cdsp-cdsFlags CDSSUBST) -- One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y ___ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel
[Freedos-kernel] Unable to use drive number 32 with some functions
Hello, I found a small problem in ioctl code that leads to drive number 32 to not be usable with device related functions (int 0x21, ah=0x44..) and leading to returning information about another drive without signaling any error. As I suppose this is not widely used (drive 27 to 32 are most often not known by users), I think this is quite minor. I wrote a patch, but did not test nor even compile it. In this patch I keep some code that from interface point of view is wrong but that is the way I understood the NDN related comment. Regards, Damien --- ioctl.c.orig2015-04-26 21:01:18.0 +0200 +++ ioctl.c 2015-04-26 21:26:48.0 +0200 @@ -164,6 +164,7 @@ { struct dpb FAR *dpbp; unsigned attr; + BYTE used_drive; /* This line previously returned the deviceheader at r-bl. But, DOS numbers its drives starting at 1, not 0. A=1, B=2, and so @@ -173,9 +174,18 @@ */ /* JPP - changed to use default drive if drive=0 */ /* JT Fixed it */ - - /* NDN feeds the actual ASCII drive letter to this function */ - dpbp = get_dpb((r-BL 0x1f) == 0 ? default_drive : (r-BL 0x1f) - 1); + if (r-BL == 0) +used_drive = default_drive; + else if ((r-BL = 1) (r-BL = 32)) +used_drive = r-BL - 1; + else if (((r-BL = 'A') (r-BL = 'Z')) || + ((r-BL = 'a') (r-BL = 'z'))) +/* NDN feeds the actual ASCII drive letter to this function */ +used_drive = (r-BL 0x1f) - 1; + else +return DE_INVLDDRV; + + dpbp = get_dpb(used_drive); if (dpbp) { CharReqHdr.r_unit = dpbp-dpb_subunit; @@ -196,7 +206,7 @@ { /* note from get_dpb()*/ /* that if cdsp == NULL then dev must be NULL too */ - struct cds FAR *cdsp = get_cds1(r-BL 0x1f); + struct cds FAR *cdsp = get_cds(used_drive); if (cdsp == NULL) return DE_INVLDDRV; if (cdsp-cdsFlags CDSSUBST) -- One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y ___ Freedos-kernel mailing list Freedos-kernel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freedos-kernel