Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!lucy.swin.edu.au!news.rmit.EDU.AU!news.unimelb.EDU.AU!munnari.OZ.AU!spool.mu.edu!howland.erols.net!math.ohio-state.edu!news.cis.ohio-state.edu!nntp.sei.cmu.edu!fs7.ece.cmu.edu!cantaloupe.srv.cs.cmu.edu!moore.fac.cs.cmu.edu!moore
From: moore+@moore.fac.cs.cmu.edu (Dale Moore)
Newsgroups: comp.unix.bsd.netbsd.misc
Subject: NetBSD 1.2 /usr/bin/ar and large uid's
Date: 6 Feb 1997 18:29:10 GMT
Organization: Carnegie Mellon University
Lines: 39
Message-ID: <5dd7tm$8c9@cantaloupe.srv.cs.cmu.edu>
NNTP-Posting-Host: moore.fac.cs.cmu.edu
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.netbsd.misc:5310
Short Version:
/usr/bin/ar barfs on UID's > 999,999
Long Version:
The format for archive files on Digital Unix is described in
the include file
/usr/include/ar.h
Inside the archive file are a collection of ".o" files.
The archive format allows for storing the name, owner,
and group of the original ".o" file. It stores the uid
as a 6 character ascii decimal representation. The
gid is handled in a similar fashion.
I suspect that the program "/usr/bin/ar" writes the file by
doing something like
printf("%-6u", uid);
Unfortunately, the control characters "%-6u" specifies that
the resulting string must be at least 6 characters long, perhaps
longer. It is this perhaps longer that I suspect tends to screw
things up. When the UID is greater than 999,999 we overflow
the 6 character array allocated to hold the uid field. This causes
subsequent output data to be offset by one or more bytes.
I would send this directly to a NetBSD software bug reporting
center, or software quality assurance center, but
I don't have a net address. If you could supply one
I would appreciate it.
As a workaround, I've built a private version based on the
NetBSD1.2 sources.
Dale Moore
Senior Research Systems Programmer
School of Computer Science
Carnegie Mellon University