Subject: Re: src/gnu/usr.bin/egcs/common
To: None <tech-userlevel@netbsd.org>
From: Todd Vierling <tv@pobox.com>
List: tech-userlevel
Date: 12/25/1999 23:52:56
: The point is, this offset depends on sizeof(FILE)! The application's
: compiled-in idea of sizeof(FILE) must match the layout of the __sF
: array, or you're screwed.
I'd like to extend (Bill's?) proposal of __sL a little further; names are
somewhat moot and used only for example.
struct __sFILEext {
pthread_mutex_t __smutex;
...mutex lock AND FUTURE EXPANSION, which can be resized...
};
typedef struct __sFILE {
...contents of __sFILE as seen today...
struct __sFILEext __Fext;
} FILE;
Now, an extra flag here would indicate something very special:
#define __SEXC 0x8000 /* __sFILEext must be found through cookie */
This indicates that the cookie contains, as its first memory element, a
pointer to the __sFILEext structure. The expression to find the fields in
__sFILEext would be:
#define __sext(f) ((f->_flags & __SEXC) ? \
*(struct __sFILEext **)(f->_cookie) : &(f->__Fext))
Now, we can get to the mutex:
__sext(f)->__smutex
This way, the stdio FILE structures would be taken care of, without losing
binary compatibility, or changing how the cookie works for ordinary
funopen()-allocated FILEs.
--
-- Todd Vierling (tv@pobox.com)