/* type */
printxval_ex(syslog_action_type, type, "SYSLOG_ACTION_???",
XLAT_STYLE_VERBOSE | XLAT_STYLE_FMT_D);
- tprints(", ");
}
switch (type) {
+ /* Those commands have bufp and len ignored */
+ case SYSLOG_ACTION_CLOSE:
+ case SYSLOG_ACTION_OPEN:
+ case SYSLOG_ACTION_CLEAR:
+ case SYSLOG_ACTION_CONSOLE_OFF:
+ case SYSLOG_ACTION_CONSOLE_ON:
+ case SYSLOG_ACTION_SIZE_UNREAD:
+ case SYSLOG_ACTION_SIZE_BUFFER:
+ return RVAL_DECODED;
+
case SYSLOG_ACTION_READ:
case SYSLOG_ACTION_READ_ALL:
case SYSLOG_ACTION_READ_CLEAR:
- if (entering(tcp))
+ if (entering(tcp)) {
+ tprints(", ");
return 0;
+ }
break;
default:
+ tprints(", ");
printaddr(tcp->u_arg[1]);
tprintf(", %" PRI_klu, tcp->u_arg[2]);
return RVAL_DECODED;
}
+ /* syscall exit handler for SYSLOG_ACTION_READ* */
+
/* bufp */
if (syserror(tcp))
printaddr(tcp->u_arg[1]);
int
main(void)
{
+ static const struct cmd_str {
+ unsigned int cmd;
+ const char *str;
+ } no_args[] = {
+ { 0, "0 /* SYSLOG_ACTION_CLOSE */" },
+ { 1, "1 /* SYSLOG_ACTION_OPEN */" },
+ { 5, "5 /* SYSLOG_ACTION_CLEAR */" },
+ { 6, "6 /* SYSLOG_ACTION_CONSOLE_OFF */" },
+ { 7, "7 /* SYSLOG_ACTION_CONSOLE_ON */" },
+ { 9, "9 /* SYSLOG_ACTION_SIZE_UNREAD */" },
+ { 10, "10 /* SYSLOG_ACTION_SIZE_BUFFER */" },
+ };
+ static const kernel_ulong_t high =
+ (kernel_ulong_t) 0xbadc0ded00000000ULL;
const long addr = (long) 0xfacefeeddeadbeefULL;
-
- int rc = syscall(__NR_syslog, SYSLOG_ACTION_READ, addr, -1);
+ int rc;
+ for (size_t i = 0; i < ARRAY_SIZE(no_args); i++) {
+ rc = syscall(__NR_syslog, high | no_args[i].cmd, addr, -1);
+ printf("syslog(%s) = %s\n",
+ no_args[i].str, sprintrc(rc));
+ }
+
+ rc = syscall(__NR_syslog, SYSLOG_ACTION_READ, addr, -1);
printf("syslog(2 /* SYSLOG_ACTION_READ */, %#lx, -1) = %s\n",
addr, sprintrc(rc));
- rc = syscall(__NR_syslog, SYSLOG_ACTION_SIZE_BUFFER, NULL, 10);
- printf("syslog(10 /* SYSLOG_ACTION_SIZE_BUFFER */, NULL, 10) = %s\n",
- sprintrc(rc));
-
puts("+++ exited with 0 +++");
return 0;
}