5169 lines
148 KiB
Plaintext
5169 lines
148 KiB
Plaintext
*** ../0.95a/linux/Makefile Tue Mar 17 00:08:56 1992
|
||
--- linux/Makefile Sat Apr 4 17:33:02 1992
|
||
***************
|
||
*** 1,7 ****
|
||
--- 1,44 ----
|
||
#
|
||
+ # comment this line if you don't want the emulation-code
|
||
+ #
|
||
+
|
||
+ MATH_EMULATION = -DKERNEL_MATH_EMULATION
|
||
+
|
||
+ #
|
||
+ # uncomment the correct keyboard:
|
||
+ #
|
||
+
|
||
+ KEYBOARD = -DKBD_FINNISH
|
||
+ # KEYBOARD = -DKBD_US
|
||
+ # KEYBOARD = -DKBD_GR
|
||
+ # KEYBOARD = -DKBD_FR
|
||
+ # KEYBOARD = -DKBD_UK
|
||
+ # KEYBOARD = -DKBD_DK
|
||
+
|
||
+ #
|
||
+ # uncomment this line if you are using gcc-1.40
|
||
+ #
|
||
+ #GCC_OPT = -fcombine-regs
|
||
+
|
||
+ #
|
||
+ # standard CFLAGS
|
||
+ #
|
||
+
|
||
+ CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer $(GCC_OPT)
|
||
+
|
||
+ #
|
||
+ # ROOT_DEV specifies the default root-device when making the image.
|
||
+ # This can be either FLOPPY, /dev/xxxx or empty, in which case the
|
||
+ # default of FLOPPY is used by 'build'.
|
||
+ #
|
||
+
|
||
+ ROOT_DEV = /dev/hdb1
|
||
+
|
||
+ #
|
||
# if you want the ram-disk device, define this to be the
|
||
# size in blocks.
|
||
#
|
||
+
|
||
#RAMDISK = -DRAMDISK=512
|
||
|
||
AS86 =as86 -0 -a
|
||
***************
|
||
*** 9,26 ****
|
||
|
||
AS =as
|
||
LD =ld
|
||
! LDFLAGS =-s -x -M
|
||
CC =gcc $(RAMDISK)
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer
|
||
CPP =cpp -nostdinc -Iinclude
|
||
|
||
- #
|
||
- # ROOT_DEV specifies the default root-device when making the image.
|
||
- # This can be either FLOPPY, /dev/xxxx or empty, in which case the
|
||
- # default of FLOPPY is used by 'build'.
|
||
- #
|
||
- ROOT_DEV=/dev/hdb1
|
||
-
|
||
ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o
|
||
FILESYSTEMS =fs/minix/minix.o
|
||
DRIVERS =kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a
|
||
--- 46,57 ----
|
||
|
||
AS =as
|
||
LD =ld
|
||
! #LDFLAGS =-s -x -M
|
||
! LDFLAGS = -M
|
||
CC =gcc $(RAMDISK)
|
||
! MAKE =make CFLAGS="$(CFLAGS)"
|
||
CPP =cpp -nostdinc -Iinclude
|
||
|
||
ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o
|
||
FILESYSTEMS =fs/minix/minix.o
|
||
DRIVERS =kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a
|
||
***************
|
||
*** 39,45 ****
|
||
all: Image
|
||
|
||
Image: boot/bootsect boot/setup tools/system tools/build
|
||
! tools/build boot/bootsect boot/setup tools/system $(ROOT_DEV) > Image
|
||
sync
|
||
|
||
disk: Image
|
||
--- 70,79 ----
|
||
all: Image
|
||
|
||
Image: boot/bootsect boot/setup tools/system tools/build
|
||
! cp tools/system system.tmp
|
||
! strip system.tmp
|
||
! tools/build boot/bootsect boot/setup system.tmp $(ROOT_DEV) > Image
|
||
! rm system.tmp
|
||
sync
|
||
|
||
disk: Image
|
||
***************
|
||
*** 62,89 ****
|
||
-o tools/system > System.map
|
||
|
||
kernel/math/math.a: dummy
|
||
! (cd kernel/math; make)
|
||
|
||
kernel/blk_drv/blk_drv.a: dummy
|
||
! (cd kernel/blk_drv; make)
|
||
|
||
kernel/chr_drv/chr_drv.a: dummy
|
||
! (cd kernel/chr_drv; make)
|
||
|
||
kernel/kernel.o: dummy
|
||
! (cd kernel; make)
|
||
|
||
mm/mm.o: dummy
|
||
! (cd mm; make)
|
||
|
||
fs/fs.o: dummy
|
||
! (cd fs; make)
|
||
|
||
fs/minix/minix.o: dummy
|
||
! (cd fs/minix; make)
|
||
|
||
lib/lib.a: dummy
|
||
! (cd lib; make)
|
||
|
||
boot/setup: boot/setup.s
|
||
$(AS86) -o boot/setup.o boot/setup.s
|
||
--- 96,123 ----
|
||
-o tools/system > System.map
|
||
|
||
kernel/math/math.a: dummy
|
||
! (cd kernel/math; $(MAKE) MATH_EMULATION="$(MATH_EMULATION)")
|
||
|
||
kernel/blk_drv/blk_drv.a: dummy
|
||
! (cd kernel/blk_drv; $(MAKE))
|
||
|
||
kernel/chr_drv/chr_drv.a: dummy
|
||
! (cd kernel/chr_drv; $(MAKE) KEYBOARD="$(KEYBOARD)")
|
||
|
||
kernel/kernel.o: dummy
|
||
! (cd kernel; $(MAKE))
|
||
|
||
mm/mm.o: dummy
|
||
! (cd mm; $(MAKE))
|
||
|
||
fs/fs.o: dummy
|
||
! (cd fs; $(MAKE))
|
||
|
||
fs/minix/minix.o: dummy
|
||
! (cd fs/minix; $(MAKE))
|
||
|
||
lib/lib.a: dummy
|
||
! (cd lib; $(MAKE))
|
||
|
||
boot/setup: boot/setup.s
|
||
$(AS86) -o boot/setup.o boot/setup.s
|
||
***************
|
||
*** 127,133 ****
|
||
include/sys/types.h include/sys/time.h include/time.h include/sys/times.h \
|
||
include/sys/utsname.h include/sys/param.h include/sys/resource.h \
|
||
include/utime.h include/linux/tty.h include/termios.h include/linux/sched.h \
|
||
! include/linux/head.h include/linux/fs.h include/linux/mm.h \
|
||
! include/linux/kernel.h include/signal.h include/asm/system.h \
|
||
! include/asm/io.h include/stddef.h include/stdarg.h include/fcntl.h \
|
||
! include/string.h
|
||
--- 161,167 ----
|
||
include/sys/types.h include/sys/time.h include/time.h include/sys/times.h \
|
||
include/sys/utsname.h include/sys/param.h include/sys/resource.h \
|
||
include/utime.h include/linux/tty.h include/termios.h include/linux/sched.h \
|
||
! include/linux/head.h include/linux/fs.h include/sys/dirent.h \
|
||
! include/limits.h include/linux/mm.h include/linux/kernel.h include/signal.h \
|
||
! include/asm/system.h include/asm/io.h include/stddef.h include/stdarg.h \
|
||
! include/fcntl.h include/string.h
|
||
*** ../0.95a/linux/boot/bootsect.S Sat Jan 18 19:01:36 1992
|
||
--- linux/boot/bootsect.S Thu Apr 2 23:18:19 1992
|
||
***************
|
||
*** 8,17 ****
|
||
!
|
||
! bootsect.s (C) 1991 Linus Torvalds
|
||
! modified by Drew Eckhardt
|
||
!
|
||
! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves
|
||
! ! iself out of the way to address 0x90000, and jumps there.
|
||
!
|
||
! It then loads 'setup' directly after itself (0x90200), and the system
|
||
! at 0x10000, using BIOS interrupts.
|
||
!
|
||
--- 8,21 ----
|
||
!
|
||
! bootsect.s (C) 1991 Linus Torvalds
|
||
! modified by Drew Eckhardt
|
||
+ ! modified by Bruce Evans (bde)
|
||
!
|
||
! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves
|
||
! ! itself out of the way to address 0x90000, and jumps there.
|
||
!
|
||
+ ! bde - should not jump blindly, there may be systems with only 512K low
|
||
+ ! memory. Use int 0x12 to get the top of memory, etc.
|
||
+ !
|
||
! It then loads 'setup' directly after itself (0x90200), and the system
|
||
! at 0x10000, using BIOS interrupts.
|
||
!
|
||
***************
|
||
*** 22,51 ****
|
||
!
|
||
! The loader has been made as simple as possible, and continuos
|
||
! read errors will result in a unbreakable loop. Reboot by hand. It
|
||
! ! loads pretty fast by getting whole sectors at a time whenever possible.
|
||
|
||
- .globl begtext, begdata, begbss, endtext, enddata, endbss
|
||
.text
|
||
- begtext:
|
||
- .data
|
||
- begdata:
|
||
- .bss
|
||
- begbss:
|
||
- .text
|
||
|
||
! SETUPLEN = 4 ! nr of setup-sectors
|
||
! BOOTSEG = 0x07c0 ! original address of boot-sector
|
||
! INITSEG = DEF_INITSEG ! we move boot here - out of the way
|
||
! SETUPSEG = DEF_SETUPSEG ! setup starts here
|
||
! SYSSEG = DEF_SYSSEG ! system loaded at 0x10000 (65536).
|
||
! ENDSEG = SYSSEG + SYSSIZE ! where to stop loading
|
||
|
||
! ROOT_DEV & SWAP_DEV are now written by "build".
|
||
ROOT_DEV = 0
|
||
SWAP_DEV = 0
|
||
|
||
! entry start
|
||
! start:
|
||
mov ax,#BOOTSEG
|
||
mov ds,ax
|
||
mov ax,#INITSEG
|
||
--- 26,52 ----
|
||
!
|
||
! The loader has been made as simple as possible, and continuos
|
||
! read errors will result in a unbreakable loop. Reboot by hand. It
|
||
! ! loads pretty fast by getting whole tracks at a time whenever possible.
|
||
|
||
.text
|
||
|
||
! SETUPSECS = 4 ! nr of setup-sectors
|
||
! BOOTSEG = 0x07C0 ! original address of boot-sector
|
||
! INITSEG = DEF_INITSEG ! we move boot here - out of the way
|
||
! SETUPSEG = DEF_SETUPSEG ! setup starts here
|
||
! SYSSEG = DEF_SYSSEG ! system loaded at 0x10000 (65536).
|
||
! ENDSEG = SYSSEG + SYSSIZE ! where to stop loading
|
||
|
||
! ROOT_DEV & SWAP_DEV are now written by "build".
|
||
ROOT_DEV = 0
|
||
SWAP_DEV = 0
|
||
|
||
! ! ld86 requires an entry symbol. This may as well be the usual one.
|
||
! .globl _main
|
||
! _main:
|
||
! #if 0 /* hook for debugger, harmless unless BIOS is fussy (old HP) */
|
||
! int 3
|
||
! #endif
|
||
mov ax,#BOOTSEG
|
||
mov ds,ax
|
||
mov ax,#INITSEG
|
||
***************
|
||
*** 55,71 ****
|
||
sub di,di
|
||
cld
|
||
rep
|
||
! movw
|
||
jmpi go,INITSEG
|
||
|
||
go: mov ax,cs
|
||
! mov dx,#0xfef4 ! arbitrary value >>512 - disk parm size
|
||
|
||
mov ds,ax
|
||
mov es,ax
|
||
push ax
|
||
|
||
! mov ss,ax ! put stack at 0x9ff00 - 12.
|
||
mov sp,dx
|
||
/*
|
||
* Many BIOS's default disk parameter tables will not
|
||
--- 56,80 ----
|
||
sub di,di
|
||
cld
|
||
rep
|
||
! movsw
|
||
jmpi go,INITSEG
|
||
|
||
go: mov ax,cs
|
||
! mov dx,#0x4000-12 ! 0x4000 is arbitrary value >= length of
|
||
! ! bootsect + length of setup + room for stack
|
||
! ! 12 is disk parm size
|
||
|
||
+ ! bde - changed 0xff00 to 0x4000 to use debugger at 0x6400 up (bde). We
|
||
+ ! wouldn't have to worry about this if we checked the top of memory. Also
|
||
+ ! my BIOS can be configured to put the wini drive tables in high memory
|
||
+ ! instead of in the vector table. The old stack might have clobbered the
|
||
+ ! drive table.
|
||
+
|
||
mov ds,ax
|
||
mov es,ax
|
||
push ax
|
||
|
||
! mov ss,ax ! put stack at INITSEG:0x4000-12.
|
||
mov sp,dx
|
||
/*
|
||
* Many BIOS's default disk parameter tables will not
|
||
***************
|
||
*** 96,102 ****
|
||
|
||
rep
|
||
seg gs
|
||
! movw
|
||
|
||
mov di,dx
|
||
movb 4(di),*18 ! patch sector count
|
||
--- 105,111 ----
|
||
|
||
rep
|
||
seg gs
|
||
! movsw
|
||
|
||
mov di,dx
|
||
movb 4(di),*18 ! patch sector count
|
||
***************
|
||
*** 121,127 ****
|
||
xor dx, dx ! drive 0, head 0
|
||
mov cx,#0x0002 ! sector 2, track 0
|
||
mov bx,#0x0200 ! address = 512, in INITSEG
|
||
! mov ax,#0x0200+SETUPLEN ! service 2, nr of sectors
|
||
int 0x13 ! read it
|
||
jnc ok_load_setup ! ok - continue
|
||
|
||
--- 130,137 ----
|
||
xor dx, dx ! drive 0, head 0
|
||
mov cx,#0x0002 ! sector 2, track 0
|
||
mov bx,#0x0200 ! address = 512, in INITSEG
|
||
! mov ax,#0x0200+SETUPSECS ! service 2, nr of sectors
|
||
! ! (assume all on head 0, track 0)
|
||
int 0x13 ! read it
|
||
jnc ok_load_setup ! ok - continue
|
||
|
||
***************
|
||
*** 134,149 ****
|
||
xor dl, dl ! reset FDC
|
||
xor ah, ah
|
||
int 0x13
|
||
! j load_setup
|
||
|
||
ok_load_setup:
|
||
|
||
! Get disk drive parameters, specifically nr of sectors/track
|
||
|
||
xor dl,dl
|
||
mov ah,#0x08 ! AH=8 is get drive parameters
|
||
int 0x13
|
||
xor ch,ch
|
||
seg cs
|
||
mov sectors,cx
|
||
mov ax,#INITSEG
|
||
--- 144,186 ----
|
||
xor dl, dl ! reset FDC
|
||
xor ah, ah
|
||
int 0x13
|
||
! jmp load_setup
|
||
|
||
ok_load_setup:
|
||
|
||
! Get disk drive parameters, specifically nr of sectors/track
|
||
|
||
+ #if 0
|
||
+
|
||
+ ! bde - the Phoenix BIOS manual says function 0x08 only works for fixed
|
||
+ ! disks. It doesn't work for one of my BIOS's (1987 Award). It was
|
||
+ ! fatal not to check the error code.
|
||
+
|
||
xor dl,dl
|
||
mov ah,#0x08 ! AH=8 is get drive parameters
|
||
int 0x13
|
||
xor ch,ch
|
||
+ #else
|
||
+
|
||
+ ! It seems that there is no BIOS call to get the number of sectors. Guess
|
||
+ ! 18 sectors if sector 18 can be read, 15 if sector 15 can be read.
|
||
+ ! Otherwise guess 9.
|
||
+
|
||
+ xor dx, dx ! drive 0, head 0
|
||
+ mov cx,#0x0012 ! sector 18, track 0
|
||
+ mov bx,#0x0200+SETUPSECS*0x200 ! address after setup (es = cs)
|
||
+ mov ax,#0x0201 ! service 2, 1 sector
|
||
+ int 0x13
|
||
+ jnc got_sectors
|
||
+ mov cl,#0x0f ! sector 15
|
||
+ mov ax,#0x0201 ! service 2, 1 sector
|
||
+ int 0x13
|
||
+ jnc got_sectors
|
||
+ mov cl,#0x09
|
||
+
|
||
+ #endif
|
||
+
|
||
+ got_sectors:
|
||
seg cs
|
||
mov sectors,cx
|
||
mov ax,#INITSEG
|
||
***************
|
||
*** 205,211 ****
|
||
!
|
||
! in: es - starting address segment (normally 0x1000)
|
||
!
|
||
! sread: .word 1+SETUPLEN ! sectors read of current track
|
||
head: .word 0 ! current head
|
||
track: .word 0 ! current track
|
||
|
||
--- 242,248 ----
|
||
!
|
||
! in: es - starting address segment (normally 0x1000)
|
||
!
|
||
! sread: .word 1+SETUPSECS ! sectors read of current track
|
||
head: .word 0 ! current head
|
||
track: .word 0 ! current track
|
||
|
||
***************
|
||
*** 264,277 ****
|
||
int 0x10
|
||
popa
|
||
|
||
! mov dx,track
|
||
! mov cx,sread
|
||
! inc cx
|
||
! mov ch,dl
|
||
! mov dx,head
|
||
! mov dh,dl
|
||
! and dx,#0x0100
|
||
! mov ah,#2
|
||
|
||
push dx ! save for error dump
|
||
push cx
|
||
--- 301,314 ----
|
||
int 0x10
|
||
popa
|
||
|
||
! mov dx,track
|
||
! mov cx,sread
|
||
! inc cx
|
||
! mov ch,dl
|
||
! mov dx,head
|
||
! mov dh,dl
|
||
! and dx,#0x0100
|
||
! mov ah,#2
|
||
|
||
push dx ! save for error dump
|
||
push cx
|
||
***************
|
||
*** 278,286 ****
|
||
push bx
|
||
push ax
|
||
|
||
! int 0x13
|
||
! jc bad_rt
|
||
! add sp, #8
|
||
popa
|
||
ret
|
||
|
||
--- 315,323 ----
|
||
push bx
|
||
push ax
|
||
|
||
! int 0x13
|
||
! jc bad_rt
|
||
! add sp, #8
|
||
popa
|
||
ret
|
||
|
||
***************
|
||
*** 317,332 ****
|
||
print_loop:
|
||
push cx ! save count left
|
||
call print_nl ! nl for readability
|
||
jae no_reg ! see if register name is needed
|
||
|
||
! mov ax, #0xe05 + 0x41 - 1
|
||
sub al, cl
|
||
int 0x10
|
||
|
||
! mov al, #0x58 ! X
|
||
int 0x10
|
||
|
||
! mov al, #0x3a ! :
|
||
int 0x10
|
||
|
||
no_reg:
|
||
--- 354,371 ----
|
||
print_loop:
|
||
push cx ! save count left
|
||
call print_nl ! nl for readability
|
||
+
|
||
+ cmp cl, 5
|
||
jae no_reg ! see if register name is needed
|
||
|
||
! mov ax, #0xe05 + 'A - 1
|
||
sub al, cl
|
||
int 0x10
|
||
|
||
! mov al, #'X
|
||
int 0x10
|
||
|
||
! mov al, #':
|
||
int 0x10
|
||
|
||
no_reg:
|
||
***************
|
||
*** 356,365 ****
|
||
mov ah, #0xe
|
||
mov al, dl ! mask off so we have only next nibble
|
||
and al, #0xf
|
||
! add al, #0x30 ! convert to 0 based digit, '0'
|
||
! cmp al, #0x39 ! check for overflow
|
||
jbe good_digit
|
||
! add al, #0x41 - 0x30 - 0xa ! 'A' - '0' - 0xa
|
||
|
||
good_digit:
|
||
int 0x10
|
||
--- 395,404 ----
|
||
mov ah, #0xe
|
||
mov al, dl ! mask off so we have only next nibble
|
||
and al, #0xf
|
||
! add al, #'0 ! convert to 0-based digit
|
||
! cmp al, #'9 ! check for overflow
|
||
jbe good_digit
|
||
! add al, #'A - '0 - 10
|
||
|
||
good_digit:
|
||
int 0x10
|
||
***************
|
||
*** 394,404 ****
|
||
.word ROOT_DEV
|
||
boot_flag:
|
||
.word 0xAA55
|
||
-
|
||
- .text
|
||
- endtext:
|
||
- .data
|
||
- enddata:
|
||
- .bss
|
||
- endbss:
|
||
-
|
||
--- 433,435 ----
|
||
*** ../0.95a/linux/boot/setup.S Sat Mar 14 23:13:30 1992
|
||
--- linux/boot/setup.S Wed Mar 25 02:30:42 1992
|
||
***************
|
||
*** 217,222 ****
|
||
--- 217,238 ----
|
||
jnz empty_8042 ! yes - loop
|
||
ret
|
||
|
||
+ getkey:
|
||
+ in al,#0x60 ! Quick and dirty...
|
||
+ .word 0x00eb,0x00eb ! jmp $+2, jmp $+2
|
||
+ mov bl,al
|
||
+ in al,#0x61
|
||
+ .word 0x00eb,0x00eb
|
||
+ mov ah,al
|
||
+ or al,#0x80
|
||
+ out #0x61,al
|
||
+ .word 0x00eb,0x00eb
|
||
+ mov al,ah
|
||
+ out #0x61,al
|
||
+ .word 0x00eb,0x00eb
|
||
+ mov al,bl
|
||
+ ret
|
||
+
|
||
! Routine trying to recognize type of SVGA-board present (if any)
|
||
! and if it recognize one gives the choices of resolution it offers.
|
||
! If one is found the resolution chosen is given by al,ah (rows,cols).
|
||
***************
|
||
*** 233,239 ****
|
||
cmp al,#0x82
|
||
jb nokey
|
||
jmp flush
|
||
! nokey: in al,#0x60
|
||
cmp al,#0x82
|
||
jb nokey
|
||
cmp al,#0xe0
|
||
--- 249,255 ----
|
||
cmp al,#0x82
|
||
jb nokey
|
||
jmp flush
|
||
! nokey: call getkey
|
||
cmp al,#0x82
|
||
jb nokey
|
||
cmp al,#0xe0
|
||
***************
|
||
*** 481,487 ****
|
||
call prtstr
|
||
pop si
|
||
add cl,#0x80
|
||
! nonum: in al,#0x60 ! Quick and dirty...
|
||
cmp al,#0x82
|
||
jb nonum
|
||
cmp al,#0x8b
|
||
--- 497,503 ----
|
||
call prtstr
|
||
pop si
|
||
add cl,#0x80
|
||
! nonum: call getkey
|
||
cmp al,#0x82
|
||
jb nonum
|
||
cmp al,#0x8b
|
||
*** ../0.95a/linux/fs/Makefile Thu Mar 5 23:36:44 1992
|
||
--- linux/fs/Makefile Sat Apr 4 17:33:10 1992
|
||
***************
|
||
*** 1,10 ****
|
||
AR =ar
|
||
AS =as
|
||
- CC =gcc
|
||
LD =ld
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer \
|
||
! -fno-defer-pop -nostdinc -I../include
|
||
! CPP =gcc -E -nostdinc -I../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
--- 1,17 ----
|
||
+ #
|
||
+ # Makefile for the linux filesystem.
|
||
+ #
|
||
+ # Note! Dependencies are done automagically by 'make dep', which also
|
||
+ # removes any old dependencies. DON'T put your own dependencies here
|
||
+ # unless it's something special (ie not a .c file).
|
||
+ #
|
||
+ # Note 2! The CFLAGS definitions are now in the main makefile...
|
||
+
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
! CC =gcc -nostdinc -I../include
|
||
! CPP =cpp -nostdinc -I../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
***************
|
||
*** 36,118 ****
|
||
### Dependencies:
|
||
block_dev.o : block_dev.c ../include/errno.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h ../include/asm/system.h
|
||
buffer.o : buffer.c ../include/stdarg.h ../include/linux/config.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/types.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/asm/system.h \
|
||
! ../include/asm/io.h
|
||
! char_dev.o : char_dev.c ../include/errno.h ../include/sys/types.h \
|
||
! ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h ../include/asm/io.h
|
||
exec.o : exec.c ../include/signal.h ../include/sys/types.h \
|
||
../include/errno.h ../include/string.h ../include/sys/stat.h \
|
||
! ../include/a.out.h ../include/linux/fs.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h
|
||
fcntl.o : fcntl.c ../include/string.h ../include/errno.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/types.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/asm/segment.h \
|
||
! ../include/fcntl.h ../include/sys/stat.h
|
||
! file_table.o : file_table.c ../include/linux/fs.h ../include/sys/types.h
|
||
inode.o : inode.c ../include/string.h ../include/sys/stat.h \
|
||
../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/linux/minix_fs.h \
|
||
! ../include/asm/system.h
|
||
ioctl.o : ioctl.c ../include/string.h ../include/errno.h \
|
||
../include/sys/stat.h ../include/sys/types.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h
|
||
namei.o : namei.c ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/linux/minix_fs.h ../include/asm/segment.h ../include/string.h \
|
||
! ../include/fcntl.h ../include/errno.h ../include/const.h \
|
||
! ../include/sys/stat.h
|
||
open.o : open.c ../include/string.h ../include/errno.h ../include/fcntl.h \
|
||
../include/sys/types.h ../include/utime.h ../include/sys/stat.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h
|
||
pipe.o : pipe.c ../include/signal.h ../include/sys/types.h \
|
||
../include/errno.h ../include/termios.h ../include/fcntl.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h
|
||
! read_write.o : read_write.c ../include/sys/stat.h ../include/sys/types.h \
|
||
! ../include/errno.h ../include/linux/kernel.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
../include/time.h ../include/sys/resource.h ../include/asm/segment.h
|
||
select.o : select.c ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \
|
||
! ../include/linux/sched.h ../include/linux/head.h ../include/linux/mm.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/asm/segment.h \
|
||
! ../include/asm/system.h ../include/sys/stat.h ../include/string.h \
|
||
! ../include/const.h ../include/errno.h
|
||
stat.o : stat.c ../include/errno.h ../include/sys/stat.h \
|
||
! ../include/sys/types.h ../include/linux/fs.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/asm/segment.h
|
||
! super.o : super.c ../include/linux/config.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/linux/minix_fs.h \
|
||
! ../include/asm/system.h ../include/errno.h ../include/sys/stat.h
|
||
--- 43,137 ----
|
||
### Dependencies:
|
||
block_dev.o : block_dev.c ../include/errno.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h ../include/asm/system.h
|
||
buffer.o : buffer.c ../include/stdarg.h ../include/linux/config.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/types.h ../include/sys/dirent.h ../include/limits.h \
|
||
../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/system.h ../include/asm/io.h
|
||
! char_dev.o : char_dev.c ../include/errno.h ../include/sys/types.h \
|
||
! ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h ../include/asm/io.h
|
||
exec.o : exec.c ../include/signal.h ../include/sys/types.h \
|
||
../include/errno.h ../include/string.h ../include/sys/stat.h \
|
||
! ../include/a.out.h ../include/linux/fs.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h
|
||
fcntl.o : fcntl.c ../include/string.h ../include/errno.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/types.h ../include/sys/dirent.h ../include/limits.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h ../include/fcntl.h \
|
||
! ../include/sys/stat.h
|
||
! file_table.o : file_table.c ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h
|
||
inode.o : inode.c ../include/string.h ../include/sys/stat.h \
|
||
../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/dirent.h ../include/limits.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/system.h
|
||
ioctl.o : ioctl.c ../include/string.h ../include/errno.h \
|
||
../include/sys/stat.h ../include/sys/types.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h
|
||
namei.o : namei.c ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/types.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/asm/segment.h \
|
||
! ../include/string.h ../include/fcntl.h ../include/errno.h \
|
||
! ../include/const.h ../include/sys/stat.h
|
||
open.o : open.c ../include/string.h ../include/errno.h ../include/fcntl.h \
|
||
../include/sys/types.h ../include/utime.h ../include/sys/stat.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h
|
||
pipe.o : pipe.c ../include/signal.h ../include/sys/types.h \
|
||
../include/errno.h ../include/termios.h ../include/fcntl.h \
|
||
../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/sys/param.h ../include/sys/time.h \
|
||
../include/time.h ../include/sys/resource.h ../include/asm/segment.h
|
||
+ read_write.o : read_write.c ../include/errno.h ../include/sys/types.h \
|
||
+ ../include/sys/stat.h ../include/sys/dirent.h ../include/limits.h \
|
||
+ ../include/linux/kernel.h ../include/linux/sched.h ../include/linux/head.h \
|
||
+ ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \
|
||
+ ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
+ ../include/sys/resource.h ../include/linux/minix_fs.h \
|
||
+ ../include/asm/segment.h
|
||
select.o : select.c ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/kernel.h \
|
||
! ../include/linux/tty.h ../include/termios.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/mm.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h ../include/asm/system.h \
|
||
! ../include/sys/stat.h ../include/string.h ../include/const.h \
|
||
! ../include/errno.h
|
||
stat.o : stat.c ../include/errno.h ../include/sys/stat.h \
|
||
! ../include/sys/types.h ../include/linux/fs.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/sched.h ../include/linux/head.h \
|
||
../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h
|
||
! super.o : super.c ../include/linux/config.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/linux/minix_fs.h ../include/asm/system.h ../include/errno.h \
|
||
! ../include/sys/stat.h
|
||
*** ../0.95a/linux/fs/read_write.c Tue Mar 3 00:16:10 1992
|
||
--- linux/fs/read_write.c Fri Apr 3 20:20:36 1992
|
||
***************
|
||
*** 4,22 ****
|
||
* (C) 1991 Linus Torvalds
|
||
*/
|
||
|
||
- #include <sys/stat.h>
|
||
#include <errno.h>
|
||
#include <sys/types.h>
|
||
|
||
#include <linux/kernel.h>
|
||
#include <linux/sched.h>
|
||
#include <asm/segment.h>
|
||
|
||
! int sys_lseek(unsigned int fd,off_t offset, unsigned int origin)
|
||
{
|
||
struct file * file;
|
||
! int tmp;
|
||
|
||
if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode))
|
||
return -EBADF;
|
||
if (origin > 2)
|
||
--- 4,37 ----
|
||
* (C) 1991 Linus Torvalds
|
||
*/
|
||
|
||
#include <errno.h>
|
||
#include <sys/types.h>
|
||
+ #include <sys/stat.h>
|
||
+ #include <sys/dirent.h>
|
||
|
||
#include <linux/kernel.h>
|
||
#include <linux/sched.h>
|
||
+ #include <linux/minix_fs.h>
|
||
#include <asm/segment.h>
|
||
|
||
! int sys_readdir(unsigned int fd, struct dirent * dirent)
|
||
{
|
||
struct file * file;
|
||
! struct inode * inode;
|
||
|
||
+ if (fd >= NR_OPEN || !(file = current->filp[fd]) ||
|
||
+ !(inode = file->f_inode))
|
||
+ return -EBADF;
|
||
+ if (file->f_op && file->f_op->readdir)
|
||
+ return file->f_op->readdir(inode,file,dirent);
|
||
+ return -EBADF;
|
||
+ }
|
||
+
|
||
+ int sys_lseek(unsigned int fd, off_t offset, unsigned int origin)
|
||
+ {
|
||
+ struct file * file;
|
||
+ int tmp, mem_dev;
|
||
+
|
||
if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode))
|
||
return -EBADF;
|
||
if (origin > 2)
|
||
***************
|
||
*** 25,45 ****
|
||
return -ESPIPE;
|
||
if (file->f_op && file->f_op->lseek)
|
||
return file->f_op->lseek(file->f_inode,file,offset,origin);
|
||
/* this is the default handler if no lseek handler is present */
|
||
switch (origin) {
|
||
case 0:
|
||
! if (offset<0) return -EINVAL;
|
||
file->f_pos=offset;
|
||
break;
|
||
case 1:
|
||
! if (file->f_pos+offset<0) return -EINVAL;
|
||
file->f_pos += offset;
|
||
break;
|
||
case 2:
|
||
! if ((tmp=file->f_inode->i_size+offset) < 0)
|
||
return -EINVAL;
|
||
file->f_pos = tmp;
|
||
}
|
||
return file->f_pos;
|
||
}
|
||
|
||
--- 40,64 ----
|
||
return -ESPIPE;
|
||
if (file->f_op && file->f_op->lseek)
|
||
return file->f_op->lseek(file->f_inode,file,offset,origin);
|
||
+ mem_dev = S_ISCHR(file->f_inode->i_mode);
|
||
+
|
||
/* this is the default handler if no lseek handler is present */
|
||
switch (origin) {
|
||
case 0:
|
||
! if (offset<0 && !mem_dev) return -EINVAL;
|
||
file->f_pos=offset;
|
||
break;
|
||
case 1:
|
||
! if (file->f_pos+offset<0 && !mem_dev) return -EINVAL;
|
||
file->f_pos += offset;
|
||
break;
|
||
case 2:
|
||
! if ((tmp=file->f_inode->i_size+offset)<0 && !mem_dev)
|
||
return -EINVAL;
|
||
file->f_pos = tmp;
|
||
}
|
||
+ if (mem_dev && file->f_pos < 0)
|
||
+ return 0;
|
||
return file->f_pos;
|
||
}
|
||
|
||
*** ../0.95a/linux/fs/buffer.c Fri Mar 13 19:06:26 1992
|
||
--- linux/fs/buffer.c Wed Apr 1 02:06:48 1992
|
||
***************
|
||
*** 27,34 ****
|
||
#include <asm/io.h>
|
||
|
||
extern int end;
|
||
! struct buffer_head * start_buffer = (struct buffer_head *) &end;
|
||
! struct buffer_head * hash_table[NR_HASH];
|
||
static struct buffer_head * free_list;
|
||
static struct task_struct * buffer_wait = NULL;
|
||
int NR_BUFFERS = 0;
|
||
--- 27,34 ----
|
||
#include <asm/io.h>
|
||
|
||
extern int end;
|
||
! static struct buffer_head * start_buffer = (struct buffer_head *) &end;
|
||
! static struct buffer_head * hash_table[NR_HASH];
|
||
static struct buffer_head * free_list;
|
||
static struct task_struct * buffer_wait = NULL;
|
||
int NR_BUFFERS = 0;
|
||
***************
|
||
*** 406,411 ****
|
||
--- 406,415 ----
|
||
else
|
||
b = (void *) buffer_end;
|
||
while ( (b -= BLOCK_SIZE) >= ((void *) (h+1)) ) {
|
||
+ if (((unsigned long) (h+1)) > 0xA0000) {
|
||
+ printk("buffer-list doesn't fit in low meg - contact Linus\n");
|
||
+ break;
|
||
+ }
|
||
h->b_dev = 0;
|
||
h->b_dirt = 0;
|
||
h->b_count = 0;
|
||
*** ../0.95a/linux/fs/inode.c Sat Mar 14 19:33:21 1992
|
||
--- linux/fs/inode.c Fri Apr 3 16:09:27 1992
|
||
***************
|
||
*** 8,14 ****
|
||
#include <sys/stat.h>
|
||
|
||
#include <linux/sched.h>
|
||
- #include <linux/minix_fs.h>
|
||
#include <linux/kernel.h>
|
||
#include <linux/mm.h>
|
||
#include <asm/system.h>
|
||
--- 8,13 ----
|
||
***************
|
||
*** 15,23 ****
|
||
|
||
struct inode inode_table[NR_INODE]={{0,},};
|
||
|
||
- extern void minix_read_inode(struct inode * inode);
|
||
- extern void minix_write_inode(struct inode * inode);
|
||
-
|
||
static inline void wait_on_inode(struct inode * inode)
|
||
{
|
||
cli();
|
||
--- 14,19 ----
|
||
***************
|
||
*** 48,54 ****
|
||
unlock_inode(inode);
|
||
return;
|
||
}
|
||
! minix_write_inode(inode);
|
||
unlock_inode(inode);
|
||
}
|
||
|
||
--- 44,51 ----
|
||
unlock_inode(inode);
|
||
return;
|
||
}
|
||
! if (inode->i_op && inode->i_op->write_inode)
|
||
! inode->i_op->write_inode(inode);
|
||
unlock_inode(inode);
|
||
}
|
||
|
||
***************
|
||
*** 55,67 ****
|
||
static void read_inode(struct inode * inode)
|
||
{
|
||
lock_inode(inode);
|
||
! minix_read_inode(inode);
|
||
unlock_inode(inode);
|
||
}
|
||
|
||
int bmap(struct inode * inode, int block)
|
||
{
|
||
! return minix_bmap(inode,block);
|
||
}
|
||
|
||
void invalidate_inodes(int dev)
|
||
--- 52,77 ----
|
||
static void read_inode(struct inode * inode)
|
||
{
|
||
lock_inode(inode);
|
||
! if (inode->i_sb && inode->i_sb->s_op && inode->i_sb->s_op->read_inode)
|
||
! inode->i_sb->s_op->read_inode(inode);
|
||
unlock_inode(inode);
|
||
}
|
||
|
||
+ /*
|
||
+ * bmap is needed for demand-loading and paging: if this function
|
||
+ * doesn't exist for a filesystem, then those things are impossible:
|
||
+ * executables cannot be run from the filesystem etc...
|
||
+ *
|
||
+ * This isn't as bad as it sounds: the read-routines might still work,
|
||
+ * so the filesystem would be otherwise ok (for example, you might have
|
||
+ * a DOS filesystem, which doesn't lend itself to bmap very well, but
|
||
+ * you could still transfer files to/from the filesystem)
|
||
+ */
|
||
int bmap(struct inode * inode, int block)
|
||
{
|
||
! if (inode->i_op && inode->i_op->bmap)
|
||
! return inode->i_op->bmap(inode,block);
|
||
! return 0;
|
||
}
|
||
|
||
void invalidate_inodes(int dev)
|
||
***************
|
||
*** 127,134 ****
|
||
return;
|
||
}
|
||
if (!inode->i_nlink) {
|
||
! minix_truncate(inode);
|
||
! minix_free_inode(inode);
|
||
return;
|
||
}
|
||
if (inode->i_dirt) {
|
||
--- 137,144 ----
|
||
return;
|
||
}
|
||
if (!inode->i_nlink) {
|
||
! if (inode->i_op && inode->i_op->put_inode)
|
||
! inode->i_op->put_inode(inode);
|
||
return;
|
||
}
|
||
if (inode->i_dirt) {
|
||
*** ../0.95a/linux/fs/open.c Mon Mar 2 23:52:07 1992
|
||
--- linux/fs/open.c Thu Apr 2 23:41:50 1992
|
||
***************
|
||
*** 29,34 ****
|
||
--- 29,39 ----
|
||
if (!(inode=namei(filename)))
|
||
return -ENOENT;
|
||
if (times) {
|
||
+ if (current->euid != inode->i_uid &&
|
||
+ !permission(inode,MAY_WRITE)) {
|
||
+ iput(inode);
|
||
+ return -EPERM;
|
||
+ }
|
||
actime = get_fs_long((unsigned long *) ×->actime);
|
||
modtime = get_fs_long((unsigned long *) ×->modtime);
|
||
} else
|
||
*** ../0.95a/linux/fs/char_dev.c Mon Mar 2 04:16:20 1992
|
||
--- linux/fs/char_dev.c Wed Apr 1 01:26:11 1992
|
||
***************
|
||
*** 38,63 ****
|
||
|
||
static int rw_mem(int rw,char * buf, int count, off_t * pos)
|
||
{
|
||
! return -EIO;
|
||
}
|
||
|
||
static int rw_kmem(int rw,char * buf, int count, off_t * pos)
|
||
{
|
||
! /* kmem by Damiano */
|
||
! int i = *pos; /* Current position where to read */
|
||
|
||
! /* i can go from 0 to LOW_MEM (See include/linux/mm.h */
|
||
! /* I am not shure about it but it doesn't mem fault :-) */
|
||
! while ( (count-- > 0) && (i <LOW_MEM) ) {
|
||
! if (rw==READ)
|
||
! put_fs_byte( *(char *)i ,buf++);
|
||
! else
|
||
! return (-EIO);
|
||
! i++;
|
||
}
|
||
! i -= *pos; /* Count how many read or write */
|
||
! *pos += i; /* Update position */
|
||
! return (i); /* Return number read */
|
||
}
|
||
|
||
static int rw_port(int rw,char * buf, int count, off_t * pos)
|
||
--- 38,118 ----
|
||
|
||
static int rw_mem(int rw,char * buf, int count, off_t * pos)
|
||
{
|
||
! char *p;
|
||
! unsigned long pde, pte, tmp;
|
||
! int i = count;
|
||
!
|
||
! if (count <= 0)
|
||
! return(0);
|
||
! /*
|
||
! * return EOF on nonexistant pages or pages swapped out to disk
|
||
! */
|
||
! pde = (unsigned long) pg_dir + (*pos >> 20 & 0xffc);
|
||
! if (((pte = *((unsigned long *) pde)) & 1) == 0)
|
||
! return 0; /* page table not present */
|
||
! pte &= 0xfffff000;
|
||
! pte += *pos >> 10 & 0xffc;
|
||
! if (((tmp = *((unsigned long *) pte)) & 1) == 0)
|
||
! return 0;
|
||
! if (rw == WRITE && (tmp & 2) == 0)
|
||
! un_wp_page((unsigned long *) pte);
|
||
! p = (char *) ((tmp & 0xfffff000) + (*pos & 0xfff));
|
||
! while (1) {
|
||
! if (rw == WRITE)
|
||
! *p++ = get_fs_byte(buf++);
|
||
! else
|
||
! put_fs_byte(*p++, buf++);
|
||
!
|
||
! if (--i == 0)
|
||
! break;
|
||
!
|
||
! if (count && ((unsigned long) p & 0xfff) == 0) {
|
||
! if (((pte += 4) & 0xfff) == 0) {
|
||
! if (((pde += 4) & 0xfff) == 0)
|
||
! break;
|
||
! if (((pte = *((unsigned long *) pde)) & 1) == 0)
|
||
! break;
|
||
! pte &= 0xfffff000;
|
||
! }
|
||
! if (((tmp = *((unsigned long *) pte)) & 1) == 0)
|
||
! break;
|
||
!
|
||
! if (rw == WRITE && (tmp & 2) == 0)
|
||
! un_wp_page((unsigned long *) pte);
|
||
! p = (char *) (tmp & 0xfffff000);
|
||
! }
|
||
! }
|
||
! return(count - i);
|
||
}
|
||
|
||
static int rw_kmem(int rw,char * buf, int count, off_t * pos)
|
||
{
|
||
! char *p=(char *) *pos;
|
||
|
||
! if ((unsigned long) *pos > HIGH_MEMORY)
|
||
! return 0;
|
||
! if ((unsigned long) *pos + count > HIGH_MEMORY)
|
||
! count = HIGH_MEMORY - *pos;
|
||
!
|
||
! switch (rw) {
|
||
! case READ:
|
||
! while ((count -= 4) >= 0)
|
||
! put_fs_long(*((unsigned long *) p)++,
|
||
! ((unsigned long *) buf)++);
|
||
! count += 4;
|
||
! while (--count >= 0)
|
||
! put_fs_byte(*p++, buf++);
|
||
! break;
|
||
! case WRITE:
|
||
! while (--count >= 0)
|
||
! *p++ = get_fs_byte(buf++);
|
||
! break;
|
||
! default:
|
||
! return -EINVAL;
|
||
}
|
||
! p -= *pos;
|
||
! *pos += (int) p;
|
||
! return (int) p;
|
||
}
|
||
|
||
static int rw_port(int rw,char * buf, int count, off_t * pos)
|
||
*** ../0.95a/linux/fs/exec.c Wed Mar 4 06:24:51 1992
|
||
--- linux/fs/exec.c Wed Apr 1 01:26:36 1992
|
||
***************
|
||
*** 216,221 ****
|
||
--- 216,222 ----
|
||
int retval;
|
||
int sh_bang = 0;
|
||
unsigned long p=PAGE_SIZE*MAX_ARG_PAGES-4;
|
||
+ int ch;
|
||
|
||
if ((0xffff & eip[1]) != 0x000f)
|
||
panic("execve called from supervisor mode");
|
||
***************
|
||
*** 348,353 ****
|
||
--- 349,363 ----
|
||
}
|
||
/* OK, This is the point of no return */
|
||
/* note that current->library stays unchanged by an exec */
|
||
+ for (i=0; (ch = get_fs_byte(filename++)) != '\0';)
|
||
+ if (ch == '/')
|
||
+ i = 0;
|
||
+ else
|
||
+ if (i < 8)
|
||
+ current->comm[i++] = ch;
|
||
+ if (i < 8)
|
||
+ current->comm[i] = '\0';
|
||
+
|
||
if (current->executable)
|
||
iput(current->executable);
|
||
current->executable = inode;
|
||
***************
|
||
*** 374,379 ****
|
||
--- 384,390 ----
|
||
(current->end_data = ex.a_data +
|
||
(current->end_code = ex.a_text));
|
||
current->start_stack = p;
|
||
+ current->rss = (LIBRARY_OFFSET - p + PAGE_SIZE-1) / PAGE_SIZE;
|
||
current->suid = current->euid = e_uid;
|
||
current->sgid = current->egid = e_gid;
|
||
eip[0] = ex.a_entry; /* eip, magic happens :-) */
|
||
*** ../0.95a/linux/fs/super.c Fri Feb 28 19:01:44 1992
|
||
--- linux/fs/super.c Fri Apr 3 16:22:05 1992
|
||
***************
|
||
*** 29,36 ****
|
||
/* this is initialized in init/main.c */
|
||
int ROOT_DEV = 0;
|
||
|
||
! static void lock_super(struct super_block * sb)
|
||
{
|
||
cli();
|
||
while (sb->s_lock)
|
||
sleep_on(&(sb->s_wait));
|
||
--- 29,55 ----
|
||
/* this is initialized in init/main.c */
|
||
int ROOT_DEV = 0;
|
||
|
||
! /* Move into include file later */
|
||
!
|
||
! static struct file_system_type file_systems[] = {
|
||
! {minix_read_super,"minix"},
|
||
! {NULL,NULL}
|
||
! };
|
||
!
|
||
! /* end of include file */
|
||
!
|
||
! struct file_system_type *get_fs_type(char *name)
|
||
{
|
||
+ int a;
|
||
+
|
||
+ for(a = 0 ; file_systems[a].read_super ; a++)
|
||
+ if (!strcmp(name,file_systems[a].name))
|
||
+ return(&file_systems[a]);
|
||
+ return(NULL);
|
||
+ }
|
||
+
|
||
+ void lock_super(struct super_block * sb)
|
||
+ {
|
||
cli();
|
||
while (sb->s_lock)
|
||
sleep_on(&(sb->s_wait));
|
||
***************
|
||
*** 38,44 ****
|
||
sti();
|
||
}
|
||
|
||
! static void free_super(struct super_block * sb)
|
||
{
|
||
cli();
|
||
sb->s_lock = 0;
|
||
--- 57,63 ----
|
||
sti();
|
||
}
|
||
|
||
! void free_super(struct super_block * sb)
|
||
{
|
||
cli();
|
||
sb->s_lock = 0;
|
||
***************
|
||
*** 46,52 ****
|
||
sti();
|
||
}
|
||
|
||
! static void wait_on_super(struct super_block * sb)
|
||
{
|
||
cli();
|
||
while (sb->s_lock)
|
||
--- 65,71 ----
|
||
sti();
|
||
}
|
||
|
||
! void wait_on_super(struct super_block * sb)
|
||
{
|
||
cli();
|
||
while (sb->s_lock)
|
||
***************
|
||
*** 75,81 ****
|
||
void put_super(int dev)
|
||
{
|
||
struct super_block * sb;
|
||
- int i;
|
||
|
||
if (dev == ROOT_DEV) {
|
||
printk("root diskette changed: prepare for armageddon\n\r");
|
||
--- 94,99 ----
|
||
***************
|
||
*** 87,107 ****
|
||
printk("Mounted disk changed - tssk, tssk\n\r");
|
||
return;
|
||
}
|
||
! lock_super(sb);
|
||
! sb->s_dev = 0;
|
||
! for(i=0;i<MINIX_I_MAP_SLOTS;i++)
|
||
! brelse(sb->s_imap[i]);
|
||
! for(i=0;i<MINIX_Z_MAP_SLOTS;i++)
|
||
! brelse(sb->s_zmap[i]);
|
||
! free_super(sb);
|
||
! return;
|
||
}
|
||
|
||
! static struct super_block * read_super(int dev)
|
||
{
|
||
struct super_block * s;
|
||
! struct buffer_head * bh;
|
||
! int i,block;
|
||
|
||
if (!dev)
|
||
return NULL;
|
||
--- 105,118 ----
|
||
printk("Mounted disk changed - tssk, tssk\n\r");
|
||
return;
|
||
}
|
||
! if (sb->s_op && sb->s_op->put_super)
|
||
! sb->s_op->put_super(sb);
|
||
}
|
||
|
||
! static struct super_block * read_super(int dev,char *name,void *data)
|
||
{
|
||
struct super_block * s;
|
||
! struct file_system_type *type;
|
||
|
||
if (!dev)
|
||
return NULL;
|
||
***************
|
||
*** 108,113 ****
|
||
--- 119,128 ----
|
||
check_disk_change(dev);
|
||
if (s = get_super(dev))
|
||
return s;
|
||
+ if (!(type=get_fs_type(name))) {
|
||
+ printk("get fs type failed %s\n",name);
|
||
+ return NULL;
|
||
+ }
|
||
for (s = 0+super_block ;; s++) {
|
||
if (s >= NR_SUPER+super_block)
|
||
return NULL;
|
||
***************
|
||
*** 115,167 ****
|
||
break;
|
||
}
|
||
s->s_dev = dev;
|
||
! s->s_mounted = NULL;
|
||
s->s_covered = NULL;
|
||
s->s_time = 0;
|
||
s->s_rd_only = 0;
|
||
s->s_dirt = 0;
|
||
! lock_super(s);
|
||
! if (!(bh = bread(dev,1))) {
|
||
! s->s_dev=0;
|
||
! free_super(s);
|
||
! return NULL;
|
||
! }
|
||
! *((struct minix_super_block *) s) =
|
||
! *((struct minix_super_block *) bh->b_data);
|
||
! brelse(bh);
|
||
! if (s->s_magic != MINIX_SUPER_MAGIC) {
|
||
! s->s_dev = 0;
|
||
! free_super(s);
|
||
! return NULL;
|
||
! }
|
||
! for (i=0;i < MINIX_I_MAP_SLOTS;i++)
|
||
! s->s_imap[i] = NULL;
|
||
! for (i=0;i < MINIX_Z_MAP_SLOTS;i++)
|
||
! s->s_zmap[i] = NULL;
|
||
! block=2;
|
||
! for (i=0 ; i < s->s_imap_blocks ; i++)
|
||
! if (s->s_imap[i]=bread(dev,block))
|
||
! block++;
|
||
! else
|
||
! break;
|
||
! for (i=0 ; i < s->s_zmap_blocks ; i++)
|
||
! if (s->s_zmap[i]=bread(dev,block))
|
||
! block++;
|
||
! else
|
||
! break;
|
||
! if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) {
|
||
! for(i=0;i<MINIX_I_MAP_SLOTS;i++)
|
||
! brelse(s->s_imap[i]);
|
||
! for(i=0;i<MINIX_Z_MAP_SLOTS;i++)
|
||
! brelse(s->s_zmap[i]);
|
||
! s->s_dev=0;
|
||
! free_super(s);
|
||
! return NULL;
|
||
! }
|
||
! s->s_imap[0]->b_data[0] |= 1;
|
||
! s->s_zmap[0]->b_data[0] |= 1;
|
||
! free_super(s);
|
||
! return s;
|
||
}
|
||
|
||
int sys_umount(char * dev_name)
|
||
--- 130,143 ----
|
||
break;
|
||
}
|
||
s->s_dev = dev;
|
||
! if (!type->read_super(s,data))
|
||
! return(NULL);
|
||
! s->s_dev = dev;
|
||
s->s_covered = NULL;
|
||
s->s_time = 0;
|
||
s->s_rd_only = 0;
|
||
s->s_dirt = 0;
|
||
! return(s);
|
||
}
|
||
|
||
int sys_umount(char * dev_name)
|
||
***************
|
||
*** 184,190 ****
|
||
return -ENOENT;
|
||
if (!sb->s_covered->i_mount)
|
||
printk("Mounted inode has i_mount=0\n");
|
||
! for (inode=inode_table+0 ; inode<inode_table+NR_INODE ; inode++)
|
||
if (inode->i_dev==dev && inode->i_count)
|
||
if (inode == sb->s_mounted && inode->i_count == 1)
|
||
continue;
|
||
--- 160,166 ----
|
||
return -ENOENT;
|
||
if (!sb->s_covered->i_mount)
|
||
printk("Mounted inode has i_mount=0\n");
|
||
! for (inode = inode_table+0 ; inode < inode_table+NR_INODE ; inode++)
|
||
if (inode->i_dev==dev && inode->i_count)
|
||
if (inode == sb->s_mounted && inode->i_count == 1)
|
||
continue;
|
||
***************
|
||
*** 195,202 ****
|
||
sb->s_covered = NULL;
|
||
iput(sb->s_mounted);
|
||
sb->s_mounted = NULL;
|
||
! put_super(dev);
|
||
! sync_dev(dev);
|
||
return 0;
|
||
}
|
||
|
||
--- 171,178 ----
|
||
sb->s_covered = NULL;
|
||
iput(sb->s_mounted);
|
||
sb->s_mounted = NULL;
|
||
! put_super(dev);
|
||
! sync_dev(dev);
|
||
return 0;
|
||
}
|
||
|
||
***************
|
||
*** 224,231 ****
|
||
iput(dir_i);
|
||
return -EPERM;
|
||
}
|
||
! if (!(sb=read_super(dev))) {
|
||
iput(dir_i);
|
||
return -EBUSY;
|
||
}
|
||
if (sb->s_covered) {
|
||
--- 200,211 ----
|
||
iput(dir_i);
|
||
return -EPERM;
|
||
}
|
||
! if (dir_i->i_mount) {
|
||
iput(dir_i);
|
||
+ return -EPERM;
|
||
+ }
|
||
+ if (!(sb=read_super(dev,"minix",NULL))) {
|
||
+ iput(dir_i);
|
||
return -EBUSY;
|
||
}
|
||
if (sb->s_covered) {
|
||
***************
|
||
*** 232,248 ****
|
||
iput(dir_i);
|
||
return -EBUSY;
|
||
}
|
||
! if (dir_i->i_mount) {
|
||
! iput(dir_i);
|
||
! return -EPERM;
|
||
! }
|
||
! if (!(sb->s_mounted = iget(dev,MINIX_ROOT_INO))) {
|
||
! iput(dir_i);
|
||
! return -EPERM;
|
||
! }
|
||
! sb->s_covered=dir_i;
|
||
! dir_i->i_mount=1;
|
||
! dir_i->i_dirt=1; /* NOTE! we don't iput(dir_i) */
|
||
return 0; /* we do that in umount */
|
||
}
|
||
|
||
--- 212,220 ----
|
||
iput(dir_i);
|
||
return -EBUSY;
|
||
}
|
||
! sb->s_covered = dir_i;
|
||
! dir_i->i_mount = 1;
|
||
! dir_i->i_dirt = 1; /* NOTE! we don't iput(dir_i) */
|
||
return 0; /* we do that in umount */
|
||
}
|
||
|
||
***************
|
||
*** 265,274 ****
|
||
p->s_lock = 0;
|
||
p->s_wait = NULL;
|
||
}
|
||
! if (!(p=read_super(ROOT_DEV)))
|
||
panic("Unable to mount root");
|
||
if (!(mi=iget(ROOT_DEV,MINIX_ROOT_INO)))
|
||
panic("Unable to read root i-node");
|
||
mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */
|
||
p->s_mounted = p->s_covered = mi;
|
||
current->pwd = mi;
|
||
--- 237,249 ----
|
||
p->s_lock = 0;
|
||
p->s_wait = NULL;
|
||
}
|
||
! if (!(p=read_super(ROOT_DEV,"minix",NULL)))
|
||
panic("Unable to mount root");
|
||
+ /*wait_for_keypress();
|
||
if (!(mi=iget(ROOT_DEV,MINIX_ROOT_INO)))
|
||
panic("Unable to read root i-node");
|
||
+ wait_for_keypress();*/
|
||
+ mi=p->s_mounted;
|
||
mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */
|
||
p->s_mounted = p->s_covered = mi;
|
||
current->pwd = mi;
|
||
*** ../0.95a/linux/fs/namei.c Fri Mar 6 19:04:09 1992
|
||
--- linux/fs/namei.c Fri Apr 3 16:15:56 1992
|
||
***************
|
||
*** 9,15 ****
|
||
*/
|
||
|
||
#include <linux/sched.h>
|
||
- #include <linux/minix_fs.h>
|
||
#include <linux/kernel.h>
|
||
#include <asm/segment.h>
|
||
|
||
--- 9,14 ----
|
||
***************
|
||
*** 249,255 ****
|
||
}
|
||
inode->i_atime = CURRENT_TIME;
|
||
if (flag & O_TRUNC)
|
||
! minix_truncate(inode);
|
||
*res_inode = inode;
|
||
return 0;
|
||
}
|
||
--- 248,255 ----
|
||
}
|
||
inode->i_atime = CURRENT_TIME;
|
||
if (flag & O_TRUNC)
|
||
! if (inode->i_op && inode->i_op->truncate)
|
||
! inode->i_op->truncate(inode);
|
||
*res_inode = inode;
|
||
return 0;
|
||
}
|
||
***************
|
||
*** 270,276 ****
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->mknod) {
|
||
iput(dir);
|
||
--- 270,276 ----
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EACCES;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->mknod) {
|
||
iput(dir);
|
||
***************
|
||
*** 293,299 ****
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->mkdir) {
|
||
iput(dir);
|
||
--- 293,299 ----
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EACCES;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->mkdir) {
|
||
iput(dir);
|
||
***************
|
||
*** 316,322 ****
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->rmdir) {
|
||
iput(dir);
|
||
--- 316,322 ----
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EACCES;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->rmdir) {
|
||
iput(dir);
|
||
***************
|
||
*** 335,345 ****
|
||
return -ENOENT;
|
||
if (!namelen) {
|
||
iput(dir);
|
||
! return -ENOENT;
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->unlink) {
|
||
iput(dir);
|
||
--- 335,345 ----
|
||
return -ENOENT;
|
||
if (!namelen) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EACCES;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->unlink) {
|
||
iput(dir);
|
||
***************
|
||
*** 356,369 ****
|
||
|
||
dir = dir_namei(newname,&namelen,&basename, NULL);
|
||
if (!dir)
|
||
! return -EACCES;
|
||
if (!namelen) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EPERM;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->symlink) {
|
||
iput(dir);
|
||
--- 356,369 ----
|
||
|
||
dir = dir_namei(newname,&namelen,&basename, NULL);
|
||
if (!dir)
|
||
! return -ENOENT;
|
||
if (!namelen) {
|
||
iput(dir);
|
||
! return -ENOENT;
|
||
}
|
||
if (!permission(dir,MAY_WRITE)) {
|
||
iput(dir);
|
||
! return -EACCES;
|
||
}
|
||
if (!dir->i_op || !dir->i_op->symlink) {
|
||
iput(dir);
|
||
*** ../0.95a/linux/fs/ioctl.c Thu Feb 20 17:01:12 1992
|
||
--- linux/fs/ioctl.c Tue Mar 31 20:52:08 1992
|
||
***************
|
||
*** 10,15 ****
|
||
--- 10,16 ----
|
||
|
||
#include <linux/sched.h>
|
||
|
||
+ extern int hd_ioctl(int dev, int cmd, int arg);
|
||
extern int tty_ioctl(int dev, int cmd, int arg);
|
||
extern int pipe_ioctl(struct inode *pino, int cmd, int arg);
|
||
|
||
***************
|
||
*** 21,27 ****
|
||
NULL, /* nodev */
|
||
NULL, /* /dev/mem */
|
||
NULL, /* /dev/fd */
|
||
! NULL, /* /dev/hd */
|
||
tty_ioctl, /* /dev/ttyx */
|
||
tty_ioctl, /* /dev/tty */
|
||
NULL, /* /dev/lp */
|
||
--- 22,28 ----
|
||
NULL, /* nodev */
|
||
NULL, /* /dev/mem */
|
||
NULL, /* /dev/fd */
|
||
! hd_ioctl, /* /dev/hd */
|
||
tty_ioctl, /* /dev/ttyx */
|
||
tty_ioctl, /* /dev/tty */
|
||
NULL, /* /dev/lp */
|
||
*** ../0.95a/linux/fs/pipe.c Fri Mar 6 15:04:16 1992
|
||
--- linux/fs/pipe.c Fri Mar 27 11:18:57 1992
|
||
***************
|
||
*** 41,47 ****
|
||
put_fs_byte(((char *)inode->i_size)[size++],buf++);
|
||
}
|
||
wake_up(& PIPE_WRITE_WAIT(*inode));
|
||
! return read;
|
||
}
|
||
|
||
int pipe_write(struct inode * inode, struct file * filp, char * buf, int count)
|
||
--- 41,47 ----
|
||
put_fs_byte(((char *)inode->i_size)[size++],buf++);
|
||
}
|
||
wake_up(& PIPE_WRITE_WAIT(*inode));
|
||
! return read?read:-EAGAIN;
|
||
}
|
||
|
||
int pipe_write(struct inode * inode, struct file * filp, char * buf, int count)
|
||
*** ../0.95a/linux/fs/minix/Makefile Thu Mar 5 23:36:47 1992
|
||
--- linux/fs/minix/Makefile Sat Apr 4 17:33:13 1992
|
||
***************
|
||
*** 1,10 ****
|
||
AR =ar
|
||
AS =as
|
||
- CC =gcc
|
||
LD =ld
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer \
|
||
! -nostdinc -I../../include
|
||
! CPP =gcc -E -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
--- 1,17 ----
|
||
+ #
|
||
+ # Makefile for the linux minix-filesystem routines.
|
||
+ #
|
||
+ # Note! Dependencies are done automagically by 'make dep', which also
|
||
+ # removes any old dependencies. DON'T put your own dependencies here
|
||
+ # unless it's something special (ie not a .c file).
|
||
+ #
|
||
+ # Note 2! The CFLAGS definitions are now in the main makefile...
|
||
+
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
! CC =gcc -nostdinc -I../../include
|
||
! CPP =cpp -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
***************
|
||
*** 32,43 ****
|
||
### Dependencies:
|
||
bitmap.o : bitmap.c ../../include/string.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/linux/minix_fs.h
|
||
file_dev.o : file_dev.c ../../include/errno.h ../../include/fcntl.h \
|
||
! ../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
--- 39,52 ----
|
||
### Dependencies:
|
||
bitmap.o : bitmap.c ../../include/string.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/sys/dirent.h ../../include/limits.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/linux/minix_fs.h
|
||
file_dev.o : file_dev.c ../../include/errno.h ../../include/fcntl.h \
|
||
! ../../include/sys/types.h ../../include/sys/dirent.h ../../include/limits.h \
|
||
! ../../include/sys/stat.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
***************
|
||
*** 46,59 ****
|
||
inode.o : inode.c ../../include/string.h ../../include/sys/stat.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/linux/minix_fs.h ../../include/asm/system.h
|
||
minix_op.o : minix_op.c ../../include/linux/fs.h ../../include/sys/types.h \
|
||
../../include/linux/minix_fs.h
|
||
namei.o : namei.c ../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/minix_fs.h \
|
||
--- 55,71 ----
|
||
inode.o : inode.c ../../include/string.h ../../include/sys/stat.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/linux/minix_fs.h \
|
||
! ../../include/asm/system.h
|
||
minix_op.o : minix_op.c ../../include/linux/fs.h ../../include/sys/types.h \
|
||
+ ../../include/sys/dirent.h ../../include/limits.h \
|
||
../../include/linux/minix_fs.h
|
||
namei.o : namei.c ../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/minix_fs.h \
|
||
***************
|
||
*** 61,69 ****
|
||
../../include/errno.h ../../include/const.h ../../include/sys/stat.h
|
||
truncate.o : truncate.c ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/linux/minix_fs.h \
|
||
! ../../include/linux/tty.h ../../include/termios.h ../../include/errno.h \
|
||
! ../../include/fcntl.h ../../include/sys/stat.h
|
||
--- 73,82 ----
|
||
../../include/errno.h ../../include/const.h ../../include/sys/stat.h
|
||
truncate.o : truncate.c ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/sys/dirent.h ../../include/limits.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/linux/minix_fs.h ../../include/linux/tty.h \
|
||
! ../../include/termios.h ../../include/errno.h ../../include/fcntl.h \
|
||
! ../../include/sys/stat.h
|
||
*** ../0.95a/linux/fs/minix/inode.c Mon Mar 2 01:15:17 1992
|
||
--- linux/fs/minix/inode.c Fri Apr 3 16:20:06 1992
|
||
***************
|
||
*** 13,27 ****
|
||
#include <linux/mm.h>
|
||
#include <asm/system.h>
|
||
|
||
! static int _bmap(struct inode * inode,int block,int create)
|
||
{
|
||
struct buffer_head * bh;
|
||
int i;
|
||
|
||
! if (block<0)
|
||
! panic("_bmap: block<0");
|
||
! if (block >= 7+512+512*512)
|
||
! panic("_bmap: block>big");
|
||
if (block<7) {
|
||
if (create && !inode->i_data[block])
|
||
if (inode->i_data[block]=minix_new_block(inode->i_dev)) {
|
||
--- 13,112 ----
|
||
#include <linux/mm.h>
|
||
#include <asm/system.h>
|
||
|
||
! int sync_dev(int dev);
|
||
!
|
||
! void minix_put_super(struct super_block *sb)
|
||
{
|
||
+ int i;
|
||
+
|
||
+ lock_super(sb);
|
||
+ sb->s_dev = 0;
|
||
+ for(i = 0 ; i < MINIX_I_MAP_SLOTS ; i++)
|
||
+ brelse(sb->s_imap[i]);
|
||
+ for(i = 0 ; i < MINIX_Z_MAP_SLOTS ; i++)
|
||
+ brelse(sb->s_zmap[i]);
|
||
+ free_super(sb);
|
||
+ return;
|
||
+ }
|
||
+
|
||
+ static struct super_operations minix_sops = {
|
||
+ minix_read_inode,
|
||
+ minix_put_super
|
||
+ };
|
||
+
|
||
+ struct super_block *minix_read_super(struct super_block *s,void *data)
|
||
+ {
|
||
+ struct buffer_head *bh;
|
||
+ int i,dev=s->s_dev,block;
|
||
+
|
||
+ lock_super(s);
|
||
+ if (!(bh = bread(dev,1))) {
|
||
+ s->s_dev=0;
|
||
+ free_super(s);
|
||
+ printk("bread failed\n");
|
||
+ return NULL;
|
||
+ }
|
||
+ *((struct minix_super_block *) s) =
|
||
+ *((struct minix_super_block *) bh->b_data);
|
||
+ brelse(bh);
|
||
+ if (s->s_magic != MINIX_SUPER_MAGIC) {
|
||
+ s->s_dev = 0;
|
||
+ free_super(s);
|
||
+ printk("magic match failed\n");
|
||
+ return NULL;
|
||
+ }
|
||
+ for (i=0;i < MINIX_I_MAP_SLOTS;i++)
|
||
+ s->s_imap[i] = NULL;
|
||
+ for (i=0;i < MINIX_Z_MAP_SLOTS;i++)
|
||
+ s->s_zmap[i] = NULL;
|
||
+ block=2;
|
||
+ for (i=0 ; i < s->s_imap_blocks ; i++)
|
||
+ if (s->s_imap[i]=bread(dev,block))
|
||
+ block++;
|
||
+ else
|
||
+ break;
|
||
+ for (i=0 ; i < s->s_zmap_blocks ; i++)
|
||
+ if (s->s_zmap[i]=bread(dev,block))
|
||
+ block++;
|
||
+ else
|
||
+ break;
|
||
+ if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) {
|
||
+ for(i=0;i<MINIX_I_MAP_SLOTS;i++)
|
||
+ brelse(s->s_imap[i]);
|
||
+ for(i=0;i<MINIX_Z_MAP_SLOTS;i++)
|
||
+ brelse(s->s_zmap[i]);
|
||
+ s->s_dev=0;
|
||
+ free_super(s);
|
||
+ printk("block failed\n");
|
||
+ return NULL;
|
||
+ }
|
||
+ s->s_imap[0]->b_data[0] |= 1;
|
||
+ s->s_zmap[0]->b_data[0] |= 1;
|
||
+ free_super(s);
|
||
+ /* set up enough so that it can read an inode */
|
||
+ s->s_dev = dev;
|
||
+ s->s_op = &minix_sops;
|
||
+ if (!(s->s_mounted = iget(dev,MINIX_ROOT_INO))) {
|
||
+ s->s_dev=0;
|
||
+ printk("get root inode failed\n");
|
||
+ return NULL;
|
||
+ }
|
||
+ return s;
|
||
+ }
|
||
+
|
||
+ static int _minix_bmap(struct inode * inode,int block,int create)
|
||
+ {
|
||
struct buffer_head * bh;
|
||
int i;
|
||
|
||
! if (block<0) {
|
||
! printk("_minix_bmap: block<0");
|
||
! return 0;
|
||
! }
|
||
! if (block >= 7+512+512*512) {
|
||
! printk("_minix_bmap: block>big");
|
||
! return 0;
|
||
! }
|
||
if (block<7) {
|
||
if (create && !inode->i_data[block])
|
||
if (inode->i_data[block]=minix_new_block(inode->i_dev)) {
|
||
***************
|
||
*** 83,94 ****
|
||
|
||
int minix_bmap(struct inode * inode,int block)
|
||
{
|
||
! return _bmap(inode,block,0);
|
||
}
|
||
|
||
int minix_create_block(struct inode * inode, int block)
|
||
{
|
||
! return _bmap(inode,block,1);
|
||
}
|
||
|
||
void minix_read_inode(struct inode * inode)
|
||
--- 168,179 ----
|
||
|
||
int minix_bmap(struct inode * inode,int block)
|
||
{
|
||
! return _minix_bmap(inode,block,0);
|
||
}
|
||
|
||
int minix_create_block(struct inode * inode, int block)
|
||
{
|
||
! return _minix_bmap(inode,block,1);
|
||
}
|
||
|
||
void minix_read_inode(struct inode * inode)
|
||
*** ../0.95a/linux/fs/minix/namei.c Tue Mar 3 19:39:35 1992
|
||
--- linux/fs/minix/namei.c Fri Apr 3 16:11:22 1992
|
||
***************
|
||
*** 15,24 ****
|
||
#include <const.h>
|
||
#include <sys/stat.h>
|
||
|
||
- extern int permission(struct inode * inode,int mask);
|
||
- extern struct inode * _namei(const char * filename, struct inode * base,
|
||
- int follow_links);
|
||
-
|
||
/*
|
||
* comment out this line if you want names > MINIX_NAME_LEN chars to be
|
||
* truncated. Else they will be disallowed.
|
||
--- 15,20 ----
|
||
***************
|
||
*** 89,95 ****
|
||
if ((char *)de >= BLOCK_SIZE+bh->b_data) {
|
||
brelse(bh);
|
||
bh = NULL;
|
||
! if (!(block = bmap(dir,i/MINIX_DIR_ENTRIES_PER_BLOCK)) ||
|
||
!(bh = bread(dir->i_dev,block))) {
|
||
i += MINIX_DIR_ENTRIES_PER_BLOCK;
|
||
continue;
|
||
--- 85,91 ----
|
||
if ((char *)de >= BLOCK_SIZE+bh->b_data) {
|
||
brelse(bh);
|
||
bh = NULL;
|
||
! if (!(block = minix_bmap(dir,i/MINIX_DIR_ENTRIES_PER_BLOCK)) ||
|
||
!(bh = bread(dir->i_dev,block))) {
|
||
i += MINIX_DIR_ENTRIES_PER_BLOCK;
|
||
continue;
|
||
***************
|
||
*** 398,404 ****
|
||
while (nr<len) {
|
||
if ((void *) de >= (void *) (bh->b_data+BLOCK_SIZE)) {
|
||
brelse(bh);
|
||
! block=bmap(inode,nr/MINIX_DIR_ENTRIES_PER_BLOCK);
|
||
if (!block) {
|
||
nr += MINIX_DIR_ENTRIES_PER_BLOCK;
|
||
continue;
|
||
--- 394,400 ----
|
||
while (nr<len) {
|
||
if ((void *) de >= (void *) (bh->b_data+BLOCK_SIZE)) {
|
||
brelse(bh);
|
||
! block = minix_bmap(inode,nr/MINIX_DIR_ENTRIES_PER_BLOCK);
|
||
if (!block) {
|
||
nr += MINIX_DIR_ENTRIES_PER_BLOCK;
|
||
continue;
|
||
*** ../0.95a/linux/fs/minix/minix_op.c Tue Mar 3 00:18:39 1992
|
||
--- linux/fs/minix/minix_op.c Fri Apr 3 20:19:03 1992
|
||
***************
|
||
*** 7,12 ****
|
||
--- 7,18 ----
|
||
#include <linux/fs.h>
|
||
#include <linux/minix_fs.h>
|
||
|
||
+ void minix_put_inode(struct inode *inode)
|
||
+ {
|
||
+ minix_truncate(inode);
|
||
+ minix_free_inode(inode);
|
||
+ }
|
||
+
|
||
/*
|
||
* These are the low-level inode operations for minix filesystem inodes.
|
||
*/
|
||
***************
|
||
*** 23,38 ****
|
||
minix_readlink,
|
||
minix_open,
|
||
minix_release,
|
||
! minix_follow_link
|
||
};
|
||
|
||
/*
|
||
! * We have just NULL's here: the current defaults are ok for
|
||
* the minix filesystem.
|
||
*/
|
||
struct file_operations minix_file_operations = {
|
||
NULL, /* lseek */
|
||
NULL, /* read */
|
||
! NULL /* write */
|
||
};
|
||
|
||
--- 29,49 ----
|
||
minix_readlink,
|
||
minix_open,
|
||
minix_release,
|
||
! minix_follow_link,
|
||
! minix_bmap,
|
||
! minix_truncate,
|
||
! minix_write_inode,
|
||
! minix_put_inode
|
||
};
|
||
|
||
/*
|
||
! * We have mostly NULL's here: the current defaults are ok for
|
||
* the minix filesystem.
|
||
*/
|
||
struct file_operations minix_file_operations = {
|
||
NULL, /* lseek */
|
||
NULL, /* read */
|
||
! NULL, /* write */
|
||
! minix_readdir
|
||
};
|
||
|
||
*** ../0.95a/linux/fs/minix/file_dev.c Tue Mar 17 03:41:53 1992
|
||
--- linux/fs/minix/file_dev.c Fri Apr 3 21:35:21 1992
|
||
***************
|
||
*** 6,11 ****
|
||
--- 6,13 ----
|
||
|
||
#include <errno.h>
|
||
#include <fcntl.h>
|
||
+ #include <sys/dirent.h>
|
||
+ #include <sys/stat.h>
|
||
|
||
#include <linux/sched.h>
|
||
#include <linux/minix_fs.h>
|
||
***************
|
||
*** 15,20 ****
|
||
--- 17,64 ----
|
||
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||
|
||
+ int minix_readdir(struct inode * inode, struct file * filp, struct dirent * dirent)
|
||
+ {
|
||
+ unsigned int block,offset,i;
|
||
+ char c;
|
||
+ struct buffer_head * bh;
|
||
+ struct minix_dir_entry * de;
|
||
+
|
||
+ if (!S_ISDIR(inode->i_mode))
|
||
+ return -EBADF;
|
||
+ if (filp->f_pos & 15)
|
||
+ return -EBADF;
|
||
+ while (filp->f_pos < inode->i_size) {
|
||
+ offset = filp->f_pos & 1023;
|
||
+ block = minix_bmap(inode,(filp->f_pos)>>BLOCK_SIZE_BITS);
|
||
+ if (!block || !(bh = bread(inode->i_dev,block))) {
|
||
+ filp->f_pos += 1024-offset;
|
||
+ continue;
|
||
+ }
|
||
+ de = (struct minix_dir_entry *) (offset + bh->b_data);
|
||
+ while (offset < 1024 && filp->f_pos < inode->i_size) {
|
||
+ offset += 16;
|
||
+ filp->f_pos += 16;
|
||
+ if (de->inode) {
|
||
+ for (i = 0; i < 14; i++)
|
||
+ if (c = de->name[i])
|
||
+ put_fs_byte(c,i+dirent->d_name);
|
||
+ else
|
||
+ break;
|
||
+ if (i) {
|
||
+ put_fs_long(de->inode,&dirent->d_ino);
|
||
+ put_fs_byte(0,i+dirent->d_name);
|
||
+ put_fs_word(i,&dirent->d_reclen);
|
||
+ return i;
|
||
+ }
|
||
+ }
|
||
+ de++;
|
||
+ }
|
||
+ brelse(bh);
|
||
+ }
|
||
+ return 0;
|
||
+ }
|
||
+
|
||
int minix_file_read(struct inode * inode, struct file * filp, char * buf, int count)
|
||
{
|
||
int read,left,chars,nr;
|
||
***************
|
||
*** 28,34 ****
|
||
left = count;
|
||
read = 0;
|
||
while (left > 0) {
|
||
! if (nr = bmap(inode,(filp->f_pos)>>BLOCK_SIZE_BITS)) {
|
||
if (!(bh=bread(inode->i_dev,nr)))
|
||
return read?read:-EIO;
|
||
} else
|
||
--- 72,78 ----
|
||
left = count;
|
||
read = 0;
|
||
while (left > 0) {
|
||
! if (nr = minix_bmap(inode,(filp->f_pos)>>BLOCK_SIZE_BITS)) {
|
||
if (!(bh=bread(inode->i_dev,nr)))
|
||
return read?read:-EIO;
|
||
} else
|
||
***************
|
||
*** 98,104 ****
|
||
if (!(filp->f_flags & O_APPEND)) {
|
||
filp->f_pos = pos;
|
||
inode->i_ctime = CURRENT_TIME;
|
||
- inode->i_dirt = 1;
|
||
}
|
||
return written;
|
||
}
|
||
--- 142,148 ----
|
||
if (!(filp->f_flags & O_APPEND)) {
|
||
filp->f_pos = pos;
|
||
inode->i_ctime = CURRENT_TIME;
|
||
}
|
||
+ inode->i_dirt = 1;
|
||
return written;
|
||
}
|
||
*** ../0.95a/linux/kernel/Makefile Thu Mar 5 23:36:55 1992
|
||
--- linux/kernel/Makefile Sat Apr 4 17:33:20 1992
|
||
***************
|
||
*** 5,23 ****
|
||
# removes any old dependencies. DON'T put your own dependencies here
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
|
||
- # gcc2 doesn't have these:
|
||
- #GCC_OPT = -fcombine-regs
|
||
-
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer $(GCC_OPT) \
|
||
! -finline-functions -nostdinc -I../include
|
||
! CPP =gcc -E -nostdinc -I../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
-S -o $*.s $<
|
||
--- 5,20 ----
|
||
# removes any old dependencies. DON'T put your own dependencies here
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
+ # Note 2! The CFLAGS definitions are now in the main makefile...
|
||
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc -nostdinc -I../include
|
||
! CPP =cpp -nostdinc -I../include
|
||
|
||
+
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
-S -o $*.s $<
|
||
***************
|
||
*** 35,40 ****
|
||
--- 32,40 ----
|
||
$(LD) -r -o kernel.o $(OBJS)
|
||
sync
|
||
|
||
+ sched.o: sched.c
|
||
+ $(CC) $(CFLAGS) -fno-omit-frame-pointer -c $<
|
||
+
|
||
clean:
|
||
rm -f core *.o *.a tmp_make keyboard.s
|
||
for i in *.c;do rm -f `basename $$i .c`.s;done
|
||
***************
|
||
*** 53,103 ****
|
||
### Dependencies:
|
||
exit.s exit.o : exit.c ../include/errno.h ../include/signal.h \
|
||
../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/linux/tty.h \
|
||
! ../include/termios.h ../include/asm/segment.h
|
||
fork.s fork.o : fork.c ../include/errno.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/segment.h ../include/asm/system.h
|
||
mktime.s mktime.o : mktime.c ../include/time.h
|
||
panic.s panic.o : panic.c ../include/linux/kernel.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/mm.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h
|
||
printk.s printk.o : printk.c ../include/stdarg.h ../include/stddef.h \
|
||
../include/linux/kernel.h
|
||
ptrace.s ptrace.o : ptrace.c ../include/linux/head.h ../include/linux/kernel.h \
|
||
../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/mm.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/errno.h ../include/asm/segment.h ../include/asm/system.h \
|
||
! ../include/sys/ptrace.h
|
||
sched.s sched.o : sched.c ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/linux/timer.h ../include/linux/sys.h ../include/linux/fdreg.h \
|
||
! ../include/asm/system.h ../include/asm/io.h ../include/asm/segment.h \
|
||
! ../include/errno.h
|
||
signal.s signal.o : signal.c ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h ../include/sys/wait.h ../include/errno.h
|
||
sys.s sys.o : sys.c ../include/errno.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/linux/tty.h ../include/termios.h \
|
||
! ../include/linux/config.h ../include/asm/segment.h ../include/sys/times.h \
|
||
! ../include/sys/utsname.h ../include/string.h
|
||
traps.s traps.o : traps.c ../include/string.h ../include/linux/head.h \
|
||
../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/signal.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/asm/system.h ../include/asm/segment.h \
|
||
! ../include/asm/io.h ../include/errno.h
|
||
vsprintf.s vsprintf.o : vsprintf.c ../include/stdarg.h ../include/string.h
|
||
--- 53,109 ----
|
||
### Dependencies:
|
||
exit.s exit.o : exit.c ../include/errno.h ../include/signal.h \
|
||
../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/linux/fs.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h ../include/linux/tty.h ../include/termios.h \
|
||
! ../include/asm/segment.h
|
||
fork.s fork.o : fork.c ../include/errno.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/segment.h ../include/asm/system.h
|
||
mktime.s mktime.o : mktime.c ../include/time.h
|
||
panic.s panic.o : panic.c ../include/linux/kernel.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h
|
||
printk.s printk.o : printk.c ../include/stdarg.h ../include/stddef.h \
|
||
../include/linux/kernel.h
|
||
ptrace.s ptrace.o : ptrace.c ../include/linux/head.h ../include/linux/kernel.h \
|
||
../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/errno.h \
|
||
! ../include/asm/segment.h ../include/asm/system.h ../include/sys/ptrace.h
|
||
sched.s sched.o : sched.c ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/types.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/linux/timer.h \
|
||
! ../include/linux/sys.h ../include/linux/fdreg.h ../include/asm/system.h \
|
||
! ../include/asm/io.h ../include/asm/segment.h ../include/errno.h
|
||
signal.s signal.o : signal.c ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/types.h ../include/sys/dirent.h \
|
||
! ../include/limits.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h ../include/asm/segment.h \
|
||
! ../include/sys/wait.h ../include/errno.h
|
||
sys.s sys.o : sys.c ../include/errno.h ../include/linux/sched.h \
|
||
../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/linux/tty.h ../include/termios.h ../include/linux/config.h \
|
||
! ../include/asm/segment.h ../include/sys/times.h ../include/sys/utsname.h \
|
||
! ../include/string.h
|
||
traps.s traps.o : traps.c ../include/string.h ../include/linux/head.h \
|
||
../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/mm.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h \
|
||
! ../include/asm/system.h ../include/asm/segment.h ../include/asm/io.h \
|
||
! ../include/errno.h
|
||
vsprintf.s vsprintf.o : vsprintf.c ../include/stdarg.h ../include/string.h
|
||
*** ../0.95a/linux/kernel/sched.c Sat Mar 14 16:55:48 1992
|
||
--- linux/kernel/sched.c Tue Mar 24 00:57:35 1992
|
||
***************
|
||
*** 46,57 ****
|
||
|
||
void show_state(void)
|
||
{
|
||
int i;
|
||
|
||
printk("\rTask-info:\n\r");
|
||
! for (i=0;i<NR_TASKS;i++)
|
||
if (task[i])
|
||
show_task(i,task[i]);
|
||
}
|
||
|
||
#define LATCH (1193180/HZ)
|
||
--- 46,66 ----
|
||
|
||
void show_state(void)
|
||
{
|
||
+ static int lock = 0;
|
||
int i;
|
||
|
||
+ cli();
|
||
+ if (lock) {
|
||
+ sti();
|
||
+ return;
|
||
+ }
|
||
+ lock = 1;
|
||
+ sti();
|
||
printk("\rTask-info:\n\r");
|
||
! for (i=0 ; i<NR_TASKS ; i++)
|
||
if (task[i])
|
||
show_task(i,task[i]);
|
||
+ lock = 0;
|
||
}
|
||
|
||
#define LATCH (1193180/HZ)
|
||
*** ../0.95a/linux/kernel/exit.c Tue Mar 17 23:47:55 1992
|
||
--- linux/kernel/exit.c Fri Apr 3 23:10:57 1992
|
||
***************
|
||
*** 48,56 ****
|
||
/* we have to make sure that the process stops. */
|
||
if (p->state == TASK_INTERRUPTIBLE || p->state == TASK_RUNNING)
|
||
p->state = TASK_STOPPED;
|
||
-
|
||
- if (p == current)
|
||
- schedule();
|
||
}
|
||
return 0;
|
||
}
|
||
--- 48,53 ----
|
||
***************
|
||
*** 218,232 ****
|
||
int sys_kill(int pid,int sig)
|
||
{
|
||
struct task_struct **p = NR_TASKS + task;
|
||
! int err, retval = 0;
|
||
|
||
if (!pid)
|
||
! return(kill_pg(current->pid,sig,0));
|
||
if (pid == -1) {
|
||
while (--p > &FIRST_TASK)
|
||
! if (err = send_sig(sig,*p,0))
|
||
! retval = err;
|
||
! return(retval);
|
||
}
|
||
if (pid < 0)
|
||
return(kill_pg(-pid,sig,0));
|
||
--- 215,232 ----
|
||
int sys_kill(int pid,int sig)
|
||
{
|
||
struct task_struct **p = NR_TASKS + task;
|
||
! int err, retval = 0, count = 0;
|
||
|
||
if (!pid)
|
||
! return(kill_pg(current->pgrp,sig,0));
|
||
if (pid == -1) {
|
||
while (--p > &FIRST_TASK)
|
||
! if ((*p)->pid > 1 && *p != current) {
|
||
! ++count;
|
||
! if ((err = send_sig(sig,*p,0)) != -EPERM)
|
||
! retval = err;
|
||
! }
|
||
! return(count ? retval : -ESRCH);
|
||
}
|
||
if (pid < 0)
|
||
return(kill_pg(-pid,sig,0));
|
||
***************
|
||
*** 292,297 ****
|
||
--- 292,298 ----
|
||
current->library = NULL;
|
||
current->state = TASK_ZOMBIE;
|
||
current->exit_code = code;
|
||
+ current->rss = 0;
|
||
/*
|
||
* Check to see if any process groups have become orphaned
|
||
* as a result of our exiting, and if they have any stopped
|
||
***************
|
||
*** 413,420 ****
|
||
p->exit_code = 0;
|
||
return p->pid;
|
||
case TASK_ZOMBIE:
|
||
! current->cutime += p->utime;
|
||
! current->cstime += p->stime;
|
||
flag = p->pid;
|
||
if (stat_addr)
|
||
put_fs_long(p->exit_code, stat_addr);
|
||
--- 414,423 ----
|
||
p->exit_code = 0;
|
||
return p->pid;
|
||
case TASK_ZOMBIE:
|
||
! current->cutime += p->utime + p->cutime;
|
||
! current->cstime += p->stime + p->cstime;
|
||
! current->cmin_flt += p->min_flt + p->cmin_flt;
|
||
! current->cmaj_flt += p->maj_flt + p->cmaj_flt;
|
||
flag = p->pid;
|
||
if (stat_addr)
|
||
put_fs_long(p->exit_code, stat_addr);
|
||
*** ../0.95a/linux/kernel/fork.c Wed Mar 4 14:11:24 1992
|
||
--- linux/kernel/fork.c Wed Apr 1 01:27:04 1992
|
||
***************
|
||
*** 112,117 ****
|
||
--- 112,119 ----
|
||
p->leader = 0; /* process leadership doesn't inherit */
|
||
p->utime = p->stime = 0;
|
||
p->cutime = p->cstime = 0;
|
||
+ p->min_flt = p->maj_flt = 0;
|
||
+ p->cmin_flt = p->cmaj_flt = 0;
|
||
p->start_time = jiffies;
|
||
p->tss.back_link = 0;
|
||
p->tss.esp0 = PAGE_SIZE + (long) p;
|
||
*** ../0.95a/linux/kernel/sys.c Thu Feb 27 18:42:09 1992
|
||
--- linux/kernel/sys.c Wed Apr 1 01:27:27 1992
|
||
***************
|
||
*** 457,467 ****
|
||
--- 457,471 ----
|
||
r.ru_utime.tv_usec = CT_TO_USECS(current->utime);
|
||
r.ru_stime.tv_sec = CT_TO_SECS(current->stime);
|
||
r.ru_stime.tv_usec = CT_TO_USECS(current->stime);
|
||
+ r.ru_minflt = current->min_flt;
|
||
+ r.ru_majflt = current->maj_flt;
|
||
} else {
|
||
r.ru_utime.tv_sec = CT_TO_SECS(current->cutime);
|
||
r.ru_utime.tv_usec = CT_TO_USECS(current->cutime);
|
||
r.ru_stime.tv_sec = CT_TO_SECS(current->cstime);
|
||
r.ru_stime.tv_usec = CT_TO_USECS(current->cstime);
|
||
+ r.ru_minflt = current->cmin_flt;
|
||
+ r.ru_majflt = current->cmaj_flt;
|
||
}
|
||
lp = (unsigned long *) &r;
|
||
lpend = (unsigned long *) (&r+1);
|
||
*** ../0.95a/linux/kernel/chr_drv/keyboard.S Sun Mar 15 02:43:22 1992
|
||
--- linux/kernel/chr_drv/keyboard.S Sat Apr 4 16:30:36 1992
|
||
***************
|
||
*** 19,25 ****
|
||
* KBD_UK for British extended keyboard
|
||
* KBD_DK for Danish keyboard
|
||
*/
|
||
- #define KBD_FINNISH
|
||
|
||
.text
|
||
.globl _hard_reset_now
|
||
--- 19,24 ----
|
||
*** ../0.95a/linux/kernel/chr_drv/Makefile Thu Mar 5 23:37:00 1992
|
||
--- linux/kernel/chr_drv/Makefile Sat Apr 4 17:33:24 1992
|
||
***************
|
||
*** 5,22 ****
|
||
# removes any old dependencies. DON'T put your own dependencies here
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
|
||
- # gcc2 doesn't understand this option:
|
||
- #GCC_OPT = -fcombine-regs
|
||
-
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer $(GCC_OPT) \
|
||
! -finline-functions -nostdinc -I../../include
|
||
! CPP =gcc -E -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
--- 5,20 ----
|
||
# removes any old dependencies. DON'T put your own dependencies here
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
+ # Note 2! The CFLAGS definitions are now inherited from the
|
||
+ # parent makes..
|
||
+ #
|
||
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc -nostdinc -I../../include
|
||
! CPP =cpp -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
***************
|
||
*** 35,41 ****
|
||
sync
|
||
|
||
keyboard.s: keyboard.S
|
||
! $(CPP) -traditional keyboard.S -o keyboard.s
|
||
|
||
clean:
|
||
rm -f core *.o *.a tmp_make keyboard.s
|
||
--- 33,39 ----
|
||
sync
|
||
|
||
keyboard.s: keyboard.S
|
||
! $(CPP) $(KEYBOARD) -traditional keyboard.S -o keyboard.s
|
||
|
||
clean:
|
||
rm -f core *.o *.a tmp_make keyboard.s
|
||
***************
|
||
*** 50,78 ****
|
||
### Dependencies:
|
||
console.s console.o : console.c ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/linux/timer.h \
|
||
! ../../include/linux/tty.h ../../include/termios.h \
|
||
! ../../include/linux/config.h ../../include/asm/io.h \
|
||
../../include/asm/system.h ../../include/asm/segment.h \
|
||
../../include/string.h ../../include/errno.h
|
||
pty.s pty.o : pty.c ../../include/linux/tty.h ../../include/termios.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/asm/system.h ../../include/asm/io.h
|
||
serial.s serial.o : serial.c ../../include/linux/tty.h ../../include/termios.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/linux/timer.h ../../include/asm/system.h \
|
||
! ../../include/asm/io.h
|
||
tty_io.s tty_io.o : tty_io.c ../../include/ctype.h ../../include/errno.h \
|
||
../../include/signal.h ../../include/sys/types.h ../../include/unistd.h \
|
||
../../include/sys/stat.h ../../include/sys/time.h ../../include/time.h \
|
||
--- 48,77 ----
|
||
### Dependencies:
|
||
console.s console.o : console.c ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/sys/dirent.h ../../include/limits.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/linux/timer.h ../../include/linux/tty.h \
|
||
! ../../include/termios.h ../../include/linux/config.h ../../include/asm/io.h \
|
||
../../include/asm/system.h ../../include/asm/segment.h \
|
||
../../include/string.h ../../include/errno.h
|
||
pty.s pty.o : pty.c ../../include/linux/tty.h ../../include/termios.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/asm/system.h \
|
||
! ../../include/asm/io.h
|
||
serial.s serial.o : serial.c ../../include/linux/tty.h ../../include/termios.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/linux/timer.h \
|
||
! ../../include/asm/system.h ../../include/asm/io.h
|
||
tty_io.s tty_io.o : tty_io.c ../../include/ctype.h ../../include/errno.h \
|
||
../../include/signal.h ../../include/sys/types.h ../../include/unistd.h \
|
||
../../include/sys/stat.h ../../include/sys/time.h ../../include/time.h \
|
||
***************
|
||
*** 80,93 ****
|
||
../../include/sys/param.h ../../include/sys/resource.h \
|
||
../../include/utime.h ../../include/fcntl.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/linux/tty.h ../../include/termios.h \
|
||
! ../../include/asm/segment.h ../../include/asm/system.h
|
||
tty_ioctl.s tty_ioctl.o : tty_ioctl.c ../../include/errno.h ../../include/termios.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h ../../include/linux/tty.h \
|
||
../../include/asm/io.h ../../include/asm/segment.h \
|
||
../../include/asm/system.h
|
||
--- 79,94 ----
|
||
../../include/sys/param.h ../../include/sys/resource.h \
|
||
../../include/utime.h ../../include/fcntl.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/linux/tty.h \
|
||
! ../../include/termios.h ../../include/asm/segment.h \
|
||
! ../../include/asm/system.h
|
||
tty_ioctl.s tty_ioctl.o : tty_ioctl.c ../../include/errno.h ../../include/termios.h \
|
||
../../include/sys/types.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/linux/tty.h \
|
||
../../include/asm/io.h ../../include/asm/segment.h \
|
||
../../include/asm/system.h
|
||
*** ../0.95a/linux/kernel/chr_drv/console.c Fri Mar 13 00:37:07 1992
|
||
--- linux/kernel/chr_drv/console.c Thu Mar 19 21:15:03 1992
|
||
***************
|
||
*** 456,462 ****
|
||
p++;
|
||
}
|
||
sti();
|
||
! copy_to_cooked(tty);
|
||
}
|
||
|
||
static void insert_char(int currcons)
|
||
--- 456,462 ----
|
||
p++;
|
||
}
|
||
sti();
|
||
! TTY_READ_FLUSH(tty);
|
||
}
|
||
|
||
static void insert_char(int currcons)
|
||
***************
|
||
*** 823,829 ****
|
||
|
||
void do_keyboard_interrupt(void)
|
||
{
|
||
! copy_to_cooked(TTY_TABLE(0));
|
||
timer_active &= ~(1<<BLANK_TIMER);
|
||
if (console_blanked) {
|
||
timer_table[BLANK_TIMER].expires = 0;
|
||
--- 823,829 ----
|
||
|
||
void do_keyboard_interrupt(void)
|
||
{
|
||
! TTY_READ_FLUSH(TTY_TABLE(0));
|
||
timer_active &= ~(1<<BLANK_TIMER);
|
||
if (console_blanked) {
|
||
timer_table[BLANK_TIMER].expires = 0;
|
||
*** ../0.95a/linux/kernel/chr_drv/tty_ioctl.c Thu Mar 12 23:51:41 1992
|
||
--- linux/kernel/chr_drv/tty_ioctl.c Thu Mar 19 21:27:07 1992
|
||
***************
|
||
*** 260,270 ****
|
||
switch (arg) {
|
||
case TCOOFF:
|
||
tty->stopped = 1;
|
||
! TTY_WRITE(tty);
|
||
return 0;
|
||
case TCOON:
|
||
tty->stopped = 0;
|
||
! TTY_WRITE(tty);
|
||
return 0;
|
||
case TCIOFF:
|
||
if (STOP_CHAR(tty))
|
||
--- 260,270 ----
|
||
switch (arg) {
|
||
case TCOOFF:
|
||
tty->stopped = 1;
|
||
! TTY_WRITE_FLUSH(tty);
|
||
return 0;
|
||
case TCOON:
|
||
tty->stopped = 0;
|
||
! TTY_WRITE_FLUSH(tty);
|
||
return 0;
|
||
case TCIOFF:
|
||
if (STOP_CHAR(tty))
|
||
*** ../0.95a/linux/kernel/chr_drv/tty_io.c Tue Mar 17 22:46:46 1992
|
||
--- linux/kernel/chr_drv/tty_io.c Sat Apr 4 02:47:57 1992
|
||
***************
|
||
*** 129,141 ****
|
||
printk("copy_to_cooked: missing queues\n\r");
|
||
return;
|
||
}
|
||
- cli();
|
||
- if (tty->busy) {
|
||
- sti();
|
||
- return;
|
||
- }
|
||
- tty->busy = 1;
|
||
- sti();
|
||
while (1) {
|
||
if (EMPTY(tty->read_q))
|
||
break;
|
||
--- 129,134 ----
|
||
***************
|
||
*** 167,172 ****
|
||
--- 160,166 ----
|
||
if (c<32)
|
||
PUTCH(127,tty->write_q);
|
||
PUTCH(127,tty->write_q);
|
||
+ TTY_WRITE_FLUSH(tty);
|
||
}
|
||
DEC(tty->secondary->head);
|
||
}
|
||
***************
|
||
*** 183,188 ****
|
||
--- 177,183 ----
|
||
if (c<32)
|
||
PUTCH(127,tty->write_q);
|
||
PUTCH(127,tty->write_q);
|
||
+ TTY_WRITE_FLUSH(tty);
|
||
}
|
||
DEC(tty->secondary->head);
|
||
continue;
|
||
***************
|
||
*** 197,202 ****
|
||
--- 192,198 ----
|
||
if ((START_CHAR(tty) != _POSIX_VDISABLE) &&
|
||
(c==START_CHAR(tty))) {
|
||
tty->stopped=0;
|
||
+ TTY_WRITE_FLUSH(tty);
|
||
continue;
|
||
}
|
||
}
|
||
***************
|
||
*** 232,242 ****
|
||
PUTCH(c,tty->write_q);
|
||
}
|
||
PUTCH(c,tty->secondary);
|
||
}
|
||
! tty->write(tty);
|
||
! tty->busy = 0;
|
||
if (!EMPTY(tty->secondary))
|
||
wake_up(&tty->secondary->proc_list);
|
||
}
|
||
|
||
/*
|
||
--- 228,240 ----
|
||
PUTCH(c,tty->write_q);
|
||
}
|
||
PUTCH(c,tty->secondary);
|
||
+ TTY_WRITE_FLUSH(tty);
|
||
}
|
||
! TTY_WRITE_FLUSH(tty);
|
||
if (!EMPTY(tty->secondary))
|
||
wake_up(&tty->secondary->proc_list);
|
||
+ if (LEFT(tty->write_q) > TTY_BUF_SIZE/2)
|
||
+ wake_up(&tty->write_q->proc_list);
|
||
}
|
||
|
||
/*
|
||
***************
|
||
*** 305,314 ****
|
||
time = current->timeout = 0;
|
||
if (minimum>nr)
|
||
minimum = nr;
|
||
! copy_to_cooked(tty);
|
||
while (nr>0) {
|
||
if (other_tty && other_tty->write)
|
||
! TTY_WRITE(other_tty);
|
||
cli();
|
||
if (EMPTY(tty->secondary) || (L_CANON(tty) &&
|
||
!FULL(tty->read_q) && !tty->secondary->data)) {
|
||
--- 303,312 ----
|
||
time = current->timeout = 0;
|
||
if (minimum>nr)
|
||
minimum = nr;
|
||
! TTY_READ_FLUSH(tty);
|
||
while (nr>0) {
|
||
if (other_tty && other_tty->write)
|
||
! TTY_WRITE_FLUSH(other_tty);
|
||
cli();
|
||
if (EMPTY(tty->secondary) || (L_CANON(tty) &&
|
||
!FULL(tty->read_q) && !tty->secondary->data)) {
|
||
***************
|
||
*** 320,326 ****
|
||
break;
|
||
interruptible_sleep_on(&tty->secondary->proc_list);
|
||
sti();
|
||
! copy_to_cooked(tty);
|
||
continue;
|
||
}
|
||
sti();
|
||
--- 318,324 ----
|
||
break;
|
||
interruptible_sleep_on(&tty->secondary->proc_list);
|
||
sti();
|
||
! TTY_READ_FLUSH(tty);
|
||
continue;
|
||
}
|
||
sti();
|
||
***************
|
||
*** 398,404 ****
|
||
cr_flag = 0;
|
||
PUTCH(c,tty->write_q);
|
||
}
|
||
! TTY_WRITE(tty);
|
||
if (nr>0)
|
||
schedule();
|
||
}
|
||
--- 396,402 ----
|
||
cr_flag = 0;
|
||
PUTCH(c,tty->write_q);
|
||
}
|
||
! TTY_WRITE_FLUSH(tty);
|
||
if (nr>0)
|
||
schedule();
|
||
}
|
||
*** ../0.95a/linux/kernel/chr_drv/serial.c Sat Mar 14 20:16:21 1992
|
||
--- linux/kernel/chr_drv/serial.c Thu Mar 19 21:15:03 1992
|
||
***************
|
||
*** 26,47 ****
|
||
|
||
static void com1_timer(void)
|
||
{
|
||
! copy_to_cooked(tty_table+64);
|
||
}
|
||
|
||
static void com2_timer(void)
|
||
{
|
||
! copy_to_cooked(tty_table+65);
|
||
}
|
||
|
||
static void com3_timer(void)
|
||
{
|
||
! copy_to_cooked(tty_table+66);
|
||
}
|
||
|
||
static void com4_timer(void)
|
||
{
|
||
! copy_to_cooked(tty_table+67);
|
||
}
|
||
|
||
static inline void do_rs_write(unsigned int port)
|
||
--- 26,47 ----
|
||
|
||
static void com1_timer(void)
|
||
{
|
||
! TTY_READ_FLUSH(tty_table+64);
|
||
}
|
||
|
||
static void com2_timer(void)
|
||
{
|
||
! TTY_READ_FLUSH(tty_table+65);
|
||
}
|
||
|
||
static void com3_timer(void)
|
||
{
|
||
! TTY_READ_FLUSH(tty_table+66);
|
||
}
|
||
|
||
static void com4_timer(void)
|
||
{
|
||
! TTY_READ_FLUSH(tty_table+67);
|
||
}
|
||
|
||
static inline void do_rs_write(unsigned int port)
|
||
*** ../0.95a/linux/kernel/chr_drv/pty.c Sat Jan 11 01:56:45 1992
|
||
--- linux/kernel/chr_drv/pty.c Thu Mar 19 21:15:03 1992
|
||
***************
|
||
*** 25,31 ****
|
||
if (FULL(to->read_q)) {
|
||
if (FULL(to->secondary))
|
||
break;
|
||
! copy_to_cooked(to);
|
||
continue;
|
||
}
|
||
GETCH(from->write_q,c);
|
||
--- 25,31 ----
|
||
if (FULL(to->read_q)) {
|
||
if (FULL(to->secondary))
|
||
break;
|
||
! TTY_READ_FLUSH(to);
|
||
continue;
|
||
}
|
||
GETCH(from->write_q,c);
|
||
***************
|
||
*** 33,39 ****
|
||
if (current->signal & ~current->blocked)
|
||
break;
|
||
}
|
||
! copy_to_cooked(to);
|
||
wake_up(&from->write_q->proc_list);
|
||
}
|
||
|
||
--- 33,39 ----
|
||
if (current->signal & ~current->blocked)
|
||
break;
|
||
}
|
||
! TTY_READ_FLUSH(to);
|
||
wake_up(&from->write_q->proc_list);
|
||
}
|
||
|
||
*** ../0.95a/linux/kernel/math/Makefile Wed Mar 4 06:14:15 1992
|
||
--- linux/kernel/math/Makefile Sat Apr 4 17:06:02 1992
|
||
***************
|
||
*** 10,27 ****
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer \
|
||
! -finline-functions -nostdinc -I../../include
|
||
! CPP =gcc -E -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
! $(CC) $(CFLAGS) \
|
||
-S -o $*.s $<
|
||
.s.o:
|
||
$(AS) -c -o $*.o $<
|
||
.c.o:
|
||
! $(CC) $(CFLAGS) \
|
||
-c -o $*.o $<
|
||
|
||
OBJS = math_emulate.o error.o convert.o ea.o get_put.o \
|
||
--- 10,25 ----
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc -nostdinc -I../../include
|
||
! CPP =cpp -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
! $(CC) $(CFLAGS) $(MATH_EMULATION) \
|
||
-S -o $*.s $<
|
||
.s.o:
|
||
$(AS) -c -o $*.o $<
|
||
.c.o:
|
||
! $(CC) $(CFLAGS) $(MATH_EMULATION) \
|
||
-c -o $*.o $<
|
||
|
||
OBJS = math_emulate.o error.o convert.o ea.o get_put.o \
|
||
*** ../0.95a/linux/kernel/math/math_emulate.c Thu Mar 5 22:32:44 1992
|
||
--- linux/kernel/math/math_emulate.c Sat Apr 4 17:05:42 1992
|
||
***************
|
||
*** 30,37 ****
|
||
* hide most of the 387-specific things here.
|
||
*/
|
||
|
||
- #include <linux/config.h>
|
||
-
|
||
#ifdef KERNEL_MATH_EMULATION
|
||
|
||
#include <signal.h>
|
||
--- 30,35 ----
|
||
***************
|
||
*** 172,183 ****
|
||
real_to_real(&tmp,&ST(0));
|
||
return;
|
||
case 0x1a:
|
||
! fcom(PST(code & 7),&tmp);
|
||
! real_to_real(&tmp,&ST(0));
|
||
return;
|
||
case 0x1b:
|
||
! fcom(PST(code & 7),&tmp);
|
||
! real_to_real(&tmp,&ST(0));
|
||
fpop();
|
||
return;
|
||
case 0x1c:
|
||
--- 170,179 ----
|
||
real_to_real(&tmp,&ST(0));
|
||
return;
|
||
case 0x1a:
|
||
! fcom(PST(code & 7),PST(0));
|
||
return;
|
||
case 0x1b:
|
||
! fcom(PST(code & 7),PST(0));
|
||
fpop();
|
||
return;
|
||
case 0x1c:
|
||
***************
|
||
*** 201,207 ****
|
||
return;
|
||
case 0x38:
|
||
fpush();
|
||
! ST(0) = ST((code & 7)+1);
|
||
return;
|
||
case 0x39:
|
||
fxchg(&ST(0),&ST(code & 7));
|
||
--- 197,203 ----
|
||
return;
|
||
case 0x38:
|
||
fpush();
|
||
! ST(0) = ST((code+1) & 7);
|
||
return;
|
||
case 0x39:
|
||
fxchg(&ST(0),&ST(code & 7));
|
||
*** ../0.95a/linux/kernel/blk_drv/hd.c Sun Mar 15 20:46:53 1992
|
||
--- linux/kernel/blk_drv/hd.c Sat Apr 4 14:42:37 1992
|
||
***************
|
||
*** 16,21 ****
|
||
--- 16,23 ----
|
||
* in the early extended-partition checks and added DM partitions
|
||
*/
|
||
|
||
+ #include <errno.h>
|
||
+
|
||
#include <linux/config.h>
|
||
#include <linux/sched.h>
|
||
#include <linux/timer.h>
|
||
***************
|
||
*** 43,49 ****
|
||
static void bad_rw_intr(void);
|
||
|
||
static int recalibrate = 0;
|
||
! static int reset = 1;
|
||
|
||
/*
|
||
* This struct defines the HD's and their types.
|
||
--- 45,51 ----
|
||
static void bad_rw_intr(void);
|
||
|
||
static int recalibrate = 0;
|
||
! static int reset = 0;
|
||
|
||
/*
|
||
* This struct defines the HD's and their types.
|
||
***************
|
||
*** 77,104 ****
|
||
|
||
static unsigned int current_minor;
|
||
|
||
static void check_partition(unsigned int dev)
|
||
{
|
||
! int minor, i;
|
||
struct buffer_head *bh;
|
||
struct partition *p;
|
||
|
||
if (!(bh = bread(dev,0))) {
|
||
printk("Unable to read partition table of device %04x\n",dev);
|
||
return;
|
||
}
|
||
! minor = current_minor;
|
||
if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
|
||
p = 0x1BE + (void *)bh->b_data;
|
||
! for (i=0 ; i<4 ; i++,p++) {
|
||
! if (!(hd[i+minor].nr_sects = p->nr_sects))
|
||
continue;
|
||
! hd[i+minor].start_sect = p->start_sect;
|
||
if ((current_minor & 0x3f) >= 60)
|
||
continue;
|
||
if (p->sys_ind == EXTENDED_PARTITION) {
|
||
! current_minor += 4;
|
||
! check_partition(0x0300 | (i+minor));
|
||
}
|
||
}
|
||
/*
|
||
--- 79,181 ----
|
||
|
||
static unsigned int current_minor;
|
||
|
||
+ /*
|
||
+ * Create devices for each logical partition in an extended partition.
|
||
+ * The logical partitions form a linked list, with each entry being
|
||
+ * a partition table with two entries. The first entry
|
||
+ * is the real data partition (with a start relative to the partition
|
||
+ * table start). The second is a pointer to the next logical partition
|
||
+ * (with a start relative to the entire extended partition).
|
||
+ * We do not create a Linux partition for the partition tables, but
|
||
+ * only for the actual data partitions.
|
||
+ */
|
||
+ static void extended_partition(unsigned int dev)
|
||
+ {
|
||
+ struct buffer_head *bh;
|
||
+ struct partition *p;
|
||
+ unsigned long first_sector, this_sector;
|
||
+
|
||
+ first_sector = hd[MINOR(dev)].start_sect;
|
||
+ this_sector = first_sector;
|
||
+
|
||
+ while (1) {
|
||
+ if ((current_minor & 0x3f) >= 60)
|
||
+ return;
|
||
+ if (!(bh = bread(dev,0))) {
|
||
+ printk("Unable to read partition table of device %04x\n",dev);
|
||
+ return;
|
||
+ }
|
||
+ /*
|
||
+ * This block is from a device that we're about to stomp on.
|
||
+ * So make sure nobody thinks this block is usable.
|
||
+ */
|
||
+ bh->b_dirt=0;
|
||
+ bh->b_uptodate=0;
|
||
+ if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
|
||
+ p = 0x1BE + (void *)bh->b_data;
|
||
+ /*
|
||
+ * Process the first entry, which should be the real
|
||
+ * data partition.
|
||
+ */
|
||
+ if (p->sys_ind == EXTENDED_PARTITION ||
|
||
+ !(hd[current_minor].nr_sects = p->nr_sects))
|
||
+ goto done; /* shouldn't happen */
|
||
+ hd[current_minor].start_sect = this_sector + p->start_sect;
|
||
+ printk(" Logical part %d start %d size %d end %d\n\r",
|
||
+ current_minor, hd[current_minor].start_sect,
|
||
+ hd[current_minor].nr_sects,
|
||
+ hd[current_minor].start_sect +
|
||
+ hd[current_minor].nr_sects);
|
||
+ current_minor++;
|
||
+ p++;
|
||
+ /*
|
||
+ * Process the second entry, which should be a link
|
||
+ * to the next logical partition. Create a minor
|
||
+ * for this just long enough to get the next partition
|
||
+ * table. The minor will be reused for the real
|
||
+ * data partition.
|
||
+ */
|
||
+ if (p->sys_ind != EXTENDED_PARTITION ||
|
||
+ !(hd[current_minor].nr_sects = p->nr_sects))
|
||
+ goto done; /* no more logicals in this partition */
|
||
+ hd[current_minor].start_sect = first_sector + p->start_sect;
|
||
+ this_sector = first_sector + p->start_sect;
|
||
+ dev = 0x0300 | current_minor;
|
||
+ brelse(bh);
|
||
+ } else
|
||
+ goto done;
|
||
+ }
|
||
+ done:
|
||
+ brelse(bh);
|
||
+ }
|
||
+
|
||
static void check_partition(unsigned int dev)
|
||
{
|
||
! int i, minor = current_minor;
|
||
struct buffer_head *bh;
|
||
struct partition *p;
|
||
+ unsigned long first_sector;
|
||
|
||
+ first_sector = hd[MINOR(dev)].start_sect;
|
||
if (!(bh = bread(dev,0))) {
|
||
printk("Unable to read partition table of device %04x\n",dev);
|
||
return;
|
||
}
|
||
! printk("Drive %d:\n\r",minor >> 6);
|
||
! current_minor += 4; /* first "extra" minor */
|
||
if (*(unsigned short *) (bh->b_data+510) == 0xAA55) {
|
||
p = 0x1BE + (void *)bh->b_data;
|
||
! for (i=1 ; i<=4 ; minor++,i++,p++) {
|
||
! if (!(hd[minor].nr_sects = p->nr_sects))
|
||
continue;
|
||
! hd[minor].start_sect = first_sector + p->start_sect;
|
||
! printk(" part %d start %d size %d end %d \n\r", i,
|
||
! hd[minor].start_sect, hd[minor].nr_sects,
|
||
! hd[minor].start_sect + hd[minor].nr_sects);
|
||
if ((current_minor & 0x3f) >= 60)
|
||
continue;
|
||
if (p->sys_ind == EXTENDED_PARTITION) {
|
||
! extended_partition(0x0300 | minor);
|
||
}
|
||
}
|
||
/*
|
||
***************
|
||
*** 106,119 ****
|
||
*/
|
||
if (*(unsigned short *) (bh->b_data+0xfc) == 0x55AA) {
|
||
p = 0x1BE + (void *)bh->b_data;
|
||
! for (i=4; i<16; i++) {
|
||
p--;
|
||
if ((current_minor & 0x3f) >= 60)
|
||
break;
|
||
! if (!(hd[current_minor+4].start_sect = p->start_sect))
|
||
continue;
|
||
! hd[current_minor+4].nr_sects = p->nr_sects;
|
||
! current_minor++;
|
||
}
|
||
}
|
||
} else
|
||
--- 183,202 ----
|
||
*/
|
||
if (*(unsigned short *) (bh->b_data+0xfc) == 0x55AA) {
|
||
p = 0x1BE + (void *)bh->b_data;
|
||
! for (i = 4 ; i < 16 ; i++, current_minor++) {
|
||
p--;
|
||
if ((current_minor & 0x3f) >= 60)
|
||
break;
|
||
! if (!(p->start_sect && p->nr_sects))
|
||
continue;
|
||
! hd[current_minor].start_sect = p->start_sect;
|
||
! hd[current_minor].nr_sects = p->nr_sects;
|
||
! printk(" DM part %d start %d size %d end %d\n\r",
|
||
! current_minor,
|
||
! hd[current_minor].start_sect,
|
||
! hd[current_minor].nr_sects,
|
||
! hd[current_minor].start_sect +
|
||
! hd[current_minor].nr_sects);
|
||
}
|
||
}
|
||
} else
|
||
***************
|
||
*** 141,156 ****
|
||
hd_info[drive].sect = *(unsigned char *) (14+BIOS);
|
||
BIOS += 16;
|
||
}
|
||
- if (hd_info[1].cyl)
|
||
- NR_HD=2;
|
||
- else
|
||
- NR_HD=1;
|
||
- #endif
|
||
- for (i=0 ; i<NR_HD ; i++) {
|
||
- hd[i<<6].start_sect = 0;
|
||
- hd[i<<6].nr_sects = hd_info[i].head*
|
||
- hd_info[i].sect*hd_info[i].cyl;
|
||
- }
|
||
|
||
/*
|
||
We querry CMOS about hard disks : it could be that
|
||
--- 224,229 ----
|
||
***************
|
||
*** 181,190 ****
|
||
NR_HD = 1;
|
||
else
|
||
NR_HD = 0;
|
||
! for (i = NR_HD ; i < 2 ; i++) {
|
||
! hd[i<<6].start_sect = 0;
|
||
! hd[i<<6].nr_sects = 0;
|
||
}
|
||
for (drive=0 ; drive<NR_HD ; drive++) {
|
||
current_minor = 1+(drive<<6);
|
||
check_partition(0x0300+(drive<<6));
|
||
--- 254,267 ----
|
||
NR_HD = 1;
|
||
else
|
||
NR_HD = 0;
|
||
! #endif
|
||
! for (i = 0 ; i < (MAX_HD<<6) ; i++) {
|
||
! hd[i].start_sect = 0;
|
||
! hd[i].nr_sects = 0;
|
||
}
|
||
+ for (i = 0 ; i < NR_HD ; i++)
|
||
+ hd[i<<6].nr_sects = hd_info[i].head*
|
||
+ hd_info[i].sect*hd_info[i].cyl;
|
||
for (drive=0 ; drive<NR_HD ; drive++) {
|
||
current_minor = 1+(drive<<6);
|
||
check_partition(0x0300+(drive<<6));
|
||
***************
|
||
*** 299,313 ****
|
||
--- 376,400 ----
|
||
do_hd_request();
|
||
}
|
||
|
||
+ /*
|
||
+ * Ok, don't know what to do with the unexpected interrupts: on some machines
|
||
+ * doing a reset and a retry seems to result in an eternal loop. Right now I
|
||
+ * ignore it, and just set the timeout.
|
||
+ */
|
||
void unexpected_hd_interrupt(void)
|
||
{
|
||
printk("Unexpected HD interrupt\n\r");
|
||
+ SET_TIMER;
|
||
+ #if 0
|
||
reset = 1;
|
||
do_hd_request();
|
||
+ #endif
|
||
}
|
||
|
||
static void bad_rw_intr(void)
|
||
{
|
||
+ if (!CURRENT)
|
||
+ return;
|
||
if (++CURRENT->errors >= MAX_ERRORS)
|
||
end_request(0);
|
||
if (CURRENT->errors > MAX_ERRORS/2)
|
||
***************
|
||
*** 361,366 ****
|
||
--- 448,457 ----
|
||
do_hd_request();
|
||
}
|
||
|
||
+ /*
|
||
+ * This is another of the error-routines I don't know what to do with. The
|
||
+ * best idea seems to just set reset, and start all over again.
|
||
+ */
|
||
static void hd_times_out(void)
|
||
{
|
||
do_hd = NULL;
|
||
***************
|
||
*** 367,379 ****
|
||
reset = 1;
|
||
if (!CURRENT)
|
||
return;
|
||
! printk("HD timeout");
|
||
if (++CURRENT->errors >= MAX_ERRORS)
|
||
end_request(0);
|
||
do_hd_request();
|
||
}
|
||
|
||
! void do_hd_request(void)
|
||
{
|
||
int i,r;
|
||
unsigned int block,dev;
|
||
--- 458,471 ----
|
||
reset = 1;
|
||
if (!CURRENT)
|
||
return;
|
||
! printk("HD timeout\n\r");
|
||
! cli();
|
||
if (++CURRENT->errors >= MAX_ERRORS)
|
||
end_request(0);
|
||
do_hd_request();
|
||
}
|
||
|
||
! static void do_hd_request(void)
|
||
{
|
||
int i,r;
|
||
unsigned int block,dev;
|
||
***************
|
||
*** 434,437 ****
|
||
--- 526,553 ----
|
||
outb_p(inb_p(0x21)&0xfb,0x21);
|
||
outb(inb_p(0xA1)&0xbf,0xA1);
|
||
timer_table[HD_TIMER].fn = hd_times_out;
|
||
+ }
|
||
+
|
||
+ int hd_ioctl(int dev, int cmd, int arg)
|
||
+ {
|
||
+ struct hd_geometry *loc = (void *) arg;
|
||
+
|
||
+ if (!loc)
|
||
+ return -EINVAL;
|
||
+ dev = MINOR(dev) >> 6;
|
||
+ if (dev >= NR_HD)
|
||
+ return -EINVAL;
|
||
+
|
||
+ switch (cmd) {
|
||
+ case HDIO_REQ:
|
||
+ put_fs_byte(hd_info[dev].head,
|
||
+ (char *) &loc->heads);
|
||
+ put_fs_byte(hd_info[dev].sect,
|
||
+ (char *) &loc->sectors);
|
||
+ put_fs_word(hd_info[dev].cyl,
|
||
+ (short *) &loc->cylinders);
|
||
+ return 0;
|
||
+ default:
|
||
+ return -EINVAL;
|
||
+ }
|
||
}
|
||
*** ../0.95a/linux/kernel/blk_drv/ll_rw_blk.c Fri Mar 6 03:04:44 1992
|
||
--- linux/kernel/blk_drv/ll_rw_blk.c Sat Mar 21 12:42:01 1992
|
||
***************
|
||
*** 83,90 ****
|
||
req->bh->b_dirt = 0;
|
||
if (!(tmp = dev->current_request)) {
|
||
dev->current_request = req;
|
||
- sti();
|
||
(dev->request_fn)();
|
||
return;
|
||
}
|
||
for ( ; tmp->next ; tmp = tmp->next) {
|
||
--- 83,90 ----
|
||
req->bh->b_dirt = 0;
|
||
if (!(tmp = dev->current_request)) {
|
||
dev->current_request = req;
|
||
(dev->request_fn)();
|
||
+ sti();
|
||
return;
|
||
}
|
||
for ( ; tmp->next ; tmp = tmp->next) {
|
||
*** ../0.95a/linux/kernel/blk_drv/Makefile Thu Mar 5 23:37:04 1992
|
||
--- linux/kernel/blk_drv/Makefile Sat Apr 4 17:33:28 1992
|
||
***************
|
||
*** 5,19 ****
|
||
# removes any old dependencies. DON'T put your own dependencies here
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer \
|
||
! -finline-functions -nostdinc -I../../include
|
||
! CPP =gcc -E -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
--- 5,20 ----
|
||
# removes any old dependencies. DON'T put your own dependencies here
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
+ # Note 2! The CFLAGS definition is now inherited from the
|
||
+ # parent makefile.
|
||
+ #
|
||
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc -nostdinc -I../../include
|
||
! CPP =cpp -nostdinc -I../../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
***************
|
||
*** 42,56 ****
|
||
|
||
### Dependencies:
|
||
floppy.s floppy.o : floppy.c ../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/fdreg.h \
|
||
../../include/asm/system.h ../../include/asm/io.h \
|
||
../../include/asm/segment.h blk.h
|
||
! hd.s hd.o : hd.c ../../include/linux/config.h ../../include/linux/sched.h \
|
||
! ../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/timer.h \
|
||
--- 43,59 ----
|
||
|
||
### Dependencies:
|
||
floppy.s floppy.o : floppy.c ../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/fdreg.h \
|
||
../../include/asm/system.h ../../include/asm/io.h \
|
||
../../include/asm/segment.h blk.h
|
||
! hd.s hd.o : hd.c ../../include/errno.h ../../include/linux/config.h \
|
||
! ../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/timer.h \
|
||
***************
|
||
*** 58,70 ****
|
||
../../include/asm/io.h ../../include/asm/segment.h blk.h
|
||
ll_rw_blk.s ll_rw_blk.o : ll_rw_blk.c ../../include/errno.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/linux/mm.h \
|
||
! ../../include/linux/kernel.h ../../include/signal.h \
|
||
! ../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
! ../../include/sys/resource.h ../../include/asm/system.h blk.h
|
||
ramdisk.s ramdisk.o : ramdisk.c ../../include/string.h ../../include/linux/config.h \
|
||
../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/minix_fs.h \
|
||
--- 61,75 ----
|
||
../../include/asm/io.h ../../include/asm/segment.h blk.h
|
||
ll_rw_blk.s ll_rw_blk.o : ll_rw_blk.c ../../include/errno.h ../../include/linux/sched.h \
|
||
../../include/linux/head.h ../../include/linux/fs.h \
|
||
! ../../include/sys/types.h ../../include/sys/dirent.h ../../include/limits.h \
|
||
! ../../include/linux/mm.h ../../include/linux/kernel.h \
|
||
! ../../include/signal.h ../../include/sys/param.h ../../include/sys/time.h \
|
||
! ../../include/time.h ../../include/sys/resource.h \
|
||
! ../../include/asm/system.h blk.h
|
||
ramdisk.s ramdisk.o : ramdisk.c ../../include/string.h ../../include/linux/config.h \
|
||
../../include/linux/sched.h ../../include/linux/head.h \
|
||
! ../../include/linux/fs.h ../../include/sys/types.h \
|
||
! ../../include/sys/dirent.h ../../include/limits.h ../../include/linux/mm.h \
|
||
../../include/linux/kernel.h ../../include/signal.h \
|
||
../../include/sys/param.h ../../include/sys/time.h ../../include/time.h \
|
||
../../include/sys/resource.h ../../include/linux/minix_fs.h \
|
||
*** ../0.95a/linux/kernel/blk_drv/blk.h Thu Mar 12 03:42:41 1992
|
||
--- linux/kernel/blk_drv/blk.h Fri Apr 3 15:28:31 1992
|
||
***************
|
||
*** 78,87 ****
|
||
#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device))
|
||
|
||
#elif (MAJOR_NR == 3)
|
||
! /* harddisk */
|
||
#define DEVICE_NAME "harddisk"
|
||
#define DEVICE_INTR do_hd
|
||
#define DEVICE_TIMEOUT HD_TIMER
|
||
#define DEVICE_REQUEST do_hd_request
|
||
#define DEVICE_NR(device) (MINOR(device)>>6)
|
||
#define DEVICE_ON(device)
|
||
--- 78,88 ----
|
||
#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device))
|
||
|
||
#elif (MAJOR_NR == 3)
|
||
! /* harddisk: timeout is 6 seconds.. */
|
||
#define DEVICE_NAME "harddisk"
|
||
#define DEVICE_INTR do_hd
|
||
#define DEVICE_TIMEOUT HD_TIMER
|
||
+ #define TIMEOUT_VALUE 600
|
||
#define DEVICE_REQUEST do_hd_request
|
||
#define DEVICE_NR(device) (MINOR(device)>>6)
|
||
#define DEVICE_ON(device)
|
||
***************
|
||
*** 101,110 ****
|
||
#endif
|
||
#ifdef DEVICE_TIMEOUT
|
||
|
||
! #define SET_INTR(x) if (DEVICE_INTR = (x)) { \
|
||
! timer_table[DEVICE_TIMEOUT].expires = jiffies + 200; \
|
||
! timer_active |= 1<<DEVICE_TIMEOUT; \
|
||
! } else timer_active &= ~(1<<DEVICE_TIMEOUT)
|
||
|
||
#else
|
||
|
||
--- 102,119 ----
|
||
#endif
|
||
#ifdef DEVICE_TIMEOUT
|
||
|
||
! #define SET_TIMER \
|
||
! ((timer_table[DEVICE_TIMEOUT].expires = jiffies + TIMEOUT_VALUE), \
|
||
! (timer_active |= 1<<DEVICE_TIMEOUT))
|
||
!
|
||
! #define CLEAR_TIMER \
|
||
! timer_active &= ~(1<<DEVICE_TIMEOUT)
|
||
!
|
||
! #define SET_INTR(x) \
|
||
! if (DEVICE_INTR = (x)) \
|
||
! SET_TIMER; \
|
||
! else \
|
||
! CLEAR_TIMER;
|
||
|
||
#else
|
||
|
||
*** ../0.95a/linux/kernel/ptrace.c Tue Mar 17 23:38:37 1992
|
||
--- linux/kernel/ptrace.c Sat Apr 4 17:07:20 1992
|
||
***************
|
||
*** 1,5 ****
|
||
--- 1,6 ----
|
||
/* ptrace.c */
|
||
/* By Ross Biro 1/23/92 */
|
||
+ /* edited by Linus Torvalds */
|
||
|
||
#include <linux/head.h>
|
||
#include <linux/kernel.h>
|
||
***************
|
||
*** 22,30 ****
|
||
/* set's the trap flag. */
|
||
#define TRAP_FLAG 0x100
|
||
|
||
- /* check's for granularity. */
|
||
- #define GRANULARITY 0x00800000
|
||
-
|
||
/*
|
||
* this is the number to subtract from the top of the stack. To find
|
||
* the local frame.
|
||
--- 23,28 ----
|
||
***************
|
||
*** 51,58 ****
|
||
* the offset is how far from the base addr as stored in the TSS.
|
||
* this routine assumes that all the priviledged stacks are in our
|
||
* data space.
|
||
! */
|
||
!
|
||
static inline int get_stack_long(struct task_struct *task, int offset)
|
||
{
|
||
unsigned char *stack;
|
||
--- 49,55 ----
|
||
* the offset is how far from the base addr as stored in the TSS.
|
||
* this routine assumes that all the priviledged stacks are in our
|
||
* data space.
|
||
! */
|
||
static inline int get_stack_long(struct task_struct *task, int offset)
|
||
{
|
||
unsigned char *stack;
|
||
***************
|
||
*** 69,213 ****
|
||
* data space.
|
||
*/
|
||
static inline int put_stack_long(struct task_struct *task, int offset,
|
||
! unsigned short data)
|
||
{
|
||
unsigned char * stack;
|
||
|
||
stack = (unsigned char *) task->tss.esp0;
|
||
stack += offset;
|
||
! *(int *) stack = data;
|
||
return 0;
|
||
}
|
||
|
||
/*
|
||
! * this routine will get a word out of an arbitrary
|
||
! * tasks data space. It likes to have the task number
|
||
! * rather than the task pointer. Perhaps the number
|
||
! * should be included in the pointer.
|
||
*/
|
||
! /* seg = 0 if I space */
|
||
! static inline int get_long(int tsk, long addr, unsigned seg, int *data)
|
||
{
|
||
- int i;
|
||
- int limit;
|
||
- int cur;
|
||
- unsigned long address;
|
||
unsigned long page;
|
||
- unsigned oldfs;
|
||
|
||
! /* find the task number of the current task. */
|
||
! for (i = 0; i < NR_TASKS ; i ++) {
|
||
! if (task[i] == current) break;
|
||
}
|
||
- if (i == NR_TASKS) {
|
||
- printk("PTRACE: Can't find current task\n");
|
||
- do_exit(SIGSEGV);
|
||
- }
|
||
- cur = i;
|
||
-
|
||
- /* we will need to check the readability of the segment
|
||
- and then the byte in order to avoid segment violations. */
|
||
- seg++;
|
||
- limit = (task[tsk]->ldt[seg].a) & 0xffff;
|
||
- /* this should be constant amound all of our segments, but we
|
||
- had better check anyway. */
|
||
- if (task[tsk]->ldt[seg].b & GRANULARITY)
|
||
- limit = limit << 12;
|
||
-
|
||
- if (limit <= addr+4)
|
||
- return -EIO;
|
||
-
|
||
- /* Now compute the address, and make sure that it is present. */
|
||
- address = task[tsk]->start_code + addr;
|
||
-
|
||
- page = *((unsigned long*) ((address >> 20) & 0xffc));
|
||
- /* see if it is present. */
|
||
if (!(page & PAGE_PRESENT)) {
|
||
! do_no_page(0, address, task[tsk]);
|
||
}
|
||
!
|
||
! oldfs = get_fs();
|
||
! /* now convert seg to the right format. */
|
||
! seg = (seg << 3) | 0x4;
|
||
!
|
||
! cli(); /* we are about to change our ldt, we better do it
|
||
! with interrupts off. Perhaps we should call schedule
|
||
! first so that we won't be taking too much extra time. */
|
||
! lldt(tsk);
|
||
! set_fs(seg);
|
||
! *data = get_fs_long((void *)addr); /* we are assuming kernel space
|
||
! is in the gdt here. */
|
||
! lldt(cur);
|
||
! set_fs(oldfs);
|
||
! sti();
|
||
! return 0;
|
||
}
|
||
|
||
/*
|
||
! * this routine will get a word out of an arbitrary
|
||
! * tasks data space. It likes to have the task number
|
||
! * rather than the task pointer. Perhaps the number
|
||
! * should be included in the pointer.
|
||
*/
|
||
! /* seg = 0 if I space */
|
||
! static inline int put_long(int tsk, long addr, int data, unsigned seg)
|
||
{
|
||
- int i;
|
||
- int limit;
|
||
- unsigned oldfs;
|
||
- unsigned long address;
|
||
unsigned long page;
|
||
- int cur;
|
||
|
||
! /* find the task number of the current task. */
|
||
! for (i = 0; i < NR_TASKS ; i++) {
|
||
! if (task[i] == current) break;
|
||
}
|
||
! if (i == NR_TASKS) {
|
||
! printk("PTRACE: Can't find current task\n");
|
||
! do_exit(SIGSEGV);
|
||
}
|
||
! cur = i;
|
||
|
||
! /* we will need to check the readability of the segment
|
||
! and then the byte in order to avoid segment violations. */
|
||
! seg++;
|
||
! limit = (task[tsk]->ldt[seg].a) & 0xffff;
|
||
! /* this should be constant amound all of our segments, but we
|
||
! had better check anyway. */
|
||
! if (task[tsk]->ldt[seg].b & GRANULARITY)
|
||
! limit = limit << 12;
|
||
|
||
! if (limit <= addr+4)
|
||
return -EIO;
|
||
|
||
! /* Now compute the address, and make sure that it is present. */
|
||
! address = task[tsk]->start_code + addr;
|
||
|
||
! page = *((unsigned long*) ((address >> 20) & 0xffc));
|
||
! /* see if it is present. */
|
||
! if (!(page & PAGE_PRESENT)) {
|
||
! do_no_page(0, address, task[tsk]);
|
||
! }
|
||
! write_verify(address);
|
||
!
|
||
! oldfs=get_fs();
|
||
! /* now convert seg to the right format. */
|
||
! seg = (seg << 3) | 0x4;
|
||
!
|
||
! cli(); /* we are about to change our ldt, we better do it
|
||
! with interrupts off. Perhaps we should call schedule
|
||
! first so that we won't be taking too much extra time. */
|
||
! lldt(tsk);
|
||
! set_fs(seg);
|
||
! put_fs_long(data,(void *)addr);
|
||
! lldt(cur);
|
||
! set_fs(oldfs);
|
||
! sti();
|
||
return 0;
|
||
}
|
||
|
||
-
|
||
/* Perform ptrace(request, pid, addr, data) syscall */
|
||
int sys_ptrace(unsigned long *buffer)
|
||
{
|
||
--- 66,224 ----
|
||
* data space.
|
||
*/
|
||
static inline int put_stack_long(struct task_struct *task, int offset,
|
||
! unsigned long data)
|
||
{
|
||
unsigned char * stack;
|
||
|
||
stack = (unsigned char *) task->tss.esp0;
|
||
stack += offset;
|
||
! *(unsigned long *) stack = data;
|
||
return 0;
|
||
}
|
||
|
||
/*
|
||
! * This routine gets a long from any process space by following the page
|
||
! * tables. NOTE! You should check that the long isn't on a page boundary,
|
||
! * and that it is in the task area before calling this: this routine does
|
||
! * no checking.
|
||
! *
|
||
! * NOTE2! This uses "tsk->tss.cr3" even though we know it's currently always
|
||
! * zero. This routine shouldn't have to change when we make a better mm.
|
||
*/
|
||
! static unsigned long get_long(struct task_struct * tsk,
|
||
! unsigned long addr)
|
||
{
|
||
unsigned long page;
|
||
|
||
! addr += tsk->start_code;
|
||
! repeat:
|
||
! page = tsk->tss.cr3 + ((addr >> 20) & 0xffc);
|
||
! page = *(unsigned long *) page;
|
||
! if (page & PAGE_PRESENT) {
|
||
! page &= 0xfffff000;
|
||
! page += (addr >> 10) & 0xffc;
|
||
! page = *((unsigned long *) page);
|
||
}
|
||
if (!(page & PAGE_PRESENT)) {
|
||
! do_no_page(0,addr,tsk);
|
||
! goto repeat;
|
||
}
|
||
! page &= 0xfffff000;
|
||
! page += addr & 0xfff;
|
||
! return *(unsigned long *) page;
|
||
}
|
||
|
||
/*
|
||
! * This routine puts a long into any process space by following the page
|
||
! * tables. NOTE! You should check that the long isn't on a page boundary,
|
||
! * and that it is in the task area before calling this: this routine does
|
||
! * no checking.
|
||
*/
|
||
! static void put_long(struct task_struct * tsk, unsigned long addr,
|
||
! unsigned long data)
|
||
{
|
||
unsigned long page;
|
||
|
||
! addr += tsk->start_code;
|
||
! repeat:
|
||
! page = tsk->tss.cr3 + ((addr >> 20) & 0xffc);
|
||
! page = *(unsigned long *) page;
|
||
! if (page & PAGE_PRESENT) {
|
||
! page &= 0xfffff000;
|
||
! page += (addr >> 10) & 0xffc;
|
||
! page = *((unsigned long *) page);
|
||
}
|
||
! if (!(page & PAGE_PRESENT)) {
|
||
! do_no_page(0,addr,tsk);
|
||
! goto repeat;
|
||
}
|
||
! if (!(page & PAGE_RW)) {
|
||
! write_verify(addr);
|
||
! goto repeat;
|
||
! }
|
||
! page &= 0xfffff000;
|
||
! page += addr & 0xfff;
|
||
! *(unsigned long *) page = data;
|
||
! }
|
||
|
||
! /*
|
||
! * This routine checks the page boundaries, and that the offset is
|
||
! * within the task area. It then calls get_long() to read a long.
|
||
! */
|
||
! static int read_long(struct task_struct * tsk, unsigned long addr,
|
||
! unsigned long * result)
|
||
! {
|
||
! unsigned long low,high;
|
||
|
||
! if (addr > TASK_SIZE-4)
|
||
return -EIO;
|
||
+ if ((addr & 0xfff) > PAGE_SIZE-4) {
|
||
+ low = get_long(tsk,addr & 0xfffffffc);
|
||
+ high = get_long(tsk,(addr+4) & 0xfffffffc);
|
||
+ switch (addr & 3) {
|
||
+ case 1:
|
||
+ low >>= 8;
|
||
+ low |= high << 24;
|
||
+ break;
|
||
+ case 2:
|
||
+ low >>= 16;
|
||
+ low |= high << 16;
|
||
+ break;
|
||
+ case 3:
|
||
+ low >>= 24;
|
||
+ low |= high << 8;
|
||
+ break;
|
||
+ }
|
||
+ *result = low;
|
||
+ } else
|
||
+ *result = get_long(tsk,addr);
|
||
+ return 0;
|
||
+ }
|
||
|
||
! /*
|
||
! * This routine checks the page boundaries, and that the offset is
|
||
! * within the task area. It then calls put_long() to write a long.
|
||
! */
|
||
! static int write_long(struct task_struct * tsk, unsigned long addr,
|
||
! unsigned long data)
|
||
! {
|
||
! unsigned long low,high;
|
||
|
||
! if (addr > TASK_SIZE-4)
|
||
! return -EIO;
|
||
! if ((addr & 0xfff) > PAGE_SIZE-4) {
|
||
! low = get_long(tsk,addr & 0xfffffffc);
|
||
! high = get_long(tsk,(addr+4) & 0xfffffffc);
|
||
! switch (addr & 3) {
|
||
! case 0: /* shouldn't happen, but safety first */
|
||
! low = data;
|
||
! break;
|
||
! case 1:
|
||
! low &= 0x000000ff;
|
||
! low |= data << 8;
|
||
! high &= 0xffffff00;
|
||
! high |= data >> 24;
|
||
! break;
|
||
! case 2:
|
||
! low &= 0x0000ffff;
|
||
! low |= data << 16;
|
||
! high &= 0xffff0000;
|
||
! high |= data >> 16;
|
||
! break;
|
||
! case 3:
|
||
! low &= 0x00ffffff;
|
||
! low |= data << 24;
|
||
! high &= 0xff000000;
|
||
! high |= data >> 8;
|
||
! break;
|
||
! }
|
||
! put_long(tsk,addr & 0xfffffffc,low);
|
||
! put_long(tsk,(addr+4) & 0xfffffffc,high);
|
||
! } else
|
||
! put_long(tsk,addr,data);
|
||
return 0;
|
||
}
|
||
|
||
/* Perform ptrace(request, pid, addr, data) syscall */
|
||
int sys_ptrace(unsigned long *buffer)
|
||
{
|
||
***************
|
||
*** 244,250 ****
|
||
case 2: {
|
||
int tmp,res;
|
||
|
||
! res = get_long(childno, addr, 1, &tmp);
|
||
if (res < 0)
|
||
return res;
|
||
verify_area((void *) data, 4);
|
||
--- 255,261 ----
|
||
case 2: {
|
||
int tmp,res;
|
||
|
||
! res = read_long(task[childno], addr, &tmp);
|
||
if (res < 0)
|
||
return res;
|
||
verify_area((void *) data, 4);
|
||
***************
|
||
*** 267,280 ****
|
||
/* when I and D space are seperate, this will have to be fixed. */
|
||
case 4: /* write the word at location addr. */
|
||
case 5:
|
||
! if (put_long(childno, addr, data, 1))
|
||
! return -EIO;
|
||
! return 0;
|
||
|
||
case 6: /* write the word at location addr in the USER area */
|
||
addr = addr >> 2; /* temproary hack. */
|
||
if (addr < 0 || addr >= 17)
|
||
! return -EIO;
|
||
if (addr == ORIG_EAX)
|
||
return -EIO;
|
||
if (addr == EFL) { /* flags. */
|
||
--- 278,289 ----
|
||
/* when I and D space are seperate, this will have to be fixed. */
|
||
case 4: /* write the word at location addr. */
|
||
case 5:
|
||
! return write_long(task[childno],addr,data);
|
||
|
||
case 6: /* write the word at location addr in the USER area */
|
||
addr = addr >> 2; /* temproary hack. */
|
||
if (addr < 0 || addr >= 17)
|
||
! return -EIO;
|
||
if (addr == ORIG_EAX)
|
||
return -EIO;
|
||
if (addr == EFL) { /* flags. */
|
||
***************
|
||
*** 281,287 ****
|
||
data &= FLAG_MASK;
|
||
data |= get_stack_long(child, EFL*4-MAGICNUMBER) & ~FLAG_MASK;
|
||
}
|
||
-
|
||
if (put_stack_long(child, 4*addr-MAGICNUMBER, data))
|
||
return -EIO;
|
||
return 0;
|
||
--- 290,295 ----
|
||
*** ../0.95a/linux/lib/Makefile Thu Mar 5 20:23:23 1992
|
||
--- linux/lib/Makefile Sat Apr 4 17:00:10 1992
|
||
***************
|
||
*** 6,22 ****
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
|
||
- # gcc2 doesn't understand some options..
|
||
- # GCC_OPT = -fcombine-regs
|
||
-
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc
|
||
! CFLAGS =-Wall -O -fstrength-reduce -fomit-frame-pointer $(GCC_OPT) \
|
||
! -finline-functions -nostdinc -I../include
|
||
! CPP =gcc -E -nostdinc -I../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
--- 6,17 ----
|
||
# unless it's something special (ie not a .c file).
|
||
#
|
||
|
||
AR =ar
|
||
AS =as
|
||
LD =ld
|
||
LDFLAGS =-s -x
|
||
! CC =gcc -nostdinc -I../include
|
||
! CPP =cpp -nostdinc -I../include
|
||
|
||
.c.s:
|
||
$(CC) $(CFLAGS) \
|
||
*** ../0.95a/linux/mm/Makefile Tue Mar 17 11:57:15 1992
|
||
--- linux/mm/Makefile Sat Apr 4 17:33:29 1992
|
||
***************
|
||
*** 1,10 ****
|
||
! CC =gcc
|
||
! CFLAGS =-O -Wall -fstrength-reduce -fomit-frame-pointer \
|
||
! -finline-functions -nostdinc -I../include
|
||
AS =as
|
||
AR =ar
|
||
LD =ld
|
||
! CPP =gcc -E -nostdinc -I../include
|
||
|
||
.c.o:
|
||
$(CC) $(CFLAGS) \
|
||
--- 1,17 ----
|
||
! #
|
||
! # Makefile for the linux memory manager.
|
||
! #
|
||
! # Note! Dependencies are done automagically by 'make dep', which also
|
||
! # removes any old dependencies. DON'T put your own dependencies here
|
||
! # unless it's something special (ie not a .c file).
|
||
! #
|
||
! # Note 2! The CFLAGS definition is now in the main makefile...
|
||
!
|
||
AS =as
|
||
AR =ar
|
||
LD =ld
|
||
! CC =gcc -nostdinc -I../include
|
||
! CPP =cpp -nostdinc -I../include
|
||
|
||
.c.o:
|
||
$(CC) $(CFLAGS) \
|
||
***************
|
||
*** 32,42 ****
|
||
### Dependencies:
|
||
memory.o : memory.c ../include/signal.h ../include/sys/types.h \
|
||
../include/asm/system.h ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/linux/mm.h ../include/linux/kernel.h \
|
||
! ../include/sys/param.h ../include/sys/time.h ../include/time.h \
|
||
! ../include/sys/resource.h
|
||
swap.o : swap.c ../include/string.h ../include/errno.h \
|
||
../include/linux/mm.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/linux/kernel.h ../include/signal.h ../include/sys/stat.h \
|
||
! ../include/linux/sched.h ../include/linux/head.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h
|
||
--- 39,50 ----
|
||
### Dependencies:
|
||
memory.o : memory.c ../include/signal.h ../include/sys/types.h \
|
||
../include/asm/system.h ../include/linux/sched.h ../include/linux/head.h \
|
||
! ../include/linux/fs.h ../include/sys/dirent.h ../include/limits.h \
|
||
! ../include/linux/mm.h ../include/linux/kernel.h ../include/sys/param.h \
|
||
! ../include/sys/time.h ../include/time.h ../include/sys/resource.h
|
||
swap.o : swap.c ../include/string.h ../include/errno.h \
|
||
../include/linux/mm.h ../include/linux/fs.h ../include/sys/types.h \
|
||
! ../include/sys/dirent.h ../include/limits.h ../include/linux/kernel.h \
|
||
! ../include/signal.h ../include/sys/stat.h ../include/linux/sched.h \
|
||
! ../include/linux/head.h ../include/sys/param.h ../include/sys/time.h \
|
||
! ../include/time.h ../include/sys/resource.h
|
||
*** ../0.95a/linux/mm/memory.c Tue Mar 17 22:35:13 1992
|
||
--- linux/mm/memory.c Wed Apr 1 01:28:30 1992
|
||
***************
|
||
*** 165,170 ****
|
||
--- 165,171 ----
|
||
if (!(1 & this_page)) {
|
||
if (!(new_page = get_free_page()))
|
||
return -1;
|
||
+ ++current->rss;
|
||
read_swap_page(this_page>>1, (char *) new_page);
|
||
*to_page_table = this_page;
|
||
*from_page_table = new_page | (PAGE_DIRTY | 7);
|
||
***************
|
||
*** 316,321 ****
|
||
--- 317,323 ----
|
||
printk("Bad things happen: page error in do_wp_page\n\r");
|
||
do_exit(SIGSEGV);
|
||
}
|
||
+ ++current->min_flt;
|
||
un_wp_page((unsigned long *)
|
||
(((address>>10) & 0xffc) + (0xfffff000 &
|
||
*((unsigned long *) ((address>>20) &0xffc)))));
|
||
***************
|
||
*** 429,436 ****
|
||
return 0;
|
||
}
|
||
|
||
! void do_no_page(unsigned long error_code,
|
||
! unsigned long address, struct task_struct *tsk)
|
||
{
|
||
static unsigned int last_checked = 0;
|
||
int nr[4];
|
||
--- 431,438 ----
|
||
return 0;
|
||
}
|
||
|
||
! void do_no_page(unsigned long error_code, unsigned long address,
|
||
! struct task_struct *tsk)
|
||
{
|
||
static unsigned int last_checked = 0;
|
||
int nr[4];
|
||
***************
|
||
*** 439,445 ****
|
||
int block,i;
|
||
struct inode * inode;
|
||
|
||
! /* Trashing ? Make it interruptible, but don't penalize otherwise */
|
||
for (i = 0; i < CHECK_LAST_NR; i++)
|
||
if ((address & 0xfffff000) == last_pages[i]) {
|
||
current->counter = 0;
|
||
--- 441,447 ----
|
||
int block,i;
|
||
struct inode * inode;
|
||
|
||
! /* Thrashing ? Make it interruptible, but don't penalize otherwise */
|
||
for (i = 0; i < CHECK_LAST_NR; i++)
|
||
if ((address & 0xfffff000) == last_pages[i]) {
|
||
current->counter = 0;
|
||
***************
|
||
*** 457,462 ****
|
||
--- 459,465 ----
|
||
printk("Bad things happen: nonexistent page error in do_no_page\n\r");
|
||
do_exit(SIGSEGV);
|
||
}
|
||
+ ++tsk->rss;
|
||
page = *(unsigned long *) ((address >> 20) & 0xffc);
|
||
/* check the page directory: make a page dir entry if no such exists */
|
||
if (page & 1) {
|
||
***************
|
||
*** 464,469 ****
|
||
--- 467,473 ----
|
||
page += (address >> 10) & 0xffc;
|
||
tmp = *(unsigned long *) page;
|
||
if (tmp && !(1 & tmp)) {
|
||
+ ++tsk->maj_flt;
|
||
swap_in((unsigned long *) page);
|
||
return;
|
||
}
|
||
***************
|
||
*** 488,499 ****
|
||
block = 0;
|
||
}
|
||
if (!inode) {
|
||
get_empty_page(address);
|
||
return;
|
||
}
|
||
if (tsk == current)
|
||
! if (share_page(inode,tmp))
|
||
! return;
|
||
if (!(page = get_free_page()))
|
||
oom();
|
||
/* remember that 1 block is used for header */
|
||
--- 492,510 ----
|
||
block = 0;
|
||
}
|
||
if (!inode) {
|
||
+ ++tsk->min_flt;
|
||
+ if (tmp > tsk->brk && tsk == current &&
|
||
+ LIBRARY_OFFSET - tmp > tsk->rlim[RLIMIT_STACK].rlim_max)
|
||
+ do_exit(SIGSEGV);
|
||
get_empty_page(address);
|
||
return;
|
||
}
|
||
if (tsk == current)
|
||
! if (share_page(inode,tmp)) {
|
||
! ++tsk->min_flt;
|
||
! return;
|
||
! }
|
||
! ++tsk->maj_flt;
|
||
if (!(page = get_free_page()))
|
||
oom();
|
||
/* remember that 1 block is used for header */
|
||
***************
|
||
*** 533,541 ****
|
||
void show_mem(void)
|
||
{
|
||
int i,j,k,free=0,total=0;
|
||
! int shared=0;
|
||
unsigned long * pg_tbl;
|
||
|
||
printk("Mem-info:\n\r");
|
||
for(i=0 ; i<PAGING_PAGES ; i++) {
|
||
if (mem_map[i] == USED)
|
||
--- 544,560 ----
|
||
void show_mem(void)
|
||
{
|
||
int i,j,k,free=0,total=0;
|
||
! int shared = 0;
|
||
unsigned long * pg_tbl;
|
||
+ static int lock = 0;
|
||
|
||
+ cli();
|
||
+ if (lock) {
|
||
+ sti();
|
||
+ return;
|
||
+ }
|
||
+ lock = 1;
|
||
+ sti();
|
||
printk("Mem-info:\n\r");
|
||
for(i=0 ; i<PAGING_PAGES ; i++) {
|
||
if (mem_map[i] == USED)
|
||
***************
|
||
*** 576,581 ****
|
||
--- 595,601 ----
|
||
}
|
||
}
|
||
printk("Memory found: %d (%d)\n\r",free-shared,total);
|
||
+ lock = 0;
|
||
}
|
||
|
||
|
||
*** /dev/null Sat Apr 4 17:07:54 1992
|
||
--- linux/include/sys/dirent.h Fri Apr 3 20:00:04 1992
|
||
***************
|
||
*** 0 ****
|
||
--- 1,13 ----
|
||
+ #ifndef _SYS_DIRENT_H
|
||
+ #define _SYS_DIRENT_H
|
||
+
|
||
+ #include <limits.h>
|
||
+
|
||
+ struct dirent {
|
||
+ long d_ino;
|
||
+ off_t d_off;
|
||
+ unsigned short d_reclen;
|
||
+ char d_name[NAME_MAX+1];
|
||
+ };
|
||
+
|
||
+ #endif
|
||
*** ../0.95a/linux/include/unistd.h Wed Mar 4 12:56:06 1992
|
||
--- linux/include/unistd.h Fri Apr 3 19:55:41 1992
|
||
***************
|
||
*** 50,55 ****
|
||
--- 50,61 ----
|
||
#define _PC_VDISABLE 8
|
||
#define _PC_CHOWN_RESTRICTED 9
|
||
|
||
+ #if 0
|
||
+ /* XXX - <sys/stat.h> illegally <sys/types.h> already.
|
||
+ * The rest of these includes are also illegal (too much pollution).
|
||
+ */
|
||
+ #include <sys/types.h>
|
||
+ #endif
|
||
#include <sys/stat.h>
|
||
#include <sys/time.h>
|
||
#include <sys/times.h>
|
||
***************
|
||
*** 148,154 ****
|
||
--- 154,162 ----
|
||
#define __NR_uselib 86
|
||
#define __NR_swapon 87
|
||
#define __NR_reboot 88
|
||
+ #define __NR_readdir 89
|
||
|
||
+ /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
|
||
#define _syscall0(type,name) \
|
||
type name(void) \
|
||
{ \
|
||
***************
|
||
*** 206,224 ****
|
||
|
||
#endif /* __LIBRARY__ */
|
||
|
||
extern int errno;
|
||
|
||
! int access(const char * filename, mode_t mode);
|
||
int acct(const char * filename);
|
||
- int alarm(int sec);
|
||
int brk(void * end_data_segment);
|
||
void * sbrk(ptrdiff_t increment);
|
||
int chdir(const char * filename);
|
||
! int chmod(const char * filename, mode_t mode);
|
||
! int chown(const char * filename, uid_t owner, gid_t group);
|
||
int chroot(const char * filename);
|
||
int close(int fildes);
|
||
! int creat(const char * filename, mode_t mode);
|
||
int dup(int fildes);
|
||
int execve(const char * filename, char ** argv, char ** envp);
|
||
int execv(const char * pathname, char ** argv);
|
||
--- 214,239 ----
|
||
|
||
#endif /* __LIBRARY__ */
|
||
|
||
+ /* XXX - illegal. */
|
||
extern int errno;
|
||
|
||
! /* XXX - several non-POSIX functions here, and POSIX functions that are
|
||
! * supposed to be declared elsewhere. Non-promotion of short types in
|
||
! * prototypes may cause trouble. Arg names should be prefixed by
|
||
! * underscores.
|
||
! */
|
||
! int access(const char * filename, mode_t mode); /* XXX - short type */
|
||
int acct(const char * filename);
|
||
int brk(void * end_data_segment);
|
||
+ /* XXX - POSIX says unsigned alarm(unsigned sec) */
|
||
+ int alarm(int sec);
|
||
void * sbrk(ptrdiff_t increment);
|
||
int chdir(const char * filename);
|
||
! int chmod(const char * filename, mode_t mode); /* XXX - short type */
|
||
! int chown(const char * filename, uid_t owner, gid_t group); /* XXX - shorts */
|
||
int chroot(const char * filename);
|
||
int close(int fildes);
|
||
! int creat(const char * filename, mode_t mode); /* XXX - short type */
|
||
int dup(int fildes);
|
||
int execve(const char * filename, char ** argv, char ** envp);
|
||
int execv(const char * pathname, char ** argv);
|
||
***************
|
||
*** 229,255 ****
|
||
volatile void exit(int status);
|
||
volatile void _exit(int status);
|
||
int fcntl(int fildes, int cmd, ...);
|
||
! int fork(void);
|
||
! int getpid(void);
|
||
! int getuid(void);
|
||
! int geteuid(void);
|
||
! int getgid(void);
|
||
! int getegid(void);
|
||
int ioctl(int fildes, int cmd, ...);
|
||
int kill(pid_t pid, int signal);
|
||
int link(const char * filename1, const char * filename2);
|
||
! int lseek(int fildes, off_t offset, int origin);
|
||
! int mknod(const char * filename, mode_t mode, dev_t dev);
|
||
int mount(const char * specialfile, const char * dir, int rwflag);
|
||
int nice(int val);
|
||
int open(const char * filename, int flag, ...);
|
||
int pause(void);
|
||
int pipe(int * fildes);
|
||
int read(int fildes, char * buf, off_t count);
|
||
int setpgrp(void);
|
||
! int setpgid(pid_t pid,pid_t pgid);
|
||
! int setuid(uid_t uid);
|
||
! int setgid(gid_t gid);
|
||
void (*signal(int sig, void (*fn)(int)))(int);
|
||
int stat(const char * filename, struct stat * stat_buf);
|
||
int fstat(int fildes, struct stat * stat_buf);
|
||
--- 244,271 ----
|
||
volatile void exit(int status);
|
||
volatile void _exit(int status);
|
||
int fcntl(int fildes, int cmd, ...);
|
||
! pid_t fork(void);
|
||
! pid_t getpid(void);
|
||
! uid_t getuid(void);
|
||
! uid_t geteuid(void);
|
||
! gid_t getgid(void);
|
||
! gid_t getegid(void);
|
||
int ioctl(int fildes, int cmd, ...);
|
||
int kill(pid_t pid, int signal);
|
||
int link(const char * filename1, const char * filename2);
|
||
! off_t lseek(int fildes, off_t offset, int origin);
|
||
! int mknod(const char * filename, mode_t mode, dev_t dev); /* XXX - shorts */
|
||
int mount(const char * specialfile, const char * dir, int rwflag);
|
||
int nice(int val);
|
||
int open(const char * filename, int flag, ...);
|
||
int pause(void);
|
||
int pipe(int * fildes);
|
||
+ /* XXX**2 - POSIX says unsigned count */
|
||
int read(int fildes, char * buf, off_t count);
|
||
int setpgrp(void);
|
||
! int setpgid(pid_t pid,pid_t pgid); /* XXX - short types */
|
||
! int setuid(uid_t uid); /* XXX - short type */
|
||
! int setgid(gid_t gid); /* XXX - short type */
|
||
void (*signal(int sig, void (*fn)(int)))(int);
|
||
int stat(const char * filename, struct stat * stat_buf);
|
||
int fstat(int fildes, struct stat * stat_buf);
|
||
***************
|
||
*** 266,271 ****
|
||
--- 282,288 ----
|
||
int utime(const char * filename, struct utimbuf * times);
|
||
pid_t waitpid(pid_t pid,int * wait_stat,int options);
|
||
pid_t wait(int * wait_stat);
|
||
+ /* XXX**2 - POSIX says unsigned count */
|
||
int write(int fildes, const char * buf, off_t count);
|
||
int dup2(int oldfd, int newfd);
|
||
int getppid(void);
|
||
*** ../0.95a/linux/include/a.out.h Tue Sep 17 18:10:49 1991
|
||
--- linux/include/a.out.h Sat Apr 4 00:41:52 1992
|
||
***************
|
||
*** 1,10 ****
|
||
! #ifndef _A_OUT_H
|
||
! #define _A_OUT_H
|
||
|
||
#define __GNU_EXEC_MACROS__
|
||
|
||
! struct exec {
|
||
! unsigned long a_magic; /* Use macros N_MAGIC, etc for access */
|
||
unsigned a_text; /* length of text, in bytes */
|
||
unsigned a_data; /* length of data, in bytes */
|
||
unsigned a_bss; /* length of uninitialized data area for file, in bytes */
|
||
--- 1,13 ----
|
||
! #ifndef __A_OUT_GNU_H__
|
||
! #define __A_OUT_GNU_H__
|
||
|
||
#define __GNU_EXEC_MACROS__
|
||
|
||
! #ifndef __STRUCT_EXEC_OVERRIDE__
|
||
!
|
||
! struct exec
|
||
! {
|
||
! unsigned long a_info; /* Use macros N_MAGIC, etc for access */
|
||
unsigned a_text; /* length of text, in bytes */
|
||
unsigned a_data; /* length of data, in bytes */
|
||
unsigned a_bss; /* length of uninitialized data area for file, in bytes */
|
||
***************
|
||
*** 14,24 ****
|
||
unsigned a_drsize; /* length of relocation info for data, in bytes */
|
||
};
|
||
|
||
! #ifndef N_MAGIC
|
||
! #define N_MAGIC(exec) ((exec).a_magic)
|
||
#endif
|
||
|
||
! #ifndef OMAGIC
|
||
/* Code indicating object file or impure executable. */
|
||
#define OMAGIC 0407
|
||
/* Code indicating pure executable. */
|
||
--- 17,70 ----
|
||
unsigned a_drsize; /* length of relocation info for data, in bytes */
|
||
};
|
||
|
||
! #endif /* __STRUCT_EXEC_OVERRIDE__ */
|
||
!
|
||
! /* these go in the N_MACHTYPE field */
|
||
! enum machine_type {
|
||
! #if defined (M_OLDSUN2)
|
||
! M__OLDSUN2 = M_OLDSUN2,
|
||
! #else
|
||
! M_OLDSUN2 = 0,
|
||
#endif
|
||
+ #if defined (M_68010)
|
||
+ M__68010 = M_68010,
|
||
+ #else
|
||
+ M_68010 = 1,
|
||
+ #endif
|
||
+ #if defined (M_68020)
|
||
+ M__68020 = M_68020,
|
||
+ #else
|
||
+ M_68020 = 2,
|
||
+ #endif
|
||
+ #if defined (M_SPARC)
|
||
+ M__SPARC = M_SPARC,
|
||
+ #else
|
||
+ M_SPARC = 3,
|
||
+ #endif
|
||
+ /* skip a bunch so we don't run into any of sun's numbers */
|
||
+ M_386 = 100,
|
||
+ };
|
||
|
||
! #if !defined (N_MAGIC)
|
||
! #define N_MAGIC(exec) ((exec).a_info & 0xffff)
|
||
! #endif
|
||
! #define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
|
||
! #define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
|
||
! #define N_SET_INFO(exec, magic, type, flags) \
|
||
! ((exec).a_info = ((magic) & 0xffff) \
|
||
! | (((int)(type) & 0xff) << 16) \
|
||
! | (((flags) & 0xff) << 24))
|
||
! #define N_SET_MAGIC(exec, magic) \
|
||
! ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
|
||
!
|
||
! #define N_SET_MACHTYPE(exec, machtype) \
|
||
! ((exec).a_info = \
|
||
! ((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
|
||
!
|
||
! #define N_SET_FLAGS(exec, flags) \
|
||
! ((exec).a_info = \
|
||
! ((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
|
||
!
|
||
/* Code indicating object file or impure executable. */
|
||
#define OMAGIC 0407
|
||
/* Code indicating pure executable. */
|
||
***************
|
||
*** 25,33 ****
|
||
#define NMAGIC 0410
|
||
/* Code indicating demand-paged executable. */
|
||
#define ZMAGIC 0413
|
||
- #endif /* not OMAGIC */
|
||
|
||
! #ifndef N_BADMAG
|
||
#define N_BADMAG(x) \
|
||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||
&& N_MAGIC(x) != ZMAGIC)
|
||
--- 71,78 ----
|
||
#define NMAGIC 0410
|
||
/* Code indicating demand-paged executable. */
|
||
#define ZMAGIC 0413
|
||
|
||
! #if !defined (N_BADMAG)
|
||
#define N_BADMAG(x) \
|
||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||
&& N_MAGIC(x) != ZMAGIC)
|
||
***************
|
||
*** 37,71 ****
|
||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||
&& N_MAGIC(x) != ZMAGIC)
|
||
|
||
! #define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec))
|
||
|
||
! #ifndef N_TXTOFF
|
||
#define N_TXTOFF(x) \
|
||
(N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
|
||
#endif
|
||
|
||
! #ifndef N_DATOFF
|
||
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
|
||
#endif
|
||
|
||
! #ifndef N_TRELOFF
|
||
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
|
||
#endif
|
||
|
||
! #ifndef N_DRELOFF
|
||
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
|
||
#endif
|
||
|
||
! #ifndef N_SYMOFF
|
||
#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
|
||
#endif
|
||
|
||
! #ifndef N_STROFF
|
||
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
|
||
#endif
|
||
|
||
/* Address of text segment in memory after it is loaded. */
|
||
! #ifndef N_TXTADDR
|
||
#define N_TXTADDR(x) 0
|
||
#endif
|
||
|
||
--- 82,116 ----
|
||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||
&& N_MAGIC(x) != ZMAGIC)
|
||
|
||
! #define _N_HDROFF(x) (1024 - sizeof (struct exec))
|
||
|
||
! #if !defined (N_TXTOFF)
|
||
#define N_TXTOFF(x) \
|
||
(N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec))
|
||
#endif
|
||
|
||
! #if !defined (N_DATOFF)
|
||
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
|
||
#endif
|
||
|
||
! #if !defined (N_TRELOFF)
|
||
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
|
||
#endif
|
||
|
||
! #if !defined (N_DRELOFF)
|
||
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
|
||
#endif
|
||
|
||
! #if !defined (N_SYMOFF)
|
||
#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
|
||
#endif
|
||
|
||
! #if !defined (N_STROFF)
|
||
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
|
||
#endif
|
||
|
||
/* Address of text segment in memory after it is loaded. */
|
||
! #if !defined (N_TXTADDR)
|
||
#define N_TXTADDR(x) 0
|
||
#endif
|
||
|
||
***************
|
||
*** 73,83 ****
|
||
Note that it is up to you to define SEGMENT_SIZE
|
||
on machines not listed here. */
|
||
#if defined(vax) || defined(hp300) || defined(pyr)
|
||
! #define SEGMENT_SIZE PAGE_SIZE
|
||
#endif
|
||
- #ifdef hp300
|
||
- #define PAGE_SIZE 4096
|
||
- #endif
|
||
#ifdef sony
|
||
#define SEGMENT_SIZE 0x2000
|
||
#endif /* Sony. */
|
||
--- 118,125 ----
|
||
Note that it is up to you to define SEGMENT_SIZE
|
||
on machines not listed here. */
|
||
#if defined(vax) || defined(hp300) || defined(pyr)
|
||
! #define SEGMENT_SIZE page_size
|
||
#endif
|
||
#ifdef sony
|
||
#define SEGMENT_SIZE 0x2000
|
||
#endif /* Sony. */
|
||
***************
|
||
*** 89,96 ****
|
||
#define SEGMENT_SIZE PAGE_SIZE
|
||
#endif
|
||
|
||
! #define PAGE_SIZE 4096
|
||
! #define SEGMENT_SIZE 1024
|
||
|
||
#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
|
||
|
||
--- 131,140 ----
|
||
#define SEGMENT_SIZE PAGE_SIZE
|
||
#endif
|
||
|
||
! #ifdef linux
|
||
! #define PAGE_SIZE 4096
|
||
! #define SEGMENT_SIZE 1024
|
||
! #endif
|
||
|
||
#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
|
||
|
||
***************
|
||
*** 103,113 ****
|
||
#endif
|
||
|
||
/* Address of bss segment in memory after it is loaded. */
|
||
! #ifndef N_BSSADDR
|
||
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
|
||
#endif
|
||
!
|
||
! #ifndef N_NLIST_DECLARED
|
||
struct nlist {
|
||
union {
|
||
char *n_name;
|
||
--- 147,157 ----
|
||
#endif
|
||
|
||
/* Address of bss segment in memory after it is loaded. */
|
||
! #if !defined (N_BSSADDR)
|
||
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
|
||
#endif
|
||
!
|
||
! #if !defined (N_NLIST_DECLARED)
|
||
struct nlist {
|
||
union {
|
||
char *n_name;
|
||
***************
|
||
*** 119,155 ****
|
||
short n_desc;
|
||
unsigned long n_value;
|
||
};
|
||
! #endif
|
||
|
||
! #ifndef N_UNDF
|
||
#define N_UNDF 0
|
||
#endif
|
||
! #ifndef N_ABS
|
||
#define N_ABS 2
|
||
#endif
|
||
! #ifndef N_TEXT
|
||
#define N_TEXT 4
|
||
#endif
|
||
! #ifndef N_DATA
|
||
#define N_DATA 6
|
||
#endif
|
||
! #ifndef N_BSS
|
||
#define N_BSS 8
|
||
#endif
|
||
! #ifndef N_COMM
|
||
! #define N_COMM 18
|
||
! #endif
|
||
! #ifndef N_FN
|
||
#define N_FN 15
|
||
#endif
|
||
|
||
! #ifndef N_EXT
|
||
#define N_EXT 1
|
||
#endif
|
||
! #ifndef N_TYPE
|
||
#define N_TYPE 036
|
||
#endif
|
||
! #ifndef N_STAB
|
||
#define N_STAB 0340
|
||
#endif
|
||
|
||
--- 163,196 ----
|
||
short n_desc;
|
||
unsigned long n_value;
|
||
};
|
||
! #endif /* no N_NLIST_DECLARED. */
|
||
|
||
! #if !defined (N_UNDF)
|
||
#define N_UNDF 0
|
||
#endif
|
||
! #if !defined (N_ABS)
|
||
#define N_ABS 2
|
||
#endif
|
||
! #if !defined (N_TEXT)
|
||
#define N_TEXT 4
|
||
#endif
|
||
! #if !defined (N_DATA)
|
||
#define N_DATA 6
|
||
#endif
|
||
! #if !defined (N_BSS)
|
||
#define N_BSS 8
|
||
#endif
|
||
! #if !defined (N_FN)
|
||
#define N_FN 15
|
||
#endif
|
||
|
||
! #if !defined (N_EXT)
|
||
#define N_EXT 1
|
||
#endif
|
||
! #if !defined (N_TYPE)
|
||
#define N_TYPE 036
|
||
#endif
|
||
! #if !defined (N_STAB)
|
||
#define N_STAB 0340
|
||
#endif
|
||
|
||
***************
|
||
*** 182,190 ****
|
||
|
||
/* This is output from LD. */
|
||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||
!
|
||
! #ifndef N_RELOCATION_INFO_DECLARED
|
||
!
|
||
/* This structure describes a single relocation to be performed.
|
||
The text-relocation section of the file is a vector of these structures,
|
||
all of which apply to the text section.
|
||
--- 223,230 ----
|
||
|
||
/* This is output from LD. */
|
||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||
!
|
||
! #if !defined (N_RELOCATION_INFO_DECLARED)
|
||
/* This structure describes a single relocation to be performed.
|
||
The text-relocation section of the file is a vector of these structures,
|
||
all of which apply to the text section.
|
||
***************
|
||
*** 212,218 ****
|
||
--- 252,264 ----
|
||
unsigned int r_extern:1;
|
||
/* Four bits that aren't used, but when writing an object file
|
||
it is desirable to clear them. */
|
||
+ #ifdef NS32K
|
||
+ unsigned r_bsr:1;
|
||
+ unsigned r_disp:1;
|
||
+ unsigned r_pad:2;
|
||
+ #else
|
||
unsigned int r_pad:4;
|
||
+ #endif
|
||
};
|
||
#endif /* no N_RELOCATION_INFO_DECLARED. */
|
||
|
||
*** ../0.95a/linux/include/linux/hdreg.h Sat Feb 1 16:04:35 1992
|
||
--- linux/include/linux/hdreg.h Tue Mar 31 20:50:13 1992
|
||
***************
|
||
*** 64,67 ****
|
||
--- 64,73 ----
|
||
unsigned int nr_sects; /* nr of sectors in partition */
|
||
};
|
||
|
||
+ #define HDIO_REQ 0x301
|
||
+ struct hd_geometry {
|
||
+ unsigned char heads;
|
||
+ unsigned char sectors;
|
||
+ unsigned short cylinders;
|
||
+ };
|
||
#endif
|
||
*** ../0.95a/linux/include/linux/sched.h Sat Mar 14 14:21:14 1992
|
||
--- linux/include/linux/sched.h Wed Apr 1 01:37:45 1992
|
||
***************
|
||
*** 129,137 ****
|
||
--- 129,141 ----
|
||
unsigned short gid,egid,sgid;
|
||
unsigned long timeout,alarm;
|
||
long utime,stime,cutime,cstime,start_time;
|
||
+ unsigned long min_flt, maj_flt;
|
||
+ unsigned long cmin_flt, cmaj_flt;
|
||
struct rlimit rlim[RLIM_NLIMITS];
|
||
unsigned int flags; /* per process flags, defined below */
|
||
unsigned short used_math;
|
||
+ unsigned short rss; /* number of resident pages */
|
||
+ char comm[8];
|
||
/* file system info */
|
||
int link_count;
|
||
int tty; /* -1 if no tty, so it must be signed */
|
||
***************
|
||
*** 171,181 ****
|
||
--- 175,188 ----
|
||
/* proc links*/ &init_task.task,NULL,NULL,NULL,NULL, \
|
||
/* uid etc */ 0,0,0,0,0,0, \
|
||
/* timeout */ 0,0,0,0,0,0,0, \
|
||
+ /* min_flt */ 0,0,0,0, \
|
||
/* rlimits */ { {0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}, \
|
||
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}, \
|
||
{0x7fffffff, 0x7fffffff}, {0x7fffffff, 0x7fffffff}}, \
|
||
/* flags */ 0, \
|
||
/* math */ 0, \
|
||
+ /* rss */ 2, \
|
||
+ /* comm */ "swapper", \
|
||
/* fs info */ 0,-1,0022,NULL,NULL,NULL,NULL,0, \
|
||
/* filp */ {NULL,}, \
|
||
{ \
|
||
*** ../0.95a/linux/include/linux/sys.h Thu Feb 27 18:24:26 1992
|
||
--- linux/include/linux/sys.h Fri Apr 3 19:56:16 1992
|
||
***************
|
||
*** 91,96 ****
|
||
--- 91,97 ----
|
||
extern int sys_uselib();
|
||
extern int sys_swapon();
|
||
extern int sys_reboot();
|
||
+ extern int sys_readdir();
|
||
|
||
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
|
||
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
|
||
***************
|
||
*** 107,113 ****
|
||
sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname,
|
||
sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday,
|
||
sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink,
|
||
! sys_lstat, sys_readlink, sys_uselib, sys_swapon, sys_reboot };
|
||
|
||
/* So we don't have to do any more manual updating.... */
|
||
int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr);
|
||
--- 108,114 ----
|
||
sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname,
|
||
sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday,
|
||
sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink,
|
||
! sys_lstat, sys_readlink, sys_uselib, sys_swapon, sys_reboot, sys_readdir };
|
||
|
||
/* So we don't have to do any more manual updating.... */
|
||
int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr);
|
||
*** ../0.95a/linux/include/linux/tty.h Sun Mar 15 02:43:54 1992
|
||
--- linux/include/linux/tty.h Thu Mar 19 21:16:26 1992
|
||
***************
|
||
*** 68,83 ****
|
||
struct tty_queue *secondary;
|
||
};
|
||
|
||
! #define TTY_WRITE(tty) \
|
||
do { \
|
||
cli(); \
|
||
! if (!(tty)->busy) { \
|
||
! (tty)->busy = 1; \
|
||
sti(); \
|
||
(tty)->write((tty)); \
|
||
! (tty)->busy = 0; \
|
||
! } else \
|
||
sti(); \
|
||
} while (0)
|
||
|
||
extern struct tty_struct tty_table[];
|
||
--- 68,105 ----
|
||
struct tty_queue *secondary;
|
||
};
|
||
|
||
! /*
|
||
! * so that interrupts won't be able to mess up the
|
||
! * queues, copy_to_cooked must be atomic with repect
|
||
! * to itself, as must tty->write.
|
||
! */
|
||
! #define TTY_WRITE_BUSY 1
|
||
! #define TTY_READ_BUSY 2
|
||
!
|
||
! #define TTY_WRITE_FLUSH(tty) \
|
||
do { \
|
||
cli(); \
|
||
! if (!EMPTY((tty)->write_q) && !(TTY_WRITE_BUSY & (tty)->busy)) { \
|
||
! (tty)->busy |= TTY_WRITE_BUSY; \
|
||
sti(); \
|
||
(tty)->write((tty)); \
|
||
! cli(); \
|
||
! (tty)->busy &= ~TTY_WRITE_BUSY; \
|
||
! } \
|
||
! sti(); \
|
||
! } while (0)
|
||
!
|
||
! #define TTY_READ_FLUSH(tty) \
|
||
! do { \
|
||
! cli(); \
|
||
! if (!EMPTY((tty)->read_q) && !(TTY_READ_BUSY & (tty)->busy)) { \
|
||
! (tty)->busy |= TTY_READ_BUSY; \
|
||
sti(); \
|
||
+ copy_to_cooked((tty)); \
|
||
+ cli(); \
|
||
+ (tty)->busy &= ~TTY_READ_BUSY; \
|
||
+ } \
|
||
+ sti(); \
|
||
} while (0)
|
||
|
||
extern struct tty_struct tty_table[];
|
||
*** ../0.95a/linux/include/linux/fs.h Fri Mar 13 18:55:15 1992
|
||
--- linux/include/linux/fs.h Fri Apr 3 20:51:17 1992
|
||
***************
|
||
*** 7,12 ****
|
||
--- 7,13 ----
|
||
#define _FS_H
|
||
|
||
#include <sys/types.h>
|
||
+ #include <sys/dirent.h>
|
||
|
||
/* devices are as follows: (same as minix, so we can use the minix
|
||
* file system. These are major numbers.)
|
||
***************
|
||
*** 134,139 ****
|
||
--- 135,142 ----
|
||
unsigned char s_lock;
|
||
unsigned char s_rd_only;
|
||
unsigned char s_dirt;
|
||
+ /* TUBE */
|
||
+ struct super_operations *s_op;
|
||
};
|
||
|
||
struct file_operations {
|
||
***************
|
||
*** 140,145 ****
|
||
--- 143,149 ----
|
||
int (*lseek) (struct inode *, struct file *, off_t, int);
|
||
int (*read) (struct inode *, struct file *, char *, int);
|
||
int (*write) (struct inode *, struct file *, char *, int);
|
||
+ int (*readdir) (struct inode *, struct file *, struct dirent *);
|
||
};
|
||
|
||
struct inode_operations {
|
||
***************
|
||
*** 156,163 ****
|
||
--- 160,184 ----
|
||
int (*open) (struct inode *, struct file *);
|
||
void (*release) (struct inode *, struct file *);
|
||
struct inode * (*follow_link) (struct inode *, struct inode *);
|
||
+ int (*bmap) (struct inode *,int);
|
||
+ void (*truncate) (struct inode *);
|
||
+ /* added by entropy */
|
||
+ void (*write_inode)(struct inode *inode);
|
||
+ void (*put_inode)(struct inode *inode);
|
||
};
|
||
|
||
+ struct super_operations {
|
||
+ void (*read_inode)(struct inode *inode);
|
||
+ void (*put_super)(struct super_block *sb);
|
||
+ };
|
||
+
|
||
+ struct file_system_type {
|
||
+ struct super_block *(*read_super)(struct super_block *sb,void *mode);
|
||
+ char *name;
|
||
+ };
|
||
+
|
||
+ extern struct file_system_type *get_fs_type(char *name);
|
||
+
|
||
extern struct inode inode_table[NR_INODE];
|
||
extern struct file file_table[NR_FILE];
|
||
extern struct super_block super_block[NR_SUPER];
|
||
***************
|
||
*** 175,180 ****
|
||
--- 196,204 ----
|
||
extern int bmap(struct inode * inode,int block);
|
||
extern struct inode * namei(const char * pathname);
|
||
extern struct inode * lnamei(const char * pathname);
|
||
+ extern int permission(struct inode * inode,int mask);
|
||
+ extern struct inode * _namei(const char * filename, struct inode * base,
|
||
+ int follow_links);
|
||
extern int open_namei(const char * pathname, int flag, int mode,
|
||
struct inode ** res_inode);
|
||
extern void iput(struct inode * inode);
|
||
***************
|
||
*** 195,207 ****
|
||
extern int ROOT_DEV;
|
||
|
||
extern void mount_root(void);
|
||
|
||
- extern int minix_file_read(struct inode *, struct file *, char *, int);
|
||
extern int pipe_read(struct inode *, struct file *, char *, int);
|
||
extern int char_read(struct inode *, struct file *, char *, int);
|
||
extern int block_read(struct inode *, struct file *, char *, int);
|
||
|
||
- extern int minix_file_write(struct inode *, struct file *, char *, int);
|
||
extern int pipe_write(struct inode *, struct file *, char *, int);
|
||
extern int char_write(struct inode *, struct file *, char *, int);
|
||
extern int block_write(struct inode *, struct file *, char *, int);
|
||
--- 219,231 ----
|
||
extern int ROOT_DEV;
|
||
|
||
extern void mount_root(void);
|
||
+ extern void lock_super(struct super_block * sb);
|
||
+ extern void free_super(struct super_block * sb);
|
||
|
||
extern int pipe_read(struct inode *, struct file *, char *, int);
|
||
extern int char_read(struct inode *, struct file *, char *, int);
|
||
extern int block_read(struct inode *, struct file *, char *, int);
|
||
|
||
extern int pipe_write(struct inode *, struct file *, char *, int);
|
||
extern int char_write(struct inode *, struct file *, char *, int);
|
||
extern int block_write(struct inode *, struct file *, char *, int);
|
||
*** ../0.95a/linux/include/linux/minix_fs.h Mon Mar 2 23:52:27 1992
|
||
--- linux/include/linux/minix_fs.h Fri Apr 3 20:52:29 1992
|
||
***************
|
||
*** 68,76 ****
|
||
--- 68,85 ----
|
||
extern int minix_create_block(struct inode * inode, int block);
|
||
extern int minix_bmap(struct inode * inode,int block);
|
||
|
||
+ extern void minix_truncate(struct inode * inode);
|
||
+ extern void minix_put_super(struct super_block *sb);
|
||
+ extern struct super_block *minix_read_super(struct super_block *s,void *data);
|
||
+ extern void minix_read_inode(struct inode * inode);
|
||
+ extern void minix_write_inode(struct inode * inode);
|
||
+
|
||
extern int minix_lseek(struct inode * inode, struct file * filp, off_t offset, int origin);
|
||
extern int minix_read(struct inode * inode, struct file * filp, char * buf, int count);
|
||
extern int minix_write(struct inode * inode, struct file * filp, char * buf, int count);
|
||
+ extern int minix_readdir(struct inode * inode, struct file * filp, struct dirent * dirent);
|
||
+ extern int minix_file_read(struct inode *, struct file *, char *, int);
|
||
+ extern int minix_file_write(struct inode *, struct file *, char *, int);
|
||
|
||
extern struct inode_operations minix_inode_operations;
|
||
extern struct file_operations minix_file_operations;
|
||
*** ../0.95a/linux/include/asm/io.h Fri Mar 13 00:44:31 1992
|
||
--- linux/include/asm/io.h Wed Apr 1 02:12:14 1992
|
||
***************
|
||
*** 1,10 ****
|
||
! static void inline outb(char value, unsigned short port)
|
||
{
|
||
__asm__ volatile ("outb %0,%1"
|
||
::"a" ((char) value),"d" ((unsigned short) port));
|
||
}
|
||
|
||
! static void inline outb_p(char value, unsigned short port)
|
||
{
|
||
__asm__ volatile ("outb %0,%1\n"
|
||
"\tjmp 1f\n"
|
||
--- 1,13 ----
|
||
! #ifndef _ASM_IO_H
|
||
! #define _ASM_IO_H
|
||
!
|
||
! extern void inline outb(char value, unsigned short port)
|
||
{
|
||
__asm__ volatile ("outb %0,%1"
|
||
::"a" ((char) value),"d" ((unsigned short) port));
|
||
}
|
||
|
||
! extern void inline outb_p(char value, unsigned short port)
|
||
{
|
||
__asm__ volatile ("outb %0,%1\n"
|
||
"\tjmp 1f\n"
|
||
***************
|
||
*** 15,21 ****
|
||
::"a" ((char) value),"d" ((unsigned short) port));
|
||
}
|
||
|
||
! static unsigned char inline inb(unsigned short port)
|
||
{
|
||
unsigned char _v;
|
||
__asm__ volatile ("inb %1,%0"
|
||
--- 18,24 ----
|
||
::"a" ((char) value),"d" ((unsigned short) port));
|
||
}
|
||
|
||
! extern unsigned char inline inb(unsigned short port)
|
||
{
|
||
unsigned char _v;
|
||
__asm__ volatile ("inb %1,%0"
|
||
***************
|
||
*** 23,29 ****
|
||
return _v;
|
||
}
|
||
|
||
! static unsigned char inb_p(unsigned short port)
|
||
{
|
||
unsigned char _v;
|
||
__asm__ volatile ("inb %1,%0\n"
|
||
--- 26,32 ----
|
||
return _v;
|
||
}
|
||
|
||
! extern unsigned char inline inb_p(unsigned short port)
|
||
{
|
||
unsigned char _v;
|
||
__asm__ volatile ("inb %1,%0\n"
|
||
***************
|
||
*** 35,37 ****
|
||
--- 38,42 ----
|
||
:"=a" (_v):"d" ((unsigned short) port));
|
||
return _v;
|
||
}
|
||
+
|
||
+ #endif
|
||
*** /dev/null Sat Apr 4 17:07:54 1992
|
||
--- linux/include/limits.h Fri Apr 3 20:08:43 1992
|
||
***************
|
||
*** 0 ****
|
||
--- 1,62 ----
|
||
+ #ifndef _LIMITS_H
|
||
+ #define _LIMITS_H
|
||
+
|
||
+ #define RAND_MAX 0x7ffffffd /* don't ask - see rand.c */
|
||
+
|
||
+ #define CHAR_BIT 8
|
||
+ #define MB_LEN_MAX 1
|
||
+
|
||
+ #define SCHAR_MIN (-128)
|
||
+ #define SCHAR_MAX 127
|
||
+
|
||
+ #define UCHAR_MAX 255U
|
||
+
|
||
+ #ifdef __CHAR_UNSIGNED__
|
||
+ #define CHAR_MIN 0
|
||
+ #define CHAR_MAX UCHAR_MAX
|
||
+ #else
|
||
+ #define CHAR_MIN SCHAR_MIN
|
||
+ #define CHAR_MAX SCHAR_MAX
|
||
+ #endif
|
||
+
|
||
+ #define SHRT_MIN (-32768)
|
||
+ #define SHRT_MAX 32767
|
||
+
|
||
+ #define USHRT_MAX 65535U
|
||
+
|
||
+ #define INT_MIN (-2147483648)
|
||
+ #define INT_MAX 2147483647
|
||
+
|
||
+ #define UINT_MAX 4294967295U
|
||
+
|
||
+ #define LONG_MIN (-2147483648)
|
||
+ #define LONG_MAX 2147483647
|
||
+
|
||
+ #define ULONG_MAX 4294967295U
|
||
+
|
||
+ /*
|
||
+ * Why are these different from the section below? -- TYT
|
||
+ */
|
||
+ #define _POSIX_ARG_MAX 40960 /* exec() may have 40K worth of args */
|
||
+ #define _POSIX_CHILD_MAX 6 /* a process may have 6 children */
|
||
+ #define _POSIX_LINK_MAX 8 /* a file may have 8 links */
|
||
+ #define _POSIX_MAX_CANON 255 /* size of the canonical input queue */
|
||
+ #define _POSIX_MAX_INPUT 255 /* you can type 255 chars ahead */
|
||
+ #define _POSIX_NAME_MAX 14 /* a file name may have 14 chars */
|
||
+ #define _POSIX_NGROUPS_MAX 32 /* supplementary group IDs are optional */
|
||
+ #define _POSIX_OPEN_MAX 16 /* a process may have 16 files open */
|
||
+ #define _POSIX_PATH_MAX 255 /* a pathname may contain 255 chars */
|
||
+ #define _POSIX_PIPE_BUF 512 /* pipes writes of 512 bytes must be atomic */
|
||
+
|
||
+ #define NGROUPS_MAX 32 /* supplemental group IDs are available */
|
||
+ #define ARG_MAX 40960 /* # bytes of args + environ for exec() */
|
||
+ #define CHILD_MAX 999 /* no limit :-) */
|
||
+ #define OPEN_MAX 20 /* # open files a process may have */
|
||
+ #define LINK_MAX 127 /* # links a file may have */
|
||
+ #define MAX_CANON 255 /* size of the canonical input queue */
|
||
+ #define MAX_INPUT 255 /* size of the type-ahead buffer */
|
||
+ #define NAME_MAX 255 /* # chars in a file name */
|
||
+ #define PATH_MAX 1024 /* # chars in a path name */
|
||
+ #define PIPE_BUF 4095 /* # bytes in atomic write to a pipe */
|
||
+
|
||
+ #endif
|