summaryrefslogtreecommitdiffstats
path: root/tapset/conversions.stp
diff options
context:
space:
mode:
Diffstat (limited to 'tapset/conversions.stp')
-rw-r--r--tapset/conversions.stp13
1 files changed, 13 insertions, 0 deletions
diff --git a/tapset/conversions.stp b/tapset/conversions.stp
index e894e4fa..af993992 100644
--- a/tapset/conversions.stp
+++ b/tapset/conversions.stp
@@ -18,6 +18,19 @@ deref_fault: /* branched to from deref_string() */
}
%}
+function kernel_string_n:string (addr:long, n:long) %{ /* pure */
+ char *destination = THIS->__retvalue;
+ long len = THIS->n + 1;
+ len = (len > MAXSTRINGLEN) ? MAXSTRINGLEN : len;
+ deref_string (destination, THIS->addr, len);
+ if (0) {
+deref_fault: /* branched to from deref_string() */
+ snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
+ "kernel string copy fault at 0x%p", (void *) (uintptr_t) THIS->addr);
+ CONTEXT->last_error = CONTEXT->error_buffer;
+ }
+%}
+
function kernel_long:long (addr:long) %{ /* pure */
THIS->__retvalue = kread((long *) (intptr_t) THIS->addr);
if (0) {