Path: utzoo!attcan!uunet!husc6!rutgers!gatech!udel!mmdf
From: Postmaster%EBRUPC51.BITNET@cunyvm.cuny.edu (PMDF Mail Server)
Newsgroups: comp.os.minix
Subject: Undeliverable mail
Message-ID: <4294@louie.udel.EDU>
Date: 28 Sep 88 17:38:25 GMT
Sender: mmdf@udel.EDU
Lines: 694

The message could not be delivered to:

Addressee: EAMATEO
Reason:
  %MAIL-E-NOSUCHUSR, no such user EAMATEO at node GAUDI

----------------------------------------

Received: from JNET-DAEMON by EBRUPC51; Wed, 28 Sep 88 18:18 N
Received: From EB0UB011(MAILER) by EBRUPC51 with Jnet id 4758 for
 EAMATEO@EBRUPC51; Wed, 28 Sep 88 18:14 N
Received: by EB0UB011 (Mailer X1.25) id 9853; Wed, 28 Sep 88 18:12:09 HOE
Date: Tue, 27 Sep 88 20:57:34 GMT
From: Andy Tanenbaum 
Subject: V1.3c posting #10 - fs
Sender: Minix operating system 
To: NACHO NAVARRO 
Reply-to: INFO-MINIX@UDEL.EDU
Comments:     Warning -- original Sender: tag was info-minix-request@UDEL.EDU
Comments: To: info-minix@UDEL.EDU

: This is a shar archive.  Extract with sh, not csh.
: This archive ends with exit, so do not worry about trailing junk.
: --------------------------- cut here --------------------------
PATH=/bin:/usr/bin:/usr/ucb
echo Extracting 'LISTING'
sed 's/^X//' > 'LISTING' << '+ END-OF-FILE ''LISTING'
Xtotal 17
X-rw-r--r--  1 ast          4197 Sep 27 15:12 at_makefile
X-rw-r--r--  1 ast          2585 Sep 27 15:12 inode.c.cdif
X-rw-r--r--  1 ast          1449 Sep 27 15:12 link.c.cdif
X-rw-r--r--  1 ast          4266 Sep 27 15:12 pc_makefile
X-rw-r--r--  1 ast          1736 Sep 27 15:12 read.c.cdif
+ END-OF-FILE LISTING
chmod 'u=rw,g=r,o=r' 'LISTING'
set `wc -c 'LISTING'`
count=$1
case $count in
295)    :;;
*)    echo 'Bad character count in ''LISTING' >&2
        echo 'Count should be 295' >&2
