klamer@mi.eltn.utwente.nl (Klamer Schutte -- Universiteit Twente) (02/21/91)
Here are two patches to minix ST 1.5.10 #3.
Both are kernel patches. I don't think it is the first time they are posted;
i haven't had net access for over 1 year now.
but since i find them usefull perhaps somebody other does also.
patch one:
Make the floppy driver in general-format mode (minor device number >=16)
recognize double-sided floppies as well. The bug was that the number of
tracks was derived by: sectors/nr_sect, where sectors/(nr_sect*nr_side)
is the correct formula
patch two:
in stdmp the first user proces was given as /bin/sh.
This almost always was OK with only one terminal; but with several
terminal it can be wrong.
Now a - is displayed when it is a login shell, just as every login shell.
But when it is not, you get the proper name (as /usr/bin/login f.i.)
Klamer (.signature at end)
---- cut here ---
echo x - stdmp.c_c
sed '/^X/s///' > stdmp.c_c << '/'
X*** 1.5.10.3/stdmp.c Mon Feb 18 23:36:15 1991
X--- stdmp.c Mon Feb 18 23:38:49 1991
X***************
X*** 64,73 ****
X--- 64,77 ----
X nbuff[NSIZE] = 0;
X for (np = &nbuff[0]; np < &nbuff[NSIZE]; np++)
X if (*np <= ' ' || *np >= 0177) *np = 0;
X+ #ifdef notdef
X if (index == LOW_USER + 1)
X cp = "/bin/sh";
X else
X cp = nbuff;
X+ #else
X+ cp = nbuff;
X+ #endif
X for(i=0;i<100;i++)
X if(cp[i] == '\0')
X break;
/
echo x - stfloppy.c_c
sed '/^X/s///' > stfloppy.c_c << '/'
X*** 1.5.10.3/stfloppy.c Mon Feb 18 23:36:14 1991
X--- stfloppy.c Mon Feb 18 23:37:29 1991
X***************
X*** 538,552 ****
X if (ret != SECTOR_SIZE)
X return(ret);
X nr_sec[d] = sh88tosh68(block0.b0_spt);
X! nr_cyl[d] = sh88tosh68(block0.b0_nsects) / nr_sec[d];
X! nr_hds[d] = sh88tosh68(block0.b0_nsides);
X /* safety first: check for plausible values */
X /* assume that #sectors is between 8 (old dos) and 18 (hd diskettes) */
X if ((nr_sec[d] < 8) || (nr_sec[d] > 18)) return(EINVAL);
X! /* assume that #cylinders is either 40 (5 1/4" dos) or between 78 and 85 */
X! if ((nr_cyl[d] != 40) && (nr_cyl[d] < 78) || (nr_cyl[d] > 85)) return(EINVAL);
X! /* definitely must have either one or two heads */
X! if ((nr_hds[d] != 1) && (nr_hds[d] != 2)) return(EINVAL);
X return(0);
X }
X #endif
X--- 538,552 ----
X if (ret != SECTOR_SIZE)
X return(ret);
X nr_sec[d] = sh88tosh68(block0.b0_spt);
X! nr_hds[d] = sh88tosh68(block0.b0_nsides);
X! nr_cyl[d] = sh88tosh68(block0.b0_nsects) / (nr_sec[d]*nr_hds[d]);
X /* safety first: check for plausible values */
X /* assume that #sectors is between 8 (old dos) and 18 (hd diskettes) */
X if ((nr_sec[d] < 8) || (nr_sec[d] > 18)) return(EINVAL);
X! /* definitely must have either one or two heads */
X! if ((nr_hds[d] != 1) && (nr_hds[d] != 2)) return(EINVAL);
X! /* assume that #cylinders is either 40 (5 1/4" dos) or between 78 and 85 */
X! if ((nr_cyl[d] != 40) && (nr_cyl[d] < 78) || (nr_cyl[d] > 85)) return(EINVAL);
X return(0);
X }
X #endif
/
exit 0
--
Klamer Schutte
Faculty of electrical engineering -- University of Twente, The Netherlands
klamer@mi.eltn.utwente.nl {backbone}!mcsun!mi.eltn.utwente.nl!klamerklamer@mi.eltn.utwente.nl (Klamer Schutte -- Universiteit Twente) (02/21/91)
For all people who ever use /dev/fd0 (== general format floppy) on the
atariST: both minix 1.5.10 #3 and my recent posted patch contain a bug
which can cause a kernel panic. The problem is that to calculate the nr
of cylinders there is made a division before is tested whether the
divisor is zero...
patch will follow; when recognising my interrupt level was too high ;-)
Klamer
--
Klamer Schutte
Faculty of electrical engineering -- University of Twente, The Netherlands
klamer@mi.eltn.utwente.nl {backbone}!mcsun!mi.eltn.utwente.nl!klamer