delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2013/05/02/14:50:21

X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f
X-Recipient: djgpp-workers AT delorie DOT com
X-Authenticated: #27081556
X-Provags-ID: V01U2FsdGVkX18DxU5mCigDVdJROQLe/lYZXEIbrUVs92qoEEu1oV
IWfV7uCQjuzML/
Message-ID: <5182B57E.10301@gmx.de>
Date: Thu, 02 May 2013 20:50:38 +0200
From: Juan Manuel Guerrero <juan DOT guerrero AT gmx DOT de>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121025 Thunderbird/16.0.2
MIME-Version: 1.0
To: djgpp-workers AT delorie DOT com
Subject: Re: The encoding of S_IFREG
References: <201305011954 DOT r41JsMnW006530 AT dexter DOT ludd DOT ltu DOT se>
In-Reply-To: <201305011954.r41JsMnW006530@dexter.ludd.ltu.se>
X-Y-GMX-Trusted: 0
Reply-To: djgpp-workers AT delorie DOT com

Am 01.05.2013 21:54, schrieb Martin Str|mberg:
> According to Juan Manuel Guerrero:
[snip]
 > I'd think the thinking was, set a bit to indicate some special thing
 > about this "file". So if no bit is set then it must be a regular file.

Yes, I assumed something like that.  I could accept this if it would
be necessary to save bits or place.


 > 1. Why would 0 not be a valid indication? Does a/the spec say so? I
 > think this is a bug in the code your trying to port.

I do not know if some spec say so but I have looked at sys/stat.h
of linux, bsd and cygwin.  No one of those set any one of those
bits stored in st_mode to zero.  This seems to be a djgpp choice.
May be the intention was to be compatible to some old borland
compiler.  But keeping that compatibility with a compiler that has
stopped to be sold 20 years ago should not be a reason nowadays.

In the code to port, the file type is identified by setting
certain flag to the appropriate S_IF* bit.  If this flag becomes
zero it is assumed that some thing has gone wrong.  This way of
coding may be considered a bug because the spec does not say that
all S_IF* bits must be different from zero.  But the systems I
have inspected set no one of this bits to zero so that the code
works almost everywhere except for djgpp.


 > 2. Is st_mode 16 bits in DJGPP? Otherwise why not use 0x10000?

I do not thing so because some file mode bits like S_ISUID is set
to 0x80000000.  Neitherless I do not think the value should be set
to 0x10000.  S_IFMT has been chosen to be 0xf000 and the file
type bits go from 0x0000 to 0x8000.  So if the 0x0000 value should
be replaced it should be replaced by a value in this range if possible.
In this case 0x6000 or 0x7000 would be a good choice.

#define S_IFREG        0x0000
#define S_IFBLK        0x1000
#define S_IFCHR        0x2000
#define S_IFDIR        0x3000
#define S_IFIFO        0x4000
#define S_IFLABEL    0x5000
#define S_IFLNK         0x8000


Regards,
Juan M. Guerrero


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019