esac
echo Extracting 'at_makefile'
sed 's/^X//' > 'at_makefile' << '+ END-OF-FILE ''at_makefile'
X# On a PC, cpp and cem are in /lib and will be removed to make space while
X# linking the kernel.  On an AT, they are in /usr/lib are are not removed.
X# This is because they have to be in /lib on a PC; the diskette is too small
X# for them to be in /usr/lib.
X
XCFLAGS= -Di8088 -F -T.
Xh=../h
Xl=/usr/lib
X
Xobj =    main.s open.s read.s write.s pipe.s device.s \
X    path.s mount.s link.s super.s inode.s cache.s filedes.s \
X    stadir.s protect.s time.s misc.s utility.s table.s putc.s
X
Xfs:    makefile   $l/head.s $(obj) $l/libc.a $l/end.s
X    @echo "Start linking FS.  "
X    @asld  -o fs -T. $l/head.s $(obj) $l/libc.a $l/end.s
X    @echo "FS done.  "
X
Xclean:
X    rm -f $(obj)
X
Xcache.s:    const.h type.h $h/const.h $h/type.h
Xcache.s:    $h/error.h
Xcache.s:    buf.h
Xcache.s:    file.h
Xcache.s:    fproc.h
Xcache.s:    glo.h
Xcache.s:    inode.h
Xcache.s:    super.h
X
Xdevice.s:    const.h type.h $h/const.h $h/type.h
Xdevice.s:    $h/com.h
Xdevice.s:    $h/error.h
Xdevice.s:    dev.h
Xdevice.s:    file.h
Xdevice.s:    fproc.h
Xdevice.s:    glo.h
Xdevice.s:    inode.h
Xdevice.s:    param.h
X
Xfiledes.s:    const.h type.h $h/const.h $h/type.h
Xfiledes.s:    $h/error.h
Xfiledes.s:    file.h
Xfiledes.s:    fproc.h
Xfiledes.s:    glo.h
Xfiledes.s:    inode.h
X
Xinode.s:    const.h type.h $h/const.h $h/type.h
Xinode.s:    $h/error.h
Xinode.s:    buf.h
Xinode.s:    file.h
Xinode.s:    fproc.h
Xinode.s:    glo.h
Xinode.s:    inode.h
Xinode.s:    super.h
X
Xlink.s:        const.h type.h $h/const.h $h/type.h
Xlink.s:        $h/error.h
Xlink.s:        buf.h
Xlink.s:        file.h
Xlink.s:        fproc.h
Xlink.s:        glo.h
Xlink.s:        inode.h
Xlink.s:        param.h
X
Xmain.s:        const.h type.h $h/const.h $h/type.h
Xmain.s:        $h/callnr.h
Xmain.s:        $h/com.h
Xmain.s:        $h/error.h
Xmain.s:        buf.h
Xmain.s:        file.h
Xmain.s:        fproc.h
Xmain.s:        glo.h
Xmain.s:        inode.h
Xmain.s:        param.h
Xmain.s:        super.h
X
Xmisc.s:        const.h type.h $h/const.h $h/type.h
Xmisc.s:        $h/callnr.h
Xmisc.s:        $h/com.h
Xmisc.s:        $h/error.h
Xmisc.s:        buf.h
Xmisc.s:        file.h
Xmisc.s:        fproc.h
Xmisc.s:        glo.h
Xmisc.s:        inode.h
Xmisc.s:        param.h
Xmisc.s:        super.h
X
Xmount.s:    const.h type.h $h/const.h $h/type.h
Xmount.s:    $h/error.h
Xmount.s:    buf.h
Xmount.s:    file.h
Xmount.s:    fproc.h
Xmount.s:    glo.h
Xmount.s:    inode.h
Xmount.s:    param.h
Xmount.s:    super.h
X
Xopen.s:        const.h type.h $h/const.h $h/type.h
Xopen.s:        $h/callnr.h
Xopen.s:        $h/error.h
Xopen.s:        buf.h
Xopen.s:        file.h
Xopen.s:        fproc.h
Xopen.s:        glo.h
Xopen.s:        inode.h
Xopen.s:        param.h
X
Xpath.s:        const.h type.h $h/const.h $h/type.h
Xpath.s:        $h/error.h
Xpath.s:        buf.h
Xpath.s:        file.h
Xpath.s:        fproc.h
Xpath.s:        glo.h
Xpath.s:        inode.h
Xpath.s:        super.h
X
Xpipe.s:        const.h type.h $h/const.h $h/type.h
Xpipe.s:        $h/callnr.h
Xpipe.s:        $h/com.h
Xpipe.s:        $h/error.h
Xpipe.s:        $h/signal.h
Xpipe.s:        file.h
Xpipe.s:        fproc.h
Xpipe.s:        glo.h
Xpipe.s:        inode.h
Xpipe.s:        param.h
X
Xprotect.s:    const.h type.h $h/const.h $h/type.h
Xprotect.s:    $h/error.h
Xprotect.s:    buf.h
Xprotect.s:    file.h
Xprotect.s:    fproc.h
Xprotect.s:    glo.h
Xprotect.s:    inode.h
Xprotect.s:    param.h
Xprotect.s:    super.h
X
Xputc.s:        const.h type.h $h/const.h $h/type.h
Xputc.s:        $h/com.h
X
Xread.s:        const.h type.h $h/const.h $h/type.h
Xread.s:        $h/com.h
Xread.s:        $h/error.h
Xread.s:        buf.h
Xread.s:        file.h
Xread.s:        fproc.h
Xread.s:        glo.h
Xread.s:        inode.h
Xread.s:        param.h
Xread.s:        super.h
X
Xstadir.s:    const.h type.h $h/const.h $h/type.h
Xstadir.s:    $h/error.h
Xstadir.s:    $h/stat.h
Xstadir.s:    file.h
Xstadir.s:    fproc.h
Xstadir.s:    glo.h
Xstadir.s:    inode.h
Xstadir.s:    param.h
X
Xsuper.s:    const.h type.h $h/const.h $h/type.h
Xsuper.s:    $h/error.h
Xsuper.s:    buf.h
Xsuper.s:    inode.h
Xsuper.s:    super.h
X
Xtable.s:    const.h type.h $h/const.h $h/type.h
Xtable.s:    $h/com.h
Xtable.s:    $h/callnr.h
Xtable.s:    $h/error.h
Xtable.s:    $h/stat.h
Xtable.s:    buf.h
Xtable.s:    dev.h
Xtable.s:    file.h
Xtable.s:    fproc.h
Xtable.s:    glo.h
Xtable.s:    inode.h
Xtable.s:    super.h
X
Xtime.s:        const.h type.h $h/const.h $h/type.h
Xtime.s:        $h/callnr.h
Xtime.s:        $h/com.h
Xtime.s:        $h/error.h
Xtime.s:        file.h
Xtime.s:        fproc.h
Xtime.s:        glo.h
Xtime.s:        inode.h
Xtime.s:        param.h
X
Xutility.s:    const.h type.h $h/const.h $h/type.h
Xutility.s:    $h/com.h
Xutility.s:    $h/error.h
Xutility.s:    buf.h
Xutility.s:    file.h
Xutility.s:    fproc.h
Xutility.s:    glo.h
Xutility.s:    inode.h
Xutility.s:    param.h
Xutility.s:    super.h
X
Xwrite.s:    const.h type.h $h/const.h $h/type.h
Xwrite.s:    $h/error.h
Xwrite.s:    buf.h
Xwrite.s:    file.h
Xwrite.s:    fproc.h
Xwrite.s:    glo.h
Xwrite.s:    inode.h
Xwrite.s:    super.h
+ END-OF-FILE at_makefile
chmod 'u=rw,g=r,o=r' 'at_makefile'
set `wc -c 'at_makefile'`
count=$1
case $count in
4197)    :;;
*)    echo 'Bad character count in ''at_makefile' >&2
        echo 'Count should be 4197' >&2
