Support setting sysctls from the debugger
This commit is contained in:
parent
069e7b44b7
commit
ae809dd23a
@ -71,6 +71,11 @@ Debug_SysCtl(int argc, const char *argv[])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argc != 2 && argc != 3) {
|
||||||
|
kprintf("Usage: sysctl NODE [VALUE]\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
i = SysCtl_Lookup(argv[1]);
|
i = SysCtl_Lookup(argv[1]);
|
||||||
if (i == -1) {
|
if (i == -1) {
|
||||||
kprintf("Unknown sysctl node!\n");
|
kprintf("Unknown sysctl node!\n");
|
||||||
@ -98,6 +103,37 @@ Debug_SysCtl(int argc, const char *argv[])
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argc == 3) {
|
||||||
|
if (SYSCTLTable[i].flags == SYSCTL_FLAG_RO) {
|
||||||
|
kprintf("Sysctl node is read-only!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (SYSCTLTable[i].type) {
|
||||||
|
case SYSCTL_TYPE_STR: {
|
||||||
|
SysCtlString *val = (SysCtlString *)SYSCTLTable[i].node;
|
||||||
|
strncpy(&val->value[0], argv[2], SYSCTL_STR_MAXLENGTH);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SYSCTL_TYPE_INT: {
|
||||||
|
SysCtlInt *val = (SysCtlInt *)SYSCTLTable[i].node;
|
||||||
|
val->value = Debug_StrToInt(argv[2]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SYSCTL_TYPE_BOOL: {
|
||||||
|
SysCtlBool *val = (SysCtlBool *)SYSCTLTable[i].node;
|
||||||
|
if (strcmp(argv[2], "0") == 0) {
|
||||||
|
val->value = false;
|
||||||
|
} else if (strcmp(argv[2], "1") == 0) {
|
||||||
|
val->value = true;
|
||||||
|
} else {
|
||||||
|
kprintf("Invalid value!\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
REGISTER_DBGCMD(sysctl, "SYSCTL", Debug_SysCtl);
|
REGISTER_DBGCMD(sysctl, "SYSCTL", Debug_SysCtl);
|
||||||
|
Loading…
Reference in New Issue
Block a user