Re: awk has gone nuts!

2001-11-03 Thread David Wolfskill

>Date: Sun, 4 Nov 2001 09:43:32 +0800
>From: "Vanilla I. Shu" <[EMAIL PROTECTED]>

>On Sat, Nov 03, 2001 at 10:07:21AM -0800, Steve Kargl wrote:
>> strip -R .comment -R .note loader.bin
>> cat /usr/src/sys/boot/i386/loader/../../common/help.common 
>/usr/src/sys/boot/i386/loader/help.i386 | awk -f 
>/usr/src/sys/boot/i386/loader/../../common/merge_help.awk > loader.help
>> /usr: write failed, file system is full
>^^
>> awk: write error on stdout
>>  input record number 383, file 
>>  source line number 92
>> *** Error code 2
>your /usr is full, not CURRENT's problem.


Actually, it is, but there is a circumvention.

The scenario goes like this:

* Build -CURRENT with sources from between 30 October - 02 November --
  that is, get the-one-true-awk installed as /usr/bin/awk.

* Some of the buildworld process uses awk.  It is, however (to the best
  of my knowledge) not built as part of the "build tools" process; thus,
  buildworld uses /usr/bin/awk for this.  Perhaps changing this is worth
  consideration, given the events of the past week.

* Some of those awk scripts use constructs that gawk accepts and uses.
  (The POSIX "bracket expressions" are a notable example, but there
  appear to be others, such as empty regexes and newline characters
  as part of a variable's value.)  The modes of failure are often such
  that it is not immediately apparent when a failure has occurred.
  (I.e., some of the failures are "silent".)

* The mode of failure for src/sys/boot/common/merge_help.awk, in
  particular, was that it would sit in a rather tight loop, repetitively
  outputting the same 2 (or 3, I forget now) lines because of a
  combination of a silent failure when using the-one-true-awk and a
  programming error in the script itself (such that in the case that no
  input records were recognized, it proceeded to enter this tight output
  loop).

A circumvention is to make & install awk (assuming the sources you are
using are those for gawk) before doing the buildworld.  Another is to
copy over a version of gawk as /usr/bin/awk before doing the buildworld.

Either of these will prevent the problems.

If the goal is merely to avoid the out-of-space condition because of the
programming error, it suffices to change the initialization of "first"
at src/sys/boot/common/merge_help.awk:11 from

  first = 0;

to 

  first = -1;


though that will not solve the other problems.  (It would probably be
good for that script to terminate with an error condition if, at
termination, it discovers that it recognized no input lines.)

Cheers,
david
-- 
David H. Wolfskill  [EMAIL PROTECTED]
As a computing professional, I believe it would be unethical for me to
advise, recommend, or support the use (save possibly for personal
amusement) of any product that is or depends on any Microsoft product.

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message



Re: awk has gone nuts!

2001-11-03 Thread Steve Kargl

On Sun, Nov 04, 2001 at 09:43:32AM +0800, Vanilla I. Shu wrote:
> On Sat, Nov 03, 2001 at 10:07:21AM -0800, Steve Kargl wrote:
> > strip -R .comment -R .note loader.bin
> > cat /usr/src/sys/boot/i386/loader/../../common/help.common 
>/usr/src/sys/boot/i386/loader/help.i386 | awk -f 
>/usr/src/sys/boot/i386/loader/../../common/merge_help.awk > loader.help
> > /usr: write failed, file system is full
> ^^
> > awk: write error on stdout
> >  input record number 383, file 
> >  source line number 92
> > *** Error code 2
> your /usr is full, not CURRENT's problem.

Ha Ha Ha Ha! You're killing me.  Read the original email again.

/usr was filled by awk because I had bawk in /usr/bin instead
of gawk.  You clipped the "ls -l" output in my original 
message that showed the above awk command created a
700MB loader.help file.

-- 
Steve

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message



Re: awk has gone nuts!

2001-11-03 Thread Vanilla I. Shu

On Sat, Nov 03, 2001 at 10:07:21AM -0800, Steve Kargl wrote:
> strip -R .comment -R .note loader.bin
> cat /usr/src/sys/boot/i386/loader/../../common/help.common 
>/usr/src/sys/boot/i386/loader/help.i386 | awk -f 
>/usr/src/sys/boot/i386/loader/../../common/merge_help.awk > loader.help
> /usr: write failed, file system is full
^^
> awk: write error on stdout
>  input record number 383, file 
>  source line number 92
> *** Error code 2
your /usr is full, not CURRENT's problem.

 PGP signature