commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 52/53: Fix handling of console readlink errors


From: Samuel Thibault
Subject: [hurd] 52/53: Fix handling of console readlink errors
Date: Thu, 20 Mar 2014 02:23:53 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch upstream
in repository hurd.

commit 2294f2fdffcf724cc28653976b8029351e41fd77
Author: Samuel Thibault <address@hidden>
Date:   Sun Mar 16 20:04:11 2014 +0100

    Fix handling of console readlink errors
    
    * console-client/trans.c (netfs_attempt_lookup): Look for errors returned by
    `readlink' before allocating a node.
    (netfs_attempt_readlink): Look for errors returned by `readlink'.
---
 console-client/trans.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/console-client/trans.c b/console-client/trans.c
index 00c5407..d65161c 100644
--- a/console-client/trans.c
+++ b/console-client/trans.c
@@ -269,7 +269,20 @@ netfs_attempt_lookup (struct iouser *user, struct node 
*dir,
       {
        if (cn->node == NULL)
          {
-           struct netnode *nn = calloc (1, sizeof *nn);
+           struct netnode *nn;
+           ssize_t size = 0;
+
+           if (cn->readlink)
+             {
+               size = cn->readlink (user, NULL, NULL);
+               if (size < 0)
+                 {
+                   err = -size;
+                   goto out;
+                 }
+             }
+
+           nn = calloc (1, sizeof *nn);
            if (nn == NULL)
              {
                err = ENOMEM;
@@ -283,15 +296,10 @@ netfs_attempt_lookup (struct iouser *user, struct node 
*dir,
            (*node)->nn_stat.st_mode = (netfs_root_node->nn_stat.st_mode & 
~S_IFMT & ~S_ITRANS);
            (*node)->nn_stat.st_ino = 5;
            if (cn->readlink)
-             {
                (*node)->nn_stat.st_mode |= S_IFLNK;
-               (*node)->nn_stat.st_size = cn->readlink (user, NULL, NULL);
-             }
            else
-             {
                (*node)->nn_stat.st_mode |= S_IFCHR;
-               (*node)->nn_stat.st_size = 0;
-             }
+           (*node)->nn_stat.st_size = size;
            cn->node = *node;
            goto out;
          }
@@ -508,7 +516,13 @@ netfs_attempt_readlink (struct iouser *user, struct node 
*np,
                        char *buf)
 {
   if (np->nn->node && np->nn->node->readlink)
-    return np->nn->node->readlink (user, np, buf);
+  {
+    error_t err = np->nn->node->readlink (user, np, buf);
+    if (err < 0)
+      return -err;
+    else
+      return 0;
+  }
   return EOPNOTSUPP;
 }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]