esac
echo Extracting 'inode.c.cdif'
sed 's/^X//' > 'inode.c.cdif' << '+ END-OF-FILE ''inode.c.cdif'
X*** /local/ast/minix/tape3b/fs/inode.c    Tue Jul 12 23:42:51 1988
X--- inode.c    Mon Sep 26 13:04:05 1988
X***************
X*** 111,117 ****
X
X    /* Acquire an inode from the bit map. */
X    sp = get_super(dev);        /* get pointer to super_block */
X!   b=alloc_bit(sp->s_imap, (bit_nr)sp->s_ninodes+1, sp->s_imap_blocks,
(bit_nr)0);
X    if (b == NO_BIT) {
X      err_code = ENFILE;
X      major = (int) (sp->s_dev >> MAJOR) & BYTE;
X--- 111,117 ----
X
X    /* Acquire an inode from the bit map. */
X    sp = get_super(dev);        /* get pointer to super_block */
X!   b=alloc_bit(sp->s_imap,(bit_nr)sp->s_ninodes+1, sp->s_imap_blocks,
(bit_nr)0);
X    if (b == NO_BIT) {
X      err_code = ENFILE;
X      major = (int) (sp->s_dev >> MAJOR) & BYTE;
X***************
X*** 129,142 ****
X      /* No inode table slots available.  Free the inode just allocated. */
X      free_bit(sp->s_imap, b);
X    } else {
X!     /* An inode slot is available.  Put the inode just allocated into it. */
X      rip->i_mode = bits;
X      rip->i_nlinks = (links) 0;
X      rip->i_uid = fp->fp_effuid;
X      rip->i_gid = fp->fp_effgid;
X      rip->i_dev = dev;    /* was provisionally set to NO_DEV */
X
X!     /* The fields not cleared already are cleared in wipe_inode().  They have
X       * been put there because truncate() needs to clear the same fields if
X       * the file happens to be open while being truncated.  It saves space
X       * not to repeat the code twice.
X--- 129,142 ----
X      /* No inode table slots available.  Free the inode just allocated. */
X      free_bit(sp->s_imap, b);
X    } else {
X!     /* An inode slot is available. Put the inode just allocated into it. */
X      rip->i_mode = bits;
X      rip->i_nlinks = (links) 0;
X      rip->i_uid = fp->fp_effuid;
X      rip->i_gid = fp->fp_effgid;
X      rip->i_dev = dev;    /* was provisionally set to NO_DEV */
X
X!     /* Fields not cleared already are cleared in wipe_inode().  They have
X       * been put there because truncate() needs to clear the same fields if
X       * the file happens to be open while being truncated.  It saves space
X       * not to repeat the code twice.
X***************
X*** 212,220 ****
X
X    /* Do the read or write. */
X    if (rw_flag == READING) {
X!     copy((char *)rip, (char *) dip, INODE_SIZE); /* copy from blk to inode */
X    } else {
X!     copy((char *)dip, (char *) rip, INODE_SIZE); /* copy from inode to blk */
X      bp->b_dirt = DIRTY;
X    }
X
X--- 212,220 ----
X
X    /* Do the read or write. */
X    if (rw_flag == READING) {
X!     copy((char *)rip, (char *)dip, INODE_SIZE); /* copy from blk to inode*/
X    } else {
X!     copy((char *)dip, (char *)rip, INODE_SIZE); /* copy from inode to blk*/
X      bp->b_dirt = DIRTY;
X    }
X
+ END-OF-FILE inode.c.cdif
chmod 'u=rw,g=r,o=r' 'inode.c.cdif'
set `wc -c 'inode.c.cdif'`
count=$1
case $count in
2585)    :;;
*)    echo 'Bad character count in ''inode.c.cdif' >&2
        echo 'Count should be 2585' >&2
