1 SYSCALL_DEFINE4(reboot,
2 int ,magic1,
3 int, magic2,
4 unsigned int ,cmd
5 void _user *,ang)
6 {
7 if(!capable(CAP_SYS_BOOT))
8 return -EPERM
9 if(magic1 != LINUX_REBOOTMAGIC1 ||
10 (magic2 != LINUX_REBOOT_MAGIC2&&
11 magic2 != LINUX_REBOOT_MAGIC2A &&
12 magic2 != LINUX_REBOOT_MAGIC2B &&
13 magic2 != LINUX_REBOOT_MAGIC2C ))
14 return -EINVAL;
15 if((cmd == LIUX_REBOOT_CMD_POWEROFF)&&!pm_power_off)
16 cmd = LINUX_REBOOT_CMD_HALT;
17
18 lock_kernel();
19 switch(cmd){
20 case LINUX_REBOOT_CMD_RESTART:
21 kernel_restart(NULL);
22 break;
23 case LINUX_CMD_CAD_ON:
24 C_A_D = 1;
25 break;
26 case LINUX_CMD_CAD_OFF:
27 C_A_D = 0;
28 break;
29 case LINUX_REBOOT_CMD_HALT:
30 kernel_halt();
31 unlock_kernel();
32 do_exit(0);
33 break;
34 case LINUX_REBOOT_POWER_OFF:
35 kernel_halt();
36 unlock_kernel();
37 do_exit(0);
38 break;
39 case LINUX_REBOOT_RESTART:
40 if(strcpy_from_user(&buffer[0],arg,sizeof(buffer)-1)<0){
41 unlock_kernel();
42 return -EFAULT;
43 }
44 buffer[sizeof(buffer)-1]='\0';
45
46 kernel_restart(buffer);
47 break;
48
49 default:
50 unlock_kernel();
51 return -EFAULT;
52 }
53 unlock_kernel();
54 return 0;
55 }
在没有你的世界里,爱你叶铮