From owner-freebsd-bugs Wed Oct 10 14:10:15 2001 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 06A5837B406 for ; Wed, 10 Oct 2001 14:10:08 -0700 (PDT) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.4/8.11.4) id f9ALA8Z54486; Wed, 10 Oct 2001 14:10:08 -0700 (PDT) (envelope-from gnats) Received: from noos.fr (r178m112.cybercable.tm.fr [195.132.178.112]) by hub.freebsd.org (Postfix) with ESMTP id ECF9937B408 for ; Wed, 10 Oct 2001 14:07:35 -0700 (PDT) Received: (from mux@localhost) by noos.fr (8.11.6/8.11.4) id f9AL7YQ07781; Wed, 10 Oct 2001 23:07:34 +0200 (CEST) (envelope-from mux) Message-Id: <200110102107.f9AL7YQ07781@noos.fr> Date: Wed, 10 Oct 2001 23:07:34 +0200 (CEST) From: Maxime Henrion Reply-To: Maxime Henrion To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.113 Subject: bin/31205: [PATCH] WARNSify and add a new option to script(1) Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 31205 >Category: bin >Synopsis: [PATCH] WARNSify and add a new option to script(1) >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: Wed Oct 10 14:10:07 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Maxime Henrion >Release: FreeBSD 5.0-CURRENT i386 >Organization: None. >Environment: System: FreeBSD nebula 5.0-CURRENT FreeBSD 5.0-CURRENT #120: Wed Oct 10 17:46:49 CEST 2001 mux@nebula.cybercable.fr:/usr/src/sys/i386/compile/NEBULA i386 >Description: This patch WARNSify the script(1) command and add a new option (-A) to rip ascii characters 13 out. Since the WARNS changes are just two `const' to add, I didn't separate the two patches. I can send them separate on demand. >How-To-Repeat: >Fix: --- script.diff begins here --- Index: Makefile =================================================================== RCS file: /home/ncvs/src/usr.bin/script/Makefile,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 Makefile --- Makefile 27 May 1994 12:32:38 -0000 1.1.1.1 +++ Makefile 10 Oct 2001 20:53:52 -0000 @@ -4,4 +4,6 @@ LDADD= -lutil DPADD= ${LIBUTIL} +WARNS?= 2 + .include Index: script.1 =================================================================== RCS file: /home/ncvs/src/usr.bin/script/script.1,v retrieving revision 1.15 diff -u -r1.15 script.1 --- script.1 15 Jul 2001 08:01:34 -0000 1.15 +++ script.1 10 Oct 2001 21:00:46 -0000 @@ -41,6 +41,7 @@ .Sh SYNOPSIS .Nm .Op Fl a +.Op Fl A .Op Fl k .Op Fl q .Op Fl t Ar time @@ -77,6 +78,8 @@ or .Pa typescript , retaining the prior contents. +.It Fl A +Skip the ASCII 13 characters from the script output file. .It Fl k Log keys sent to program as well as output. .It Fl q @@ -141,7 +144,8 @@ .Nm Script places .Sy everything -in the log file, including linefeeds and backspaces. +(except if you use the -A option), in the log file, +including linefeeds and backspaces. This is not what the naive user expects. .Pp It is not possible to specify a command without also naming the script file Index: script.c =================================================================== RCS file: /home/ncvs/src/usr.bin/script/script.c,v retrieving revision 1.15 diff -u -r1.15 script.c --- script.c 26 Jul 2001 11:02:35 -0000 1.15 +++ script.c 10 Oct 2001 01:08:04 -0000 @@ -66,8 +66,8 @@ FILE *fscript; int master, slave; int child; -char *fname; -int qflg; +const char *fname; +int Aflg, qflg; struct termios tt; @@ -76,6 +76,7 @@ void doshell __P((char **)); void fail __P((void)); void finish __P((void)); +void log_write __P((const char *, int)); static void usage __P((void)); int @@ -95,11 +96,14 @@ int flushtime = 30; aflg = kflg = 0; - while ((ch = getopt(argc, argv, "aqkt:")) != -1) + while ((ch = getopt(argc, argv, "aAqkt:")) != -1) switch(ch) { case 'a': aflg = 1; break; + case 'A': + Aflg = 1; + break; case 'q': qflg = 1; break; @@ -177,7 +181,7 @@ (void)write(master, ibuf, cc); if (kflg && tcgetattr(master, &stt) >= 0 && ((stt.c_lflag & ECHO) == 0)) { - (void)fwrite(ibuf, 1, cc, fscript); + log_write(ibuf, cc); } } } @@ -186,7 +190,7 @@ if (cc <= 0) break; (void)write(STDOUT_FILENO, obuf, cc); - (void)fwrite(obuf, 1, cc, fscript); + log_write(obuf, cc); } tvec = time(0); if (tvec - start >= flushtime) { @@ -202,7 +206,7 @@ usage() { (void)fprintf(stderr, - "usage: script [-a] [-q] [-k] [-t time] [file] [command]\n"); + "usage: script [-a] [-A] [-q] [-k] [-t time] [file] [command]\n"); exit(1); } @@ -232,7 +236,7 @@ doshell(av) char **av; { - char *shell; + const char *shell; shell = getenv("SHELL"); if (shell == NULL) @@ -273,4 +277,24 @@ (void)fclose(fscript); (void)close(master); exit(eno); +} + +void +log_write(const char *buf, int size) +{ + int off, i; + + if (!Aflg) { + (void)fwrite(buf, 1, size, fscript); + return; + } + off = 0; + do { + i = 0; + while ((off + i < size) && (buf[off + i] != '\r')) + i++; + if (i > 0) + (void)fwrite(buf + off, 1, i, fscript); + off += i + 1; + } while (off < size); } --- script.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message