esac
echo Extracting 'link.c.cdif'
sed 's/^X//' > 'link.c.cdif' << '+ END-OF-FILE ''link.c.cdif'
X*** /local/ast/minix/tape3b/fs/link.c    Tue Jul 12 23:42:51 1988
X--- link.c    Mon Sep 26 13:04:06 1988
X***************
X*** 11,16 ****
X--- 11,17 ----
X  #include "../h/const.h"
X  #include "../h/type.h"
X  #include "../h/error.h"
X+ #include "../h/stat.h"
X  #include "const.h"
X  #include "type.h"
X  #include "buf.h"
X***************
X*** 144,159 ****
X  {
X  /* Remove all the zones from the inode 'rip' and mark it dirty. */
X
X-   register file_pos position;
X-   register zone_type zone_size;
X    register block_nr b;
X    register zone_nr z, *iz;
X!   register int scale;
X!   register struct buf *bp;
X!   register dev_nr dev;
X    extern struct buf *get_block();
X    extern block_nr read_map();
X
X    dev = rip->i_dev;        /* device on which inode resides */
X    scale = scale_factor(rip);
X    zone_size = (zone_type) BLOCK_SIZE << scale;
X--- 145,163 ----
X  {
X  /* Remove all the zones from the inode 'rip' and mark it dirty. */
X
X    register block_nr b;
X    register zone_nr z, *iz;
X!   file_pos position;
X!   zone_type zone_size;
X!   int scale, file_type;
X!   struct buf *bp;
X!   dev_nr dev;
X!   unshort modewd;
X    extern struct buf *get_block();
X    extern block_nr read_map();
X
X+   file_type = rip->i_mode & S_IFMT;    /* check to see if file is special */
X+   if (file_type == S_IFCHR || file_type == S_IFBLK) return;
X    dev = rip->i_dev;        /* device on which inode resides */
X    scale = scale_factor(rip);
X    zone_size = (zone_type) BLOCK_SIZE << scale;
+ END-OF-FILE link.c.cdif
chmod 'u=rw,g=r,o=r' 'link.c.cdif'
set `wc -c 'link.c.cdif'`
count=$1
case $count in
1449)    :;;
*)    echo 'Bad character count in ''link.c.cdif' >&2
        echo 'Count should be 1449' >&2
