~ubuntu-branches/ubuntu/intrepid/dash/intrepid-updates

« back to all changes in this revision

Viewing changes to debian/diff/0017-REDIR-Size-optimisations-in-redir.c.diff

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2007-07-18 15:38:47 UTC
  • mfrom: (1.2.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070718153847-pef1uwy72j9gs9pw
Tags: 0.5.4-1ubuntu1
* Merge with Debian; remaining changes:
  - Build against glibc instead of dietlibc
  - Change default answer for "Install dash as /bin/sh?" question to true.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
From 245e3b5ef8341701d154df7a55dce9a290513006 Mon Sep 17 00:00:00 2001
2
 
From: Herbert Xu <herbert@gondor.apana.org.au>
3
 
Date: Sat, 12 May 2007 18:14:15 +1000
4
 
Subject: [PATCH] [REDIR] Size optimisations in redir.c
5
 
 
6
 
Add likely flag on REDIR_PUSH.
7
 
Remove sv check on REDIR_SAVEFD2 (it implies REDIR_PUSH).
8
 
Optimise NTOFD/NFROMFD same fd check.
9
 
---
10
 
 ChangeLog   |    1 +
11
 
 src/redir.c |   23 ++++++++++++-----------
12
 
 2 files changed, 13 insertions(+), 11 deletions(-)
13
 
 
14
 
diff --git a/ChangeLog b/ChangeLog
15
 
index bc1b94d..92fa1c1 100644
16
 
--- a/ChangeLog
17
 
+++ b/ChangeLog
18
 
@@ -1,6 +1,7 @@
19
 
 2007-05-12  Herbert Xu <herbert@gondor.apana.org.au>
20
 
 
21
 
        * Fix redirect restore on closed file descriptors.
22
 
+       * Size optimisations in redir.c.
23
 
 
24
 
 2007-05-06  Herbert Xu <herbert@gondor.apana.org.au>
25
 
 
26
 
diff --git a/src/redir.c b/src/redir.c
27
 
index d4d9c39..33dbc88 100644
28
 
--- a/src/redir.c
29
 
+++ b/src/redir.c
30
 
@@ -119,7 +119,7 @@ redirect(union node *redir, int flags)
31
 
        }
32
 
        sv = NULL;
33
 
        INTOFF;
34
 
-       if (flags & REDIR_PUSH) {
35
 
+       if (likely(flags & REDIR_PUSH)) {
36
 
                struct redirtab *q;
37
 
                q = ckmalloc(sizeof (struct redirtab));
38
 
                q->next = redirlist;
39
 
@@ -132,12 +132,11 @@ redirect(union node *redir, int flags)
40
 
        }
41
 
        n = redir;
42
 
        do {
43
 
-               fd = n->nfile.fd;
44
 
-               if ((n->nfile.type == NTOFD || n->nfile.type == NFROMFD) &&
45
 
-                   n->ndup.dupfd == fd)
46
 
-                       continue; /* redirect from/to same file descriptor */
47
 
-
48
 
                newfd = openredirect(n);
49
 
+               if (newfd < -1)
50
 
+                       continue;
51
 
+
52
 
+               fd = n->nfile.fd;
53
 
 
54
 
                if (sv) {
55
 
                        p = &sv->renamed[fd];
56
 
@@ -174,7 +173,7 @@ redirect(union node *redir, int flags)
57
 
        if (memory[2])
58
 
                out2 = &memout;
59
 
 #endif
60
 
-       if (flags & REDIR_SAVEFD2 && sv && sv->renamed[2] >= 0)
61
 
+       if (flags & REDIR_SAVEFD2 && sv->renamed[2] >= 0)
62
 
                preverrout.fd = sv->renamed[2];
63
 
 }
64
 
 
65
 
@@ -215,15 +214,17 @@ openredirect(union node *redir)
66
 
                if ((f = open64(fname, O_WRONLY|O_CREAT|O_APPEND, 0666)) < 0)
67
 
                        goto ecreate;
68
 
                break;
69
 
+       case NTOFD:
70
 
+       case NFROMFD:
71
 
+               f = redir->ndup.dupfd;
72
 
+               if (f == redir->nfile.fd)
73
 
+                       f = -2;
74
 
+               break;
75
 
        default:
76
 
 #ifdef DEBUG
77
 
                abort();
78
 
 #endif
79
 
                /* Fall through to eliminate warning. */
80
 
-       case NTOFD:
81
 
-       case NFROMFD:
82
 
-               f = redir->ndup.dupfd;
83
 
-               break;
84
 
        case NHERE:
85
 
        case NXHERE:
86
 
                f = openhere(redir);
87
 
1.5.2.1
88