diff options
author | hunt <hunt> | 2005-08-30 00:27:35 +0000 |
---|---|---|
committer | hunt <hunt> | 2005-08-30 00:27:35 +0000 |
commit | 55a030a179fdfd1e887d95d5c0050004bee27fcf (patch) | |
tree | b77687481aa40fb2fcced58bbf63f66c7a27b050 /runtime/list.c | |
parent | 10fcd0060d7b88bbf0503f85ecaf8c8660abeaaf (diff) | |
download | systemtap-steved-55a030a179fdfd1e887d95d5c0050004bee27fcf.tar.gz systemtap-steved-55a030a179fdfd1e887d95d5c0050004bee27fcf.tar.xz systemtap-steved-55a030a179fdfd1e887d95d5c0050004bee27fcf.zip |
2005-08-29 Martin Hunt <hunt@redhat.com>
* list.c (_stp_copy_argv_from_user): Move to here.
* copy.c (_stp_copy_argv_from_user): Delete.
* runtime.h: Always include copy.h.
Diffstat (limited to 'runtime/list.c')
-rw-r--r-- | runtime/list.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/runtime/list.c b/runtime/list.c index 4643634b..c504ed36 100644 --- a/runtime/list.c +++ b/runtime/list.c @@ -10,6 +10,7 @@ #endif #include "map.c" +#include "copy.c" /********************** List Functions *********************/ /** @file list.c @@ -123,5 +124,40 @@ inline int _stp_list_size(MAP map) { return map->num; } + +/** Copy an argv from user space to a List. + * + * @param list A list. + * @param argv Source argv, in user space. + * @return number of elements in <i>list</i> + * + * @b Example: + * @include argv.c + */ + +int _stp_copy_argv_from_user (MAP list, char __user *__user *argv) +{ + char str[128]; + char __user *vstr; + int len; + + if (argv) + argv++; + + while (argv != NULL) { + if (get_user (vstr, argv)) + break; + + if (vstr == NULL) + break; + + len = _stp_strncpy_from_user(str, vstr, 128); + str[len] = 0; + _stp_list_add_str (list, str); + argv++; + } + return list->num; +} + /** @} */ #endif /* _LIST_C_ */ |