esac
echo Extracting 'pc_makefile'
sed 's/^X//' > 'pc_makefile' << '+ END-OF-FILE ''pc_makefile'
X# On a PC, cpp and cem are in /lib and will be removed to make space while
X# linking the kernel.  On an AT, they are in /usr/lib are are not removed.
X# This is because they have to be in /lib on a PC; the diskette is too small
X# for them to be in /usr/lib.
X
XCFLAGS= -Di8088 -F -T.
Xh=../h
Xl=/usr/lib
X
Xobj =    main.s open.s read.s write.s pipe.s device.s \
X    path.s mount.s link.s super.s inode.s cache.s filedes.s \
X    stadir.s protect.s time.s misc.s utility.s table.s putc.s
X
Xfs:    makefile   $l/head.s $(obj) $l/libc.a $l/end.s
X    @echo "Start linking FS.  "
X    @echo "If disk fills up, remove some files or use asld -Tsomething"
X    @asld  -o fs -T. $l/head.s $(obj) $l/libc.a $l/end.s
X    @echo "FS done.  "
X
Xclean:
X    rm -f $(obj)
X
Xcache.s:    const.h type.h $h/const.h $h/type.h
Xcache.s:    $h/error.h
Xcache.s:    buf.h
Xcache.s:    file.h
Xcache.s:    fproc.h
Xcache.s:    glo.h
Xcache.s:    inode.h
Xcache.s:    super.h
X
Xdevice.s:    const.h type.h $h/const.h $h/type.h
Xdevice.s:    $h/com.h
Xdevice.s:    $h/error.h
Xdevice.s:    dev.h
Xdevice.s:    file.h
Xdevice.s:    fproc.h
Xdevice.s:    glo.h
Xdevice.s:    inode.h
Xdevice.s:    param.h
X
Xfiledes.s:    const.h type.h $h/const.h $h/type.h
Xfiledes.s:    $h/error.h
Xfiledes.s:    file.h
Xfiledes.s:    fproc.h
Xfiledes.s:    glo.h
Xfiledes.s:    inode.h
X
Xinode.s:    const.h type.h $h/const.h $h/type.h
Xinode.s:    $h/error.h
Xinode.s:    buf.h
Xinode.s:    file.h
Xinode.s:    fproc.h
Xinode.s:    glo.h
Xinode.s:    inode.h
Xinode.s:    super.h
X
Xlink.s:        const.h type.h $h/const.h $h/type.h
Xlink.s:        $h/error.h
Xlink.s:        buf.h
Xlink.s:        file.h
Xlink.s:        fproc.h
Xlink.s:        glo.h
Xlink.s:        inode.h
Xlink.s:        param.h
X
Xmain.s:        const.h type.h $h/const.h $h/type.h
Xmain.s:        $h/callnr.h
Xmain.s:        $h/com.h
Xmain.s:        $h/error.h
Xmain.s:        buf.h
Xmain.s:        file.h
Xmain.s:        fproc.h
Xmain.s:        glo.h
Xmain.s:        inode.h
Xmain.s:        param.h
Xmain.s:        super.h
X
Xmisc.s:        const.h type.h $h/const.h $h/type.h
Xmisc.s:        $h/callnr.h
Xmisc.s:        $h/com.h
Xmisc.s:        $h/error.h
Xmisc.s:        buf.h
Xmisc.s:        file.h
Xmisc.s:        fproc.h
Xmisc.s:        glo.h
Xmisc.s:        inode.h
Xmisc.s:        param.h
Xmisc.s:        super.h
X
Xmount.s:    const.h type.h $h/const.h $h/type.h
Xmount.s:    $h/error.h
Xmount.s:    buf.h
Xmount.s:    file.h
Xmount.s:    fproc.h
Xmount.s:    glo.h
Xmount.s:    inode.h
Xmount.s:    param.h
Xmount.s:    super.h
X
Xopen.s:        const.h type.h $h/const.h $h/type.h
Xopen.s:        $h/callnr.h
Xopen.s:        $h/error.h
Xopen.s:        buf.h
Xopen.s:        file.h
Xopen.s:        fproc.h
Xopen.s:        glo.h
Xopen.s:        inode.h
Xopen.s:        param.h
X
Xpath.s:        const.h type.h $h/const.h $h/type.h
Xpath.s:        $h/error.h
Xpath.s:        buf.h
Xpath.s:        file.h
Xpath.s:        fproc.h
Xpath.s:        glo.h
Xpath.s:        inode.h
Xpath.s:        super.h
X
Xpipe.s:        const.h type.h $h/const.h $h/type.h
Xpipe.s:        $h/callnr.h
Xpipe.s:        $h/com.h
Xpipe.s:        $h/error.h
Xpipe.s:        $h/signal.h
Xpipe.s:        file.h
Xpipe.s:        fproc.h
Xpipe.s:        glo.h
Xpipe.s:        inode.h
Xpipe.s:        param.h
X
Xprotect.s:    const.h type.h $h/const.h $h/type.h
Xprotect.s:    $h/error.h
Xprotect.s:    buf.h
Xprotect.s:    file.h
Xprotect.s:    fproc.h
Xprotect.s:    glo.h
Xprotect.s:    inode.h
Xprotect.s:    param.h
Xprotect.s:    super.h
X
Xputc.s:        const.h type.h $h/const.h $h/type.h
Xputc.s:        $h/com.h
X
Xread.s:        const.h type.h $h/const.h $h/type.h
Xread.s:        $h/com.h
Xread.s:        $h/error.h
Xread.s:        buf.h
Xread.s:        file.h
Xread.s:        fproc.h
Xread.s:        glo.h
Xread.s:        inode.h
Xread.s:        param.h
Xread.s:        super.h
X
Xstadir.s:    const.h type.h $h/const.h $h/type.h
Xstadir.s:    $h/error.h
Xstadir.s:    $h/stat.h
Xstadir.s:    file.h
Xstadir.s:    fproc.h
Xstadir.s:    glo.h
Xstadir.s:    inode.h
Xstadir.s:    param.h
X
Xsuper.s:    const.h type.h $h/const.h $h/type.h
Xsuper.s:    $h/error.h
Xsuper.s:    buf.h
Xsuper.s:    inode.h
Xsuper.s:    super.h
X
Xtable.s:    const.h type.h $h/const.h $h/type.h
Xtable.s:    $h/com.h
Xtable.s:    $h/callnr.h
Xtable.s:    $h/error.h
Xtable.s:    $h/stat.h
Xtable.s:    buf.h
Xtable.s:    dev.h
Xtable.s:    file.h
Xtable.s:    fproc.h
Xtable.s:    glo.h
Xtable.s:    inode.h
Xtable.s:    super.h
X
Xtime.s:        const.h type.h $h/const.h $h/type.h
Xtime.s:        $h/callnr.h
Xtime.s:        $h/com.h
Xtime.s:        $h/error.h
Xtime.s:        file.h
Xtime.s:        fproc.h
Xtime.s:        glo.h
Xtime.s:        inode.h
Xtime.s:        param.h
X
Xutility.s:    const.h type.h $h/const.h $h/type.h
Xutility.s:    $h/com.h
Xutility.s:    $h/error.h
Xutility.s:    buf.h
Xutility.s:    file.h
Xutility.s:    fproc.h
Xutility.s:    glo.h
Xutility.s:    inode.h
Xutility.s:    param.h
Xutility.s:    super.h
X
Xwrite.s:    const.h type.h $h/const.h $h/type.h
Xwrite.s:    $h/error.h
Xwrite.s:    buf.h
Xwrite.s:    file.h
Xwrite.s:    fproc.h
Xwrite.s:    glo.h
Xwrite.s:    inode.h
Xwrite.s:    super.h
+ END-OF-FILE pc_makefile
chmod 'u=rw,g=r,o=r' 'pc_makefile'
set `wc -c 'pc_makefile'`
count=$1
case $count in
4266)    :;;
*)    echo 'Bad character count in ''pc_makefile' >&2
        echo 'Count should be 4266' >&2
