this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Support sysctl() queries for uname()

+133
+60
src/kernel/emulation/linux/misc/sysctl.c
··· 10 10 #include "sysctl_inc.h" 11 11 #include <stddef.h> 12 12 #include <limits.h> 13 + #include "../ext/sys/utsname.h" 13 14 14 15 static long sysctl_name_to_oid(const char* name, int* oid_name, 15 16 unsigned long* oid_len); ··· 30 31 _HW_CPUSUBTYPE, 31 32 _HW_CPUTHREADTYPE 32 33 }; 34 + 35 + static struct linux_utsname lu; 36 + static void copyout_string(const char* str, char* out, unsigned long* out_len); 37 + static void need_uname(void); 33 38 34 39 long sys_sysctl(int* name, unsigned int nlen, void* old, 35 40 unsigned long* oldlen, void* _new, unsigned long newlen) ··· 59 64 if (nlen != 2) 60 65 return -ENOTDIR; 61 66 67 + // String values 68 + switch (name[1]) 69 + { 70 + case HW_MACHINE: 71 + { 72 + need_uname(); 73 + copyout_string(lu.machine, (char*) old, oldlen); 74 + return 0; 75 + } 76 + } 77 + 78 + // Integer values 62 79 if (*oldlen < sizeof(int)) 63 80 return -EINVAL; 64 81 *oldlen = sizeof(int); ··· 111 128 return 0; 112 129 } 113 130 } 131 + else if (name[0] == CTL_KERN) 132 + { 133 + need_uname(); 134 + 135 + // String values 136 + switch (name[1]) 137 + { 138 + case KERN_OSTYPE: 139 + copyout_string(lu.sysname, (char*) old, oldlen); 140 + return 0; 141 + case KERN_HOSTNAME: 142 + copyout_string(lu.nodename, (char*) old, oldlen); 143 + return 0; 144 + case KERN_OSRELEASE: 145 + copyout_string(lu.release, (char*) old, oldlen); 146 + return 0; 147 + case KERN_VERSION: 148 + copyout_string(lu.version, (char*) old, oldlen); 149 + return 0; 150 + case KERN_DOMAINNAME: 151 + copyout_string(lu.domainname, (char*) old, oldlen); 152 + return 0; 153 + } 154 + } 114 155 115 156 return -ENOTDIR; 157 + } 158 + 159 + static void need_uname(void) 160 + { 161 + // Cache __linux_uname results 162 + if (!lu.sysname[0]) 163 + { 164 + __linux_uname(&lu); 165 + } 166 + } 167 + 168 + extern unsigned long strlcpy(char* dst, const char* src, unsigned long size); 169 + static void copyout_string(const char* str, char* out, unsigned long* out_len) 170 + { 171 + unsigned long len; 172 + len = strlcpy(out, str, *out_len); 173 + 174 + if (len < *out_len) 175 + *out_len = len; 116 176 } 117 177 118 178 static long sysctl_name_to_oid(const char* name, int* oid_name,
+73
src/kernel/emulation/linux/misc/sysctl_inc.h
··· 43 43 #define HW_AVAILCPU 25 44 44 #define HW_MAXID 26 45 45 46 + #define KERN_OSTYPE 1 47 + #define KERN_OSRELEASE 2 48 + #define KERN_OSREV 3 49 + #define KERN_VERSION 4 50 + #define KERN_MAXVNODES 5 51 + #define KERN_MAXPROC 6 52 + #define KERN_MAXFILES 7 53 + #define KERN_ARGMAX 8 54 + #define KERN_SECURELVL 9 55 + #define KERN_HOSTNAME 10 56 + #define KERN_HOSTID 11 57 + #define KERN_CLOCKRATE 12 58 + #define KERN_VNODE 13 59 + #define KERN_PROC 14 60 + #define KERN_FILE 15 61 + #define KERN_PROF 16 62 + #define KERN_POSIX1 17 63 + #define KERN_NGROUPS 18 64 + #define KERN_JOB_CONTROL 19 65 + #define KERN_SAVED_IDS 20 66 + #define KERN_BOOTTIME 21 67 + #define KERN_NISDOMAINNAME 22 68 + #define KERN_DOMAINNAME KERN_NISDOMAINNAME 69 + #define KERN_MAXPARTITIONS 23 70 + #define KERN_KDEBUG 24 71 + #define KERN_UPDATEINTERVAL 25 72 + #define KERN_OSRELDATE 26 73 + #define KERN_NTP_PLL 27 74 + #define KERN_BOOTFILE 28 75 + #define KERN_MAXFILESPERPROC 29 76 + #define KERN_MAXPROCPERUID 30 77 + #define KERN_DUMPDEV 31 78 + #define KERN_IPC 32 79 + #define KERN_DUMMY 33 80 + #define KERN_PS_STRINGS 34 81 + #define KERN_USRSTACK32 35 82 + #define KERN_LOGSIGEXIT 36 83 + #define KERN_SYMFILE 37 84 + #define KERN_PROCARGS 38 85 + #define KERN_NETBOOT 40 86 + #define KERN_SYSV 42 87 + #define KERN_AFFINITY 43 88 + #define KERN_TRANSLATE 44 89 + #define KERN_CLASSIC KERN_TRANSLATE 90 + #define KERN_EXEC 45 91 + #define KERN_CLASSICHANDLER KERN_EXEC 92 + #define KERN_AIOMAX 46 93 + #define KERN_AIOPROCMAX 47 94 + #define KERN_AIOTHREADS 48 95 + #define KERN_PROCARGS2 49 96 + #define KERN_COREFILE 50 97 + #define KERN_COREDUMP 51 98 + #define KERN_SUGID_COREDUMP 52 99 + #define KERN_PROCDELAYTERM 53 100 + #define KERN_SHREG_PRIVATIZABLE 54 101 + #define KERN_LOW_PRI_WINDOW 56 102 + #define KERN_LOW_PRI_DELAY 57 103 + #define KERN_POSIX 58 104 + #define KERN_USRSTACK64 59 105 + #define KERN_NX_PROTECTION 60 106 + #define KERN_TFP 61 107 + #define KERN_PROCNAME 62 108 + #define KERN_THALTSTACK 63 109 + #define KERN_SPECULATIVE_READS 64 110 + #define KERN_OSVERSION 65 111 + #define KERN_SAFEBOOT 66 112 + #define KERN_LCTX 67 113 + #define KERN_RAGEVNODE 68 114 + #define KERN_TTY 69 115 + #define KERN_CHECKOPENEVT 70 116 + #define KERN_THREADNAME 71 117 + #define KERN_MAXID 72 118 + 46 119 #endif 47 120