diff options
author | hunt <hunt> | 2006-05-15 04:37:49 +0000 |
---|---|---|
committer | hunt <hunt> | 2006-05-15 04:37:49 +0000 |
commit | 090e8d5e8cc00bf7c887668f85a43d5767298df5 (patch) | |
tree | 96254625135962525042b4ace26031f0579e42a0 | |
parent | 7dca715fe55b43e837de221af5caba3f2f44a475 (diff) | |
download | systemtap-steved-090e8d5e8cc00bf7c887668f85a43d5767298df5.tar.gz systemtap-steved-090e8d5e8cc00bf7c887668f85a43d5767298df5.tar.xz systemtap-steved-090e8d5e8cc00bf7c887668f85a43d5767298df5.zip |
2006-05-14 Martin Hunt <hunt@redhat.com>
* aux_syscalls.stp (_sys_open_flag_str): Rewrite in C so it
is complete and works on different archs.
-rw-r--r-- | tapset/ChangeLog | 5 | ||||
-rw-r--r-- | tapset/aux_syscalls.stp | 84 |
2 files changed, 75 insertions, 14 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog index 542e71bd..14bafbd3 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,8 @@ +2006-05-14 Martin Hunt <hunt@redhat.com> + + * aux_syscalls.stp (_sys_open_flag_str): Rewrite in C so it + is complete and works on different archs. + 2006-05-09 Josh Stone <joshua.i.stone@intel.com> * context.stp (probefunc): remove use of labels diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index b1e2c446..925c87d6 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -721,20 +721,76 @@ function _flock_cmd_str(c) { } /* `man 2 open` for more information */ -function _sys_open_flag_str(f) { - if(f & 8192) bs="O_ASYNC|".bs - if(f & 4096) bs="O_SYNC|".bs - if(f & 2048) bs="O_NONBLOCK|".bs - if(f & 1024) bs="O_APPEND|".bs - if(f & 512) bs="O_TRUNC|".bs - if(f & 256) bs="O_NOCTTY|".bs - if(f & 128) bs="O_EXCL|".bs - if(f & 64) bs="O_CREAT|".bs - if((f & 3) == 2) bs="O_RDWR|".bs - else if((f & 3) == 1) bs="O_WRONLY|".bs - else if((f & 3) == 0) bs="O_RDONLY|".bs - return substr(bs,0,strlen(bs)-1) -} +function _sys_open_flag_str:string (f:long) +%{ /* pure */ + int flags = (int)THIS->f; + int acc = flags & O_ACCMODE; + + switch (acc) { + case O_WRONLY: + strlcpy (THIS->__retvalue, "O_WRONLY", MAXSTRINGLEN); + break; + case O_RDWR: + strlcpy (THIS->__retvalue, "O_RDWR", MAXSTRINGLEN); + break; + default: + strlcpy (THIS->__retvalue, "O_RDONLY", MAXSTRINGLEN); + } + +#ifdef O_APPEND + if (flags & O_APPEND) + strlcat (THIS->__retvalue, "|O_APPEND", MAXSTRINGLEN); +#endif +#ifdef O_CREAT + if (flags & O_CREAT) + strlcat (THIS->__retvalue, "|O_CREAT", MAXSTRINGLEN); +#endif +#ifdef O_ASYNC + if (flags & O_ASYNC) + strlcat (THIS->__retvalue, "|O_ASYNC", MAXSTRINGLEN); +#endif +#ifdef O_DIRECT + if (flags & O_DIRECT) + strlcat (THIS->__retvalue, "|O_DIRECT", MAXSTRINGLEN); +#endif +#ifdef O_DIRECTORY + if (flags & O_DIRECTORY) + strlcat (THIS->__retvalue, "|O_DIRECTORY", MAXSTRINGLEN); +#endif +#ifdef O_EXCL + if (flags & O_EXCL) + strlcat (THIS->__retvalue, "|O_EXCL", MAXSTRINGLEN); +#endif +#ifdef O_LARGEFILE + if (flags & O_LARGEFILE) + strlcat (THIS->__retvalue, "|O_LARGEFILE", MAXSTRINGLEN); +#endif +#ifdef O_NOATIME + if (flags & O_NOATIME) + strlcat (THIS->__retvalue, "|O_NOATIME", MAXSTRINGLEN); +#endif +#ifdef O_NOCTTY + if (flags & O_NOCTTY) + strlcat (THIS->__retvalue, "|O_NOCTTY", MAXSTRINGLEN); +#endif +#ifdef O_NOFOLLOW + if (flags & O_NOFOLLOW) + strlcat (THIS->__retvalue, "|O_NOFOLLOW", MAXSTRINGLEN); +#endif +#ifdef O_NONBLOCK + if (flags & O_NONBLOCK) + strlcat (THIS->__retvalue, "|O_NONBLOCK", MAXSTRINGLEN); +#endif +#ifdef O_SYNC + if (flags & O_SYNC) + strlcat (THIS->__retvalue, "|O_SYNC", MAXSTRINGLEN); +#endif +#ifdef O_TRUNC + if (flags & O_TRUNC) + strlcat (THIS->__retvalue, "|O_TRUNC", MAXSTRINGLEN); +#endif +%} + /* `man 2 open` for more information */ function _access_mode_str(m) { |