Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Oct 2002 20:52:07 -0700 (PDT)
From:      Tim Kientzle <kientzle@acm.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/43810: 'echo' is too big
Message-ID:  <200210080352.g983q7bl050253@www.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         43810
>Category:       bin
>Synopsis:       'echo' is too big
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Oct 07 21:00:11 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Tim Kientzle
>Release:        FreeBSD-CURRENT
>Organization:
>Environment:
>Description:
Compiled, statically linked, and stripped, 'echo' is
over 40k!!  A few space-conscious edits reduce that
to just over 5k.

>How-To-Repeat:
ls -l /bin/echo
<gasp in amazement>


>Fix:
Following patch reduces 'echo' to just over 5k
with _no_lost_functionality_ (even that obscure \c
hack still works):

diff --context echo.c-original echo.c
*** echo.c-original     Mon Oct  7 20:44:50 2002
--- echo.c      Mon Oct  7 20:44:15 2002
***************
*** 45,52 ****
  #include <sys/cdefs.h>
  __FBSDID("$FreeBSD: src/bin/echo/echo.c,v 1.13 2002/06/30 05:13:53 obrien Exp 
$");
  
- #include <stdio.h>
- #include <stdlib.h>
  #include <string.h>
  
  /* ARGSUSED */
--- 45,50 ----
***************
*** 56,62 ****
        int nflag;      /* if not set, output a trailing newline. */
  
        /* This utility may NOT do getopt(3) option parsing. */
!       if (*++argv && !strcmp(*argv, "-n")) {
                ++argv;
                nflag = 1;
        }
--- 54,60 ----
        int nflag;      /* if not set, output a trailing newline. */
  
        /* This utility may NOT do getopt(3) option parsing. */
!       if (*++argv && argv[0][0]=='-' && argv[0][1]=='n') {
                ++argv;
                nflag = 1;
        }
***************
*** 64,69 ****
--- 62,69 ----
                nflag = 0;
  
        while (argv[0] != NULL) {
+               size_t len;
+               len = strlen(argv[0]);
  
                /*
                 * If the next argument is NULL then this is this
***************
*** 71,93 ****
                 * for a trailing \c.
                 */
                if (argv[1] == NULL) {
-                       size_t len;
- 
-                       len = strlen(argv[0]);
                        /* is there room for a '\c' and is there one? */
                        if (len >= 2 &&
                            argv[0][len - 2] == '\\' &&
                            argv[0][len - 1] == 'c') {
                                /* chop it and set the no-newline flag. */
-                               argv[0][len - 2] = '\0';
                                nflag = 1;
                        }
                }
!               (void)printf("%s", argv[0]);
                if (*++argv)
!                       putchar(' ');
        }
        if (!nflag)
!               putchar('\n');
        return 0;
  }
--- 71,90 ----
                 * for a trailing \c.
                 */
                if (argv[1] == NULL) {
                        /* is there room for a '\c' and is there one? */
                        if (len >= 2 &&
                            argv[0][len - 2] == '\\' &&
                            argv[0][len - 1] == 'c') {
                                /* chop it and set the no-newline flag. */
                                nflag = 1;
+                               len -= 2;
                        }
                }
!               (void)write(1,argv[0],len);
                if (*++argv)
!                       write(1," ",1);
        }
        if (!nflag)
!               write(1,"\n",1);
        return 0;
  }

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200210080352.g983q7bl050253>