]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
DARWIN sync: sys_readlink layout.
authorNicholas Nethercote <njn@valgrind.org>
Sat, 23 May 2009 01:51:54 +0000 (01:51 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Sat, 23 May 2009 01:51:54 +0000 (01:51 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10121

coregrind/m_syswrap/syswrap-generic.c

index 0932172f70649a5363d1a0c6b9ef561ec2a549a8..0057339dd075e9b286135d169a3668b961102c09 100644 (file)
@@ -3540,8 +3540,7 @@ POST(sys_poll)
 
 PRE(sys_readlink)
 {
-   HChar name[25];
-   Word  saved = SYSNO;
+   Word saved = SYSNO;
 
    PRINT("sys_readlink ( %#lx(%s), %#lx, %llu )", ARG1,(char*)ARG1,ARG2,(ULong)ARG3);
    PRE_REG_READ3(long, "readlink",
@@ -3549,20 +3548,26 @@ PRE(sys_readlink)
    PRE_MEM_RASCIIZ( "readlink(path)", ARG1 );
    PRE_MEM_WRITE( "readlink(buf)", ARG2,ARG3 );
 
-   /*
-    * Handle the case where readlink is looking at /proc/self/exe or
-    * /proc/<pid>/exe.
-    */
-   VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)());
-   if (ML_(safe_to_deref)((void*)ARG1, 1)
-       && (VG_(strcmp)((Char *)ARG1, name) == 0 
-           || VG_(strcmp)((Char *)ARG1, "/proc/self/exe") == 0)) {
-      VG_(sprintf)(name, "/proc/self/fd/%d", VG_(cl_exec_fd));
-      SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, (UWord)name, 
-                                                      ARG2, ARG3));
-   } else {
-      /* Normal case */
-      SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, ARG1, ARG2, ARG3));
+   {
+      /*
+       * Handle the case where readlink is looking at /proc/self/exe or
+       * /proc/<pid>/exe.
+       */
+      HChar name[25];
+      Char* arg1s = (Char*) ARG1;
+      VG_(sprintf)(name, "/proc/%d/exe", VG_(getpid)());
+      if (ML_(safe_to_deref)(arg1s, 1) &&
+          (VG_STREQ(arg1s, name) || VG_STREQ(arg1s, "/proc/self/exe"))
+         )
+      {
+         VG_(sprintf)(name, "/proc/self/fd/%d", VG_(cl_exec_fd));
+         SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, (UWord)name, 
+                                                         ARG2, ARG3));
+      } else
+      {
+         /* Normal case */
+         SET_STATUS_from_SysRes( VG_(do_syscall3)(saved, ARG1, ARG2, ARG3));
+      }
    }
 
    if (SUCCESS && RES > 0)