Huan 5 years ago
commit 7eea208b33

Binary file not shown.

@ -0,0 +1,595 @@
00000000 T pg_dir
00000000 T startup_32
0000005a t check_x87
00000073 t setup_idt
00000090 t rp_sidt
000000a3 t setup_gdt
00001000 t pg0
00002000 t pg1
00003000 t pg2
00004000 t pg3
00005000 T tmp_floppy_area
00005412 t L6
00005414 t int_msg
00005428 t ignore_int
00005450 t setup_paging
000054ae t idt_descr
000054b6 t gdt_descr
000054c0 T idt
00005cc0 T gdt
000064c0 T fork
000064ef T pause
0000651e T setup
00006555 T sync
00006584 t time_init
00006799 T main
0000690c t printf
0000695b T init
00006bd3 T print_nr
00006c04 T show_task
00006c89 T show_stat
00006ccf T math_state_restore
00006d2d T schedule
00006edf T sys_pause
00006ef5 T sleep_on
00006f54 T interruptible_sleep_on
0000700f T ticks_to_floppy_on
000070da T floppy_on
00007109 T floppy_off
00007119 T do_floppy_timer
00007311 T do_timer
00007400 T sys_alarm
0000747f T sys_getpid
0000748b T sys_getppid
00007497 T sys_getuid
000074a6 T sys_geteuid
000074b6 T sys_getgid
000074c6 T sys_getegid
000074d5 T sys_nice
00007500 T sched_init
00007690 t bad_sys_call
00007698 t reschedule
000076a4 T system_call
000076df t ret_from_sys_call
00007728 T coprocessor_error
0000774a T device_not_available
00007784 T timer_interrupt
000077bc T sys_execve
000077cc T sys_execve2
000077dc T sys_fork
000077f4 T sys_clone
0000780c T hd_interrupt
00007848 T floppy_interrupt
0000787e T parallel_interrupt
00007885 t _get_base
000078b7 t die
00007a99 T do_double_fault
00007abc T do_general_protection
00007adf T do_divide_error
00007b02 T do_int3
00007bca T do_nmi
00007bed T do_debug
00007c10 T do_overflow
00007c33 T do_bounds
00007c56 T do_invalid_op
00007c79 T do_device_not_available
00007c9c T do_coprocessor_segment_overrun
00007cbf T do_invalid_TSS
00007ce2 T do_segment_not_present
00007d05 T do_stack_segment
00007d28 T do_coprocessor_error
00007d5c T do_reserved
00007d7f T trap_init
00008063 T divide_error
00008068 t no_error_code
00008098 T debug
0000809f T nmi
000080a6 T int3
000080ad T overflow
000080b4 T bounds
000080bb T invalid_op
000080c2 T coprocessor_segment_overrun
000080c9 T reserved
000080d0 T irq13
000080e5 T double_fault
000080ea t error_code
0000811c T invalid_TSS
00008123 T segment_not_present
0000812a T stack_segment
00008131 T general_protection
00008138 t _get_base
0000816a T verify_area
000081d1 T copy_mem
0000832b T copy_process
000087d8 T find_empty_process
0000886c T copy_mem_clone
00008aae T copy_process_clone
00008f70 T panic
00008fab T printk
00008ffc t skip_atoi
00009057 t number
000092c8 T vsprintf
00009754 t get_fs_long
0000976a t put_fs_byte
00009782 t put_fs_long
0000978e T sys_ftime
00009794 T sys_break
0000979a T sys_ptrace
000097a0 T sys_stty
000097a6 T sys_gtty
000097ac T sys_rename
000097b2 T sys_prof
000097b8 T sys_setregid
00009871 T sys_setgid
00009908 T sys_acct
0000990e T sys_phys
00009914 T sys_lock
0000991a T sys_mpx
00009920 T sys_ulimit
00009926 T sys_time
00009982 T sys_setreuid
00009a64 T sys_setuid
00009af9 T sys_stime
00009b4f T sys_times
00009bef T sys_brk
00009c31 T sys_setpgid
00009d0a T sys_getpgrp
00009d16 T sys_setsid
00009d90 T sys_getgroups
00009d96 T sys_setgroups
00009d9c T sys_uname
00009e05 T sys_sethostname
00009e0b T sys_getrlimit
00009e11 T sys_setrlimit
00009e17 T sys_getrusage
00009e1d T sys_gettimeofday
00009e23 T sys_settimeofday
00009e29 T sys_umask
00009e5c t _get_base
00009e8e t put_fs_long
00009e9a T release
00009efe t send_sig
00009f7d t kill_session
00009fd7 T sys_kill
0000a187 t tell_father
0000a211 T do_exit
0000a445 T sys_exit
0000a45e T sys_waitpid
0000a684 t get_fs_byte
0000a692 t put_fs_byte
0000a6aa t put_fs_long
0000a6b6 T sys_sgetmask
0000a6c2 T sys_ssetmask
0000a6ee T sys_sigpending
0000a6f4 T sys_sigsuspend
0000a6fa t save_old
0000a74d t get_new
0000a78d T sys_signal
0000a811 T sys_sigaction
0000a91b T do_signal
0000ab07 T sys_sleep
0000ab40 T kernel_mktime
0000ac85 t oom
0000aca4 T get_free_page
0000ace0 T free_page
0000ad4f T free_page_tables
0000ae4e T copy_page_tables
0000afcf T copy_page_tables_clone
0000b14b T copy_page_tables_fixed
0000b2ed T put_page
0000b3d9 T un_wp_page
0000b491 T do_wp_page
0000b51c T get_empty_page
0000b55c t try_to_share
0000b6ee t share_page
0000b7a2 T do_no_page
0000b937 T do_no_page_my
0000ba99 T mem_init
0000bb0d T calc_mem
0000bc02 T page_fault
0000bc39 t get_fs_long
0000bc4f T sys_ustat
0000bc55 T sys_utime
0000bd02 T sys_access
0000bdde T sys_chdir
0000be52 T sys_chroot
0000bec6 T sys_chmod
0000bf60 T sys_chown
0000bfdb T sys_open
0000c27e T sys_creat
0000c2a1 T sys_close
0000c370 T sys_lseek
0000c487 T sys_read
0000c67a T sys_write
0000c828 t lock_inode
0000c855 t unlock_inode
0000c873 T invalidate_inodes
0000c8e2 T sync_inodes
0000c939 t _bmap
0000cd25 T bmap
0000cd48 T create_block
0000cd6b T iput
0000ceda T get_empty_inode
0000d02f T get_pipe_inode
0000d0a4 T iget
0000d269 t read_inode
0000d49f T sys_sync
0000d502 T sync_dev
0000d5fb T invalidate_buffers
0000d66d T check_disk_change
0000d717 t remove_from_queues
0000d80e t insert_into_queues
0000d8d3 t find_buffer
0000d93b T get_hash_table
0000d9bd T getblk
0000db5b T brelse
0000dba4 T bread
0000dc29 T bread_page
0000dd4b T breada
0000de40 T buffer_init
0000df6f t lock_super
0000df9c t free_super
0000dfe1 T get_super
0000e050 T put_super
0000e123 t read_super
0000e466 T sys_umount
0000e5c7 T sys_mount
0000e738 T mount_root
0000e946 t get_fs_byte
0000e954 t put_fs_byte
0000e96c T block_write
0000eabe T block_read
0000ebe9 t get_fs_byte
0000ebf7 t put_fs_byte
0000ec0f t rw_ttyx
0000ec57 t rw_tty
0000eca7 t rw_ram
0000ecad t rw_mem
0000ecb3 t rw_kmem
0000ecb9 t rw_port
0000ed53 t rw_memory
0000ee29 T rw_char
0000ee93 t get_fs_byte
0000eea1 t put_fs_byte
0000eeb9 T file_read
0000f064 T file_write
0000f25e T sys_getdents
0000f401 T sys_mmap
0000f407 T sys_munmap
0000f40d t put_fs_byte
0000f425 t cp_stat
0000f4fc T sys_stat
0000f546 T sys_lstat
0000f561 T sys_fstat
0000f5be T sys_readlink
0000f5c4 t _get_base
0000f5f6 t get_fs_byte
0000f604 t get_fs_long
0000f61a t put_fs_byte
0000f632 t put_fs_long
0000f63e t get_fs
0000f652 t get_ds
0000f666 t set_fs
0000f66d T sys_uselib
0000f673 t create_tables
0000f7be t count
0000f7fd t copy_strings
0000f9b9 t change_ldt
0000fb3c T do_execve
000105be T do_execve2
00011096 t get_fs_byte
000110a4 t put_fs_byte
000110bc t put_fs_long
000110c8 T read_pipe
0001139d T sys_pipe
0001159f T sys_pipe2
000117b2 t get_fs_byte
000117c0 t put_fs_byte
000117d8 t permission
00011879 t match
000118e1 t match_kernel
00011949 t find_entry
00011b80 t find_entry_kernel
00011fce t get_dir
000121bb t get_dir_kernel
0001239c t dir_namei
0001241b T namei
00012531 T open_namei
00012884 T sys_mknod
00012ab4 T sys_mkdir
00012e65 t empty_dir
00013043 T sys_rmdir
0001339b T sys_unlink
0001363c T sys_symlink
00013642 T sys_link
0001389c T sys_getcwd
00013c0e T free_block
00013d80 T new_block
00013f24 T free_inode
0001408b T new_inode
00014265 t dupfd
0001433f T sys_dup2
00014366 T sys_dup
00014381 T sys_fcntl
000144c0 T sys_ioctl
00014591 t free_ind
00014630 t free_dind
000146cf T truncate
00014804 T sys_select
0001480a t lock_buffer
00014837 t unlock_buffer
00014a29 t make_request
00014bcd T ll_rw_block
00014c26 T blk_dev_init
00014c74 t unlock_buffer
00014ca9 t end_request
00014d5a T floppy_deselect
00014d91 T floppy_change
00014e17 t setup_DMA
00014ecd t output_byte
00014f43 t result
00015000 t bad_flp_intr
0001505f t rw_interrupt
0001514e T setup_rw_floppy
0001520f t seek_interrupt
00015268 t transfer
0001539d t recal_interrupt
000153e7 T unexpected_floppy_interrupt
0001542c t recalibrate_floppy
0001548e t reset_interrupt
000154d3 t reset_floppy
00015550 t floppy_on_interrupt
000155bb t do_fd_request
000157bf T floppy_init
00015811 t unlock_buffer
00015846 t end_request
000158e5 T sys_setup
00015c98 t controller_ready
00015d2c t hd_out
00015e19 t drive_busy
00015e7f t reset_controller
00015efc t reset_hd
00015f94 T unexpected_hd_interrupt
00015fa7 t bad_rw_intr
00015fe5 t read_intr
0001610b t recal_intr
00016125 t do_hd_request
00016426 T hd_init
000164a0 t unlock_buffer
000164d5 t end_request
00016574 t do_rd_request
000166aa T rd_init
00016700 T rd_load
000169ac t get_fs_byte
000169ba t put_fs_byte
000169d2 T tty_init
000169e3 T tty_intr
00016a57 t sleep_if_empty
00016a8f t sleep_if_full
00016b03 T copy_to_cooked
000170be T tty_read
0001742c T tty_write
0001763e T do_tty_interrupt
00017666 T chr_dev_init
00017667 t gotoxy
000176b5 t set_origin
0001771b t scrup
0001790b t scrdown
00017a02 t lf
00017a38 t ri
00017a6e t cr
00017a8f t del
00017ac1 t csi_J
00017b52 t csi_K
00017c04 T csi_m
00017c6b t set_cursor
00017cd1 t respond
00017d29 t insert_char
00017d8c t insert_line
00017dd0 t delete_char
00017e2e t delete_line
00017e72 t csi_at
00017eb0 t csi_L
00017eee t csi_P
00017f2c t csi_M
00017f6a t save_cur
00017f7f t restore_cur
00017f9e T con_write
0001862c T con_init
00018863 T sysbeepstop
0001888c t sysbeep
000188ea t mode
000188eb t leds
000188ec t e0
000188ed T keyboard_interrupt
00018916 t e0_e1
00018941 t set_e0
0001894a t set_e1
00018953 t put_queue
0001898c t ctrl
000189a4 t unctrl
000189a8 t unalt
000189be t lshift
000189c6 t unlshift
000189ce t rshift
000189d6 t unrshift
000189de t caps
00018a00 t set_leds
00018a16 t uncaps
00018a1e t scroll
00018a27 t num
00018a30 t cursor
00018a50 t cur2
00018a79 t cur
00018a85 t ok_cur
00018a93 t num_table
00018aa0 t cur_table
00018aad t func
00018aca t ok_func
00018add t end_func
00018ade t func_table
00018b0e t key_map
00018b6f t shift_map
00018c31 t do_self
00018c99 t none
00018c9a t minus
00018caf t key_table
000190af t kb_wait
000190b8 t reboot
000190ca t die
000190cc t init
00019141 T rs_init
000191c4 T rs_write
00019214 T rs1_interrupt
0001921c T rs2_interrupt
00019221 t rs_int
00019238 t rep_int
00019255 t end
00019263 t jmp_table
00019274 t modem_status
0001927c t line_status
00019284 t read_char
0001930b t get_fs_byte
00019319 t get_fs_long
0001932f t put_fs_byte
00019347 t put_fs_long
00019353 t change_speed
000193d1 t flush
000193e3 t send_break
000193e4 t get_termios
00019440 t set_termios
00019490 t get_termio
00019558 t set_termio
0001961c T tty_ioctl
0001991a t get_fs_byte
00019928 T math_emulate
00019a0b T math_error
00019a2b T _exit
00019a3b T open
00019a84 T close
00019af8 T dup
00019b2f T setsid
00019b5e T execve
00019bfb T strcpy
00019c17 T strncpy
00019c3c T strcat
00019c67 T strncat
00019c9c T strcmp
00019cc3 T strncmp
00019cf1 T strchr
00019d1e T strrchr
00019d4d T strspn
00019d8a T strcspn
00019dc7 T strpbrk
00019dfe T strstr
00019e37 T strlen
00019e5a T strtok
00019edd T memcpy
00019efd T memmove
00019f51 T memcmp
00019f7b T memchr
00019fb3 T memset
0001e148 d envp_rc
0001e15c d envp
0001e180 D sys_call_table
0001e2fc D NR_syscalls
0001e300 d init_task
0001f300 D current
0001f320 D task
0001f420 D stack_start
0001f428 D current_DOR
0001f440 d thisname.1955
0001f480 d month
0001f4c0 d last_inode.1935
0001f4c4 D start_buffer
0001f4e0 d crw_table
0001f500 d ioctl_table
0001f520 d floppy_type
0001f5e0 d cur_spec1
0001f5e4 d cur_rate
0001f5e8 d floppy
0001f5ec d current_track
0001f5f0 d callable.1844
0001f600 D tty_table
00021b20 D table_list
00021b40 d quotient
00021b60 D _ctype
00021c61 B __bss_start
00021c61 D _edata
00021c80 b printbuf
00022080 b memory_end
00022084 b buffer_memory_end
00022088 b main_memory_start
000220a0 B jiffies
000220a4 B startup_time
000220a8 B last_task_used_math
000220bc b mon_timer
000220cc b moff_timer
000220e0 b timer_list
000223e0 b next_timer
000223e4 B last_pid
00022400 b buf
00022800 b HIGH_MEMORY
00022820 b mem_map
00023720 B inode_table
00023e20 B nr_buffers
00023e24 b free_list
00023e28 b buffer_wait
00023e2c B ROOT_DEV
00023e60 B blk_dev
00023e98 B do_floppy
00023e9c B selected
00023ea4 b recalibrate
00023ea8 b reset
00023eac b seek
00023eb0 b reply_buffer
00023eb7 b current_drive
00023eb8 b sector
00023eb9 b head
00023eba b track
00023ebb b seek_track
00023ebc b command
00023ec0 B do_hd
00023ee0 B hd_info
00023f10 b recalibrate
00023f14 b reset
00023f18 b NR_HD
00023f20 b hd
00023f70 B rd_length
00023f74 b cr_flag.1923
00023f80 B beepcount
00023f84 b video_type
00023f88 b video_num_columns
00023f8c b video_size_row
00023f90 b video_num_lines
00023f94 b video_page
00023f98 b video_mem_start
00023f9c b video_mem_end
00023fa0 b video_port_reg
00023fa2 b video_port_val
00023fa4 b video_erase_char
00023fa8 b origin
00023fac b scr_end
00023fb0 b pos
00023fb4 b x
00023fb8 b y
00023fbc b top
00023fc0 b bottom
00023fc4 b state
00023fc8 b npar
00023fe0 b par
00024020 b ques
00024024 b saved_x
00024028 b saved_y
00024040 B drive_info
00024060 B user_stack
00025060 B hash_table
00025540 B super_block
000258a0 B file_table
00025ca0 B request
00026120 B rd_start
00026124 B _ctmp
00026128 B errno
0002612c B ___strtok
00026130 B end
00026130 B _end

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,30 @@
#ifndef _NEW_H
#define _NEW_H
#include <sys/types.h>
struct linux_dirent {
long d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[14];
};
/* Return value of `mmap' in case of an error. */
#define MAP_FAILED ((void *) -1)
#define PROT_READ 0x1 /* page can be read */
#define PROT_WRITE 0x2 /* page can be written */
#define PROT_EXEC 0x4 /* page can be executed */
#define PROT_SEM 0x8 /* page may be used for atomic ops */
#define PROT_NONE 0x0 /* page can not be accessed */
/* compatibility flags */
#define MAP_FILE 0
#define MAP_SHARED 0x01 /* Share changes */
#define MAP_PRIVATE 0x02 /* Changes are private */
#define CLONE_VM 0x00000100 /* set if VM shared between processes */
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -360,7 +360,10 @@ exec_error1:
/*
* 'do_execve2()' executes a new program by using execve2
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/exec.c
* without page fault
=======
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/exec.c
*/
int do_execve2(unsigned long * eip,long tmp,char * filename,
char ** argv, char ** envp)
@ -375,7 +378,11 @@ int do_execve2(unsigned long * eip,long tmp,char * filename,
int sh_bang = 0;
unsigned long p=PAGE_SIZE*MAX_ARG_PAGES-4;
unsigned long tmp1; /* by lzh */
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/exec.c
printk("This is do_execve2!\n");
=======
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/exec.c
if ((0xffff & eip[1]) != 0x000f)
panic("execve called from supervisor mode");
for (i=0 ; i<MAX_ARG_PAGES ; i++) /* clear page-table */
@ -522,16 +529,27 @@ restart_interp:
current->start_stack = p & 0xfffff000;
current->euid = e_uid;
current->egid = e_gid;
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/exec.c
/* printk("current->brk=%x, current->start_code=%x\n",current->brk,current->start_code); */
/* by lzh */
for (tmp1 = 0; tmp1 <= ((current->brk - 1) & 0xfffff000); tmp1 += 4096)
do_no_page_my(5, tmp1 + current->start_code);
/* by lzh */
=======
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/exec.c
i = ex.a_text+ex.a_data;
while (i&0xfff)
put_fs_byte(0,(char *) (i++));
eip[0] = ex.a_entry; /* eip, magic happens :-) */
eip[3] = p; /* stack pointer */
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/exec.c
=======
/* printk("current->brk=%x, current->start_code=%x\n",current->brk,current->start_code); */
/* by lzh */
for (tmp1 = 0; tmp1 <= ((current->brk - 1) & 0xfffff000); tmp1 += 4096)
do_no_page_my(5, tmp1 + current->start_code);
/* by lzh */
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/exec.c
return 0;
exec_error2:
iput(inode);

Binary file not shown.

@ -10,11 +10,14 @@
#include <linux/sched.h>
#include <linux/kernel.h>
#include <asm/segment.h>
#include <sys/types.h>
#include <new.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
#define PATH_MAX 255
int file_read(struct m_inode * inode, struct file * filp, char * buf, int count)
int file_read(struct m_inode * inode, struct file * filp, char * buf, int count)
{
int left,chars,nr;
struct buffer_head * bh;
@ -88,3 +91,64 @@ int file_write(struct m_inode * inode, struct file * filp, char * buf, int count
}
return (i?i:-1);
}
int sys_getdents(unsigned int fd, struct linux_dirent *d, unsigned int count)
{
struct linux_dirent tmp;
struct file * file;
struct m_inode * inode;
struct buffer_head * block;
struct dir_entry * ptr;
char * buf;
int bpos;
int dpos;
int ld_size;
int i;
ld_size = sizeof(struct linux_dirent); /* size of linux_dirent */
file = current->filp[fd]; /* opened file */
if (fd >= NR_OPEN)
return -EINVAL;
if (!count)
return -1;
if (!file)
return ENOTDIR;
inode = file->f_inode;
block = bread(inode->i_dev,inode->i_zone[0]);
/* count: size of linux_dirent[], target
* dd_size: size of dir_entry[], block 400?
*/
for (dpos = 0,bpos = 0;bpos<inode->i_size;bpos += sizeof(struct dir_entry)) {
if (dpos >= (count-ld_size))
return 0; /* d full */
ptr = (struct dir_entry *) (bpos + block->b_data);
if (!ptr -> inode)
continue; /* when it 's empty inode, jump it */
tmp.d_ino = ptr -> inode;
for (i = 0; i < 14; i++) tmp.d_name[i] = ptr -> name[i];
tmp.d_reclen = sizeof(tmp);
tmp.d_off = 0;
buf = &tmp;
for (i = 0; i < tmp.d_reclen; i++){
put_fs_byte(*(buf+i),((char*)d)+i+dpos); /* move data from kernel to user */
}
dpos += tmp.d_reclen;
}
return dpos;
}
long sys_mmap(void *start, size_t len, int prot, int flags,
int fd, off_t off)
{
return 0;
}
int sys_munmap(void * start, size_t len)
{
return 0;
}

Binary file not shown.

Binary file not shown.

@ -29,6 +29,7 @@
#define MAY_EXEC 1
#define MAY_WRITE 2
#define MAY_READ 4
#define PATH_MAX 255
/*
* permission()
@ -93,7 +94,10 @@ static int match_kernel(int len,const char * name,struct dir_entry * de)
);
return same;
}
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/namei.c
=======
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/namei.c
/*
* find_entry()
*
@ -169,7 +173,11 @@ static struct buffer_head * find_entry(struct m_inode ** dir,
return NULL;
}
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/namei.c
struct buffer_head * find_entry_kernel(struct m_inode ** dir,
=======
static struct buffer_head * find_entry_kernel(struct m_inode ** dir,
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/namei.c
const char * name, int namelen, struct dir_entry ** res_dir)
{
int entries;
@ -190,7 +198,11 @@ struct buffer_head * find_entry_kernel(struct m_inode ** dir,
if (!namelen)
return NULL;
/* check for '..', as we might have to do some "magic" for it */
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/namei.c
if (namelen==2 && *name=='.' && *(name+1)=='.') {
=======
if (namelen==2 && *(name)=='.' && *(name+1)=='.') {
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/namei.c
/* '..' in a pseudo-root results in a faked '.' (just change namelen) */
if ((*dir) == current->root)
namelen=1;
@ -350,7 +362,11 @@ static struct m_inode * get_dir(const char * pathname)
}
}
<<<<<<< HEAD:linux-0.11-lab/1/linux/fs/namei.c
struct m_inode * get_dir_kernel(const char * pathname)
=======
static struct m_inode * get_dir_kernel(const char * pathname)
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/fs/namei.c
{
char c;
const char * thisname;
@ -906,3 +922,67 @@ int sys_link(const char * oldname, const char * newname)
iput(oldinode);
return 0;
}
char * sys_getcwd(char * buf, size_t size)
{
struct m_inode * inode;
struct buffer_head * block;
struct dir_entry * ptr;
char path[PATH_MAX];
char path_buf[PATH_MAX];
char back[PATH_MAX];
int bpos;
int inode_down;
int inode_up;
int i;
strcpy(back,"..");
if (!(inode = get_dir_kernel(back)))
return NULL;
if (!(block = bread(inode->i_dev,inode->i_zone[0])))
return NULL;
ptr = (struct dir_entry *) (block->b_data);
inode_down = ptr->inode;
for (i = 0; i < PATH_MAX; i+=3)
{
back[2+i] = '/';
back[3+i] = '.';
back[4+i] = '.';
if (!(inode = get_dir_kernel(back)))
return NULL;
if (!(block = bread(inode->i_dev,inode->i_zone[0])))
return NULL;
ptr = (struct dir_entry *) (block->b_data);
inode_up = ptr->inode;
for (bpos = 0;bpos<inode->i_size;bpos += sizeof(struct dir_entry))
{
ptr = (struct dir_entry *) (bpos + block->b_data);
if (!ptr -> inode)
continue; /* when it 's empty inode, jump it */
if (ptr->inode == inode_down)
{
strcpy(path_buf,path);
memset(path,0,PATH_MAX);
if (ptr->name[0] == '.')
{
path[0] = '/';
strcat(path,path_buf);
goto end;
}
strcpy(path,ptr->name);
path[strlen(path)] = '/';
strcat(path,path_buf);
inode_down = inode_up;
break;
}
}
}
end:
path[strlen(path)-1] = 0;
if (size < strlen(path))
return NULL;
for (i = 0; i < strlen(path); i++){
put_fs_byte(*(path+i),buf+i);
}
return buf;
}

@ -109,3 +109,45 @@ int sys_pipe(unsigned long * fildes)
put_fs_long(fd[1],1+fildes);
return 0;
}
int sys_pipe2(int * fildes, int x)
{
struct m_inode * inode;
struct file * f[2];
int fd[2];
int i,j;
if(x != 0) return 0; /* add condition */
j=0;
for(i=0;j<2 && i<NR_FILE;i++)
if (!file_table[i].f_count)
(f[j++]=i+file_table)->f_count++;
if (j==1)
f[0]->f_count=0;
if (j<2)
return -1;
j=0;
for(i=0;j<2 && i<NR_OPEN;i++)
if (!current->filp[i]) {
current->filp[ fd[j]=i ] = f[j];
j++;
}
if (j==1)
current->filp[fd[0]]=NULL;
if (j<2) {
f[0]->f_count=f[1]->f_count=0;
return -1;
}
if (!(inode=get_pipe_inode())) {
current->filp[fd[0]] =
current->filp[fd[1]] = NULL;
f[0]->f_count = f[1]->f_count = 0;
return -1;
}
f[0]->f_inode = f[1]->f_inode = inode;
f[0]->f_pos = f[1]->f_pos = 0;
f[0]->f_mode = 1; /* read */
f[1]->f_mode = 2; /* write */
put_fs_long(fd[0],0+fildes);
put_fs_long(fd[1],1+fildes);
return 0;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -94,6 +94,13 @@ extern int sys_getdents();
extern int sys_pipe2();
extern int sys_sleep();
extern int sys_getcwd();
<<<<<<< HEAD:linux-0.11-lab/1/linux/include/linux/sys.h
=======
extern int sys_mmap();
extern int sys_munmap();
extern int sys_clone();
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/include/linux/sys.h
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,
@ -110,8 +117,13 @@ sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
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,
<<<<<<< HEAD:linux-0.11-lab/1/linux/include/linux/sys.h
sys_lstat, sys_readlink, sys_uselib, sys_execve2, sys_getdents, sys_pipe2,
sys_sleep, sys_getcwd };
=======
sys_lstat, sys_readlink, sys_uselib, sys_execve2, sys_getdents,
sys_pipe2, sys_sleep, sys_getcwd, sys_mmap, sys_munmap, sys_clone };
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/include/linux/sys.h
/* So we don't have to do any more manual updating.... */
int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr);

@ -144,7 +144,11 @@
#define __NR_lstat 84
#define __NR_readlink 85
#define __NR_uselib 86
<<<<<<< HEAD:linux-0.11-lab/1/linux/include/unistd.h
#define __NR_execve2 87
=======
#define __NR_execve2 87 /* by lzh */
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/include/unistd.h
#define __NR_getdents 88
#define __NR_pipe2 89
#define __NR_sleep 90
@ -153,6 +157,10 @@
#define __NR_munmap 93
#define __NR_clone 94
<<<<<<< HEAD:linux-0.11-lab/1/linux/include/unistd.h
=======
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/include/unistd.h
#define _syscall0(type,name) \
type name(void) \
{ \

@ -213,4 +213,8 @@ void print_nr(int sid)
{
if (sid > 86)
printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid);
<<<<<<< HEAD:linux-0.11-lab/1/linux/init/main.c
}
=======
}
>>>>>>> 5fa5668828e5effb6ddee83634da390ce88f4aa9:linux-0.11-lab/0/linux/init/main.c

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save