esac
echo Extracting 'read.c.cdif'
sed 's/^X//' > 'read.c.cdif' << '+ END-OF-FILE ''read.c.cdif'
X*** /local/ast/minix/tape3b/fs/read.c    Tue Jul 12 23:42:55 1988
X--- read.c    Mon Sep 26 13:04:10 1988
X***************
X*** 143,164 ****
X
X    /* On write, update file size and access time. */
X    if (rw_flag == WRITING) {
X!     if (char_spec == 0 && block_spec == 0 && position > f_size)
X!         rip->i_size = position;
X!     rip->i_modtime = clock_time();
X!     rip->i_dirt = DIRTY;
X    } else {
X      if (rip->i_pipe && position >= rip->i_size) {
X          /* Reset pipe pointers. */
X          rip->i_size = 0;    /* no data left */
X          position = 0;        /* reset reader(s) */
X!         if ( (wf = find_filp(rip, W_BIT)) != NIL_FILP) wf->filp_pos = 0;
X      }
X    }
X    f->filp_pos = position;
X
X    /* Check to see if read-ahead is called for, and if so, set it up. */
X!   if (rw_flag == READING && rip->i_seek == NO_SEEK && position % BLOCK_SIZE
 == 0
X          && (mode_word == I_REGULAR || mode_word == I_DIRECTORY)) {
X      rdahed_inode = rip;
X      rdahedpos = position;
X--- 143,165 ----
X
X    /* On write, update file size and access time. */
X    if (rw_flag == WRITING) {
X!     if (char_spec == 0 && block_spec == 0) {
X!         if (position > f_size) rip->i_size = position;
X!         rip->i_modtime = clock_time();
X!         rip->i_dirt = DIRTY;
X!     }
X    } else {
X      if (rip->i_pipe && position >= rip->i_size) {
X          /* Reset pipe pointers. */
X          rip->i_size = 0;    /* no data left */
X          position = 0;        /* reset reader(s) */
X!         if ( (wf = find_filp(rip, W_BIT)) != NIL_FILP) wf->filp_pos =0;
X      }
X    }
X    f->filp_pos = position;
X
X    /* Check to see if read-ahead is called for, and if so, set it up. */
X!   if (rw_flag == READING && rip->i_seek == NO_SEEK && position % BLOCK_SIZE==
 0
X          && (mode_word == I_REGULAR || mode_word == I_DIRECTORY)) {
X      rdahed_inode = rip;
X      rdahedpos = position;
+ END-OF-FILE read.c.cdif
chmod 'u=rw,g=r,o=r' 'read.c.cdif'
set `wc -c 'read.c.cdif'`
count=$1
case $count in
1736)    :;;
*)    echo 'Bad character count in ''read.c.cdif' >&2
        echo 'Count should be 1736' >&2
esac
exit 0