RTEMS and unix directory

Joel Sherrill joel.sherrill@oarcorp.com
Tue Nov 18 23:03:00 GMT 2008


Thanks Craig.   It is nice to be able to eliminate duplication. :-D

Jeff.. at this point, you have merged all my patches.   I will start
looking at the unix directory now.

--joel

Jeff Johnston wrote:
> Howland Craig D (Craig) wrote:
>   
>> I see a couple of problems with the proposed ttyname.c.
>>  
>> First, it appears to have a mistake in how ttyname_r() works.
>> http://www.opengroup.org/onlinepubs/009695399/functions/ttyname.html
>> says:
>> "Upon successful completion, ttyname() shall return a pointer to a
>> string. Otherwise, a null pointer shall be returned and errno set to
>> indicate the error.
>> If successful, the ttyname_r() function shall return zero. Otherwise, an
>> error number shall be returned to indicate the error."
>> The given ttyname_r() sets errno with the error, but has a constant
>> return of -1 for errors.  While the C99 standard allows functions to
>> set errno even when the use of errno has not been defined for that
>> function, I would think that it would be better if it didn't.
>>  
>> Secondly, the namesize parameter is ignored, so that name could be
>> overrun if the user did not allow enough space.  (Unfortunately, the
>> fix for this entails a fairly large array on the stack.)
>>  
>> Attached is an alternate proposal, which I made following your lead,
>> but started with the file from the unix directory.  (I was wondering
>> what was going on with the spurious rval in the rtems file, and so
>> decided
>> to start with the earlier file.)  The unix directory file that I started
>> with was in unix format in contrast to your DOS file, so use -b if doing
>> a diff.
>>  
>> An interesting question is the exact error return values.  I used what
>> rtems did except in two cases.  First, the tcgetaddr() error return is
>> used instead of fixed EBADF, as tcgetaddr() can return EBADF or ENOTTY.
>> Second, if the given fd turns out to not be a character device, I
>> thought that ENOTTY is better than EBADF.  (It's not perfect, but it
>> fits better than saying the fd is bad.)
>>  
>> Additionally, there's a question as to what ought to be returned if
>> opendir() fails.  I left it as EBADF, as given the choices in POSIX for
>> ttyname EBADF is as good as ENOTTY, but neither one of them are really
>> accurate.  It is permitted to have other error returns than what POSIX
>> specifically calls for, but I couldn't decide what might be enough
>> better
>> to change to.  ENODEV and ENOENT were the best candidates that I found
>> for the opendir() call.  Thoughts on going to one of them?
>>  
>>   
>>     
> Craig,
>
>   Thanks for the replacement.  I have checked it in to the libc/unix 
> directory and added a check for #ifndef _NO_TTYNAME which allows 
> platforms to skip the code if desired by defining _NO_TTYNAME.  I will 
> be adding similar flags to the other routines in lib/unix.
>
> FWIW: I thought your assessment of what to return on failure was fine as-is.
>
> -- Jeff J.
>   
>> Craig Howland
>>  
>>
>> -----Original Message-----
>> From: newlib-owner@sourceware.org [mailto:newlib-owner@sourceware.org]
>> On Behalf Of Joel Sherrill
>> Sent: Wednesday, November 12, 2008 10:55 AM
>> To: newlib@sources.redhat.com
>> Subject: RTEMS and unix directory
>>
>> Hi,
>>
>> After examining how RTEMS could use the posix
>> subdirectory, I moved onto the unix subdirectory.
>> ...
>>
>> Our ttyname.c appears to have originated with
>> the one in this directory but has been slightly
>> modified to have ttyname_r.  So our version
>> could go in here and be used.  I have attached
>> it for review.
>>
>> Is the configure/build infrastructure able to
>> turn on just the pieces listed above and ttyname.c
>> if you are OK with our version?
>>
>> ...
>>   
>>     
>
>   


-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill@OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985




More information about the Newlib mailing list