summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhunt <hunt>2006-05-15 04:37:49 +0000
committerhunt <hunt>2006-05-15 04:37:49 +0000
commit090e8d5e8cc00bf7c887668f85a43d5767298df5 (patch)
tree96254625135962525042b4ace26031f0579e42a0
parent7dca715fe55b43e837de221af5caba3f2f44a475 (diff)
downloadsystemtap-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/ChangeLog5
-rw-r--r--tapset/aux_syscalls.stp84
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) {