4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-30 19:10:36 +08:00

* cygtls.h (unionent): Move from net.cc.

(unionent::struct_type): Move enum here.
(_local_storage::hostent_buf): Define as unionent.
(_local_storage::protoent_buf): Ditto.
(_local_storage::servent_buf): Ditto.
* net.cc (unionent): Move to cygtls.h.
(struct_type): Ditto.
(dup_ent): Define one function per {host,proto,serv}ent type.
(cygwin_getprotobyname): Simplify dup_ent call.  Removed now-unneeded return
type coercion.
(cygwin_getprotobynumber): Ditto.
(cygwin_getservbyname): Ditto.
(cygwin_getservbyport): Ditto.
(cygwin_gethostbyname): Ditto.
(cygwin_gethostbyaddr): Ditto.  tlsoffsets.h: Regenerate.
This commit is contained in:
Christopher Faylor 2008-09-16 02:04:27 +00:00
parent fb4e8779d0
commit f2c11dadcf
4 changed files with 130 additions and 94 deletions

View File

@ -1,3 +1,22 @@
2008-09-15 Christopher Faylor <me+cygwin@cgf.cx>
* cygtls.h (unionent): Move from net.cc.
(unionent::struct_type): Move enum here.
(_local_storage::hostent_buf): Define as unionent.
(_local_storage::protoent_buf): Ditto.
(_local_storage::servent_buf): Ditto.
* net.cc (unionent): Move to cygtls.h.
(struct_type): Ditto.
(dup_ent): Define one function per {host,proto,serv}ent type.
(cygwin_getprotobyname): Simplify dup_ent call. Removed now-unneeded
return type coercion.
(cygwin_getprotobynumber): Ditto.
(cygwin_getservbyname): Ditto.
(cygwin_getservbyport): Ditto.
(cygwin_gethostbyname): Ditto.
(cygwin_gethostbyaddr): Ditto.
tlsoffsets.h: Regenerate.
2008-09-12 Christopher Faylor <me+cygwin@cgf.cx> 2008-09-12 Christopher Faylor <me+cygwin@cgf.cx>
* Makefile.in: Add -c option which is now removed from COMPILE_C*. * Makefile.in: Add -c option which is now removed from COMPILE_C*.
@ -73,13 +92,14 @@
* dll_init.cc (release_upto): Fix typo involving incorrect use of '|'. * dll_init.cc (release_upto): Fix typo involving incorrect use of '|'.
* fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Avoid a * fhandler_disk_file.cc (fhandler_base::fstat_by_handle): Avoid a
compiler warning regarding coercing type-punned variables. compiler warning regarding coercing type-punned variables.
(fhandler_base::fstat_by_name): Ditto. fhandler_fifo.cc (fhandler_base::fstat_by_name): Ditto.
(fhandler_fifo::open_nonserver): Fix = vs. == typo. * fhandler_fifo.cc (fhandler_fifo::open_nonserver): Fix = vs. == typo.
(fhandler_fifo::wait): Add all conditions to switch statement to avoid (fhandler_fifo::wait): Add all conditions to switch statement to avoid
a compiler warning. a compiler warning.
* fhandler_process.cc: Avoid unneeded initialization of variables to * fhandler_process.cc: Avoid unneeded initialization of variables to
zero. zero.
(fhandler_socket::listen): Add braces around initializer. * fhandler_socket.cc (fhandler_socket::listen): Add braces around
initializer.
* flock.cc (inode_t::get_all_locks_list): Reorganize to avoid a * flock.cc (inode_t::get_all_locks_list): Reorganize to avoid a
compiler warning. Fix problem with EWOULDBLOCK error return. compiler warning. Fix problem with EWOULDBLOCK error return.
* path.cc (GUID_shortcut): Use braces around struct initializer. * path.cc (GUID_shortcut): Use braces around struct initializer.

View File

@ -51,6 +51,24 @@ public:
friend class _cygtls; friend class _cygtls;
}; };
class unionent
{
public:
char *name;
char **list;
short port_proto_addrtype;
short h_len;
union
{
char *s_proto;
char **h_addr_list;
};
enum struct_type
{
t_hostent, t_protoent, t_servent
};
};
struct _local_storage struct _local_storage
{ {
/* /*
@ -102,11 +120,12 @@ struct _local_storage
/* net.cc */ /* net.cc */
char *ntoa_buf; // note: malloced char *ntoa_buf; // note: malloced
struct protoent *protoent_buf; // note: malloced
struct servent *servent_buf; // note: malloced
struct hostent *hostent_buf; // note: malloced
char signamebuf[sizeof ("Unknown signal 4294967295 ")]; char signamebuf[sizeof ("Unknown signal 4294967295 ")];
unionent *hostent_buf; // note: malloced
unionent *protoent_buf; // note: malloced
unionent *servent_buf; // note: malloced
/* cygthread.cc */ /* cygthread.cc */
char unknown_thread_name[30]; char unknown_thread_name[30];

View File

@ -293,24 +293,6 @@ struct pservent
}; };
#pragma pack(pop) #pragma pack(pop)
struct unionent
{
char *name;
char **list;
short port_proto_addrtype;
short h_len;
union
{
char *s_proto;
char **h_addr_list;
};
};
enum struct_type
{
t_hostent, t_protoent, t_servent
};
static const char *entnames[] = {"host", "proto", "serv"}; static const char *entnames[] = {"host", "proto", "serv"};
/* Generic "dup a {host,proto,serv}ent structure" function. /* Generic "dup a {host,proto,serv}ent structure" function.
@ -322,18 +304,16 @@ static const char *entnames[] = {"host", "proto", "serv"};
The 'unionent' struct is a union of all of the currently used The 'unionent' struct is a union of all of the currently used
*ent structure. */ *ent structure. */
/* FIXME: Use an overloaded function or template here. */
#define dup_ent(old, src, type) __dup_ent ((unionent *&) *((unionent *) _my_tls.locals.old), (unionent *) (src), type)
#ifdef DEBUGGING #ifdef DEBUGGING
static void * static void *
#else #else
static inline void * static inline void *
#endif #endif
__dup_ent (unionent *&dst, unionent *src, struct_type type) dup_ent (unionent *&dst, unionent *src, unionent::struct_type type)
{ {
if (dst) if (dst)
debug_printf ("old %sent structure \"%s\" %p\n", entnames[type], debug_printf ("old %sent structure \"%s\" %p\n", entnames[type],
((unionent *) dst)->name, dst); dst->name, dst);
if (!src) if (!src)
{ {
@ -347,13 +327,13 @@ __dup_ent (unionent *&dst, unionent *src, struct_type type)
int sz, struct_sz; int sz, struct_sz;
switch (type) switch (type)
{ {
case t_protoent: case unionent::t_protoent:
struct_sz = sizeof (protoent); struct_sz = sizeof (protoent);
break; break;
case t_servent: case unionent::t_servent:
struct_sz = sizeof (servent); struct_sz = sizeof (servent);
break; break;
case t_hostent: case unionent::t_hostent:
struct_sz = sizeof (hostent); struct_sz = sizeof (hostent);
break; break;
default: default:
@ -386,12 +366,12 @@ __dup_ent (unionent *&dst, unionent *src, struct_type type)
/* Do servent/hostent specific processing */ /* Do servent/hostent specific processing */
int protolen = 0; int protolen = 0;
int addr_list_len = 0; int addr_list_len = 0;
if (type == t_servent) if (type == unionent::t_servent)
{ {
if (src->s_proto) if (src->s_proto)
sz += (protolen = strlen_round (src->s_proto)); sz += (protolen = strlen_round (src->s_proto));
} }
else if (type == t_hostent) else if (type == unionent::t_hostent)
{ {
/* Calculate the length and storage used for h_addr_list */ /* Calculate the length and storage used for h_addr_list */
for (av = src->h_addr_list; av && *av; av++) for (av = src->h_addr_list; av && *av; av++)
@ -412,7 +392,6 @@ __dup_ent (unionent *&dst, unionent *src, struct_type type)
unsigned rsz = 256 * ((sz + 255) / 256); unsigned rsz = 256 * ((sz + 255) / 256);
dst = (unionent *) realloc (dst, rsz); dst = (unionent *) realloc (dst, rsz);
/* Hopefully, this worked. */
if (dst) if (dst)
{ {
memset (dst, 0, sz); memset (dst, 0, sz);
@ -444,9 +423,9 @@ __dup_ent (unionent *&dst, unionent *src, struct_type type)
} }
/* Do servent/protoent/hostent specific processing. */ /* Do servent/protoent/hostent specific processing. */
if (type == t_protoent) if (type == unionent::t_protoent)
debug_printf ("protoent %s %x %x", dst->name, dst->list, dst->port_proto_addrtype); debug_printf ("protoent %s %x %x", dst->name, dst->list, dst->port_proto_addrtype);
else if (type == t_servent) else if (type == unionent::t_servent)
{ {
if (src->s_proto) if (src->s_proto)
{ {
@ -454,7 +433,7 @@ __dup_ent (unionent *&dst, unionent *src, struct_type type)
dp += protolen; dp += protolen;
} }
} }
else if (type == t_hostent) else if (type == unionent::t_hostent)
{ {
/* Transfer h_len and duplicate contents of h_addr_list, using /* Transfer h_len and duplicate contents of h_addr_list, using
memory after 'list' allocation. */ memory after 'list' allocation. */
@ -474,6 +453,24 @@ __dup_ent (unionent *&dst, unionent *src, struct_type type)
return dst; return dst;
} }
static inline hostent *
dup_ent (hostent *src)
{
return (hostent *) dup_ent (_my_tls.locals.hostent_buf, (unionent *) src, unionent::t_hostent);
}
static inline protoent *
dup_ent (protoent *src)
{
return (protoent *) dup_ent (_my_tls.locals.protoent_buf, (unionent *) src, unionent::t_protoent);
}
static inline servent *
dup_ent (servent *src)
{
return (servent *) dup_ent (_my_tls.locals.servent_buf, (unionent *) src, unionent::t_servent);
}
/* exported as getprotobyname: standards? */ /* exported as getprotobyname: standards? */
extern "C" struct protoent * extern "C" struct protoent *
cygwin_getprotobyname (const char *p) cygwin_getprotobyname (const char *p)
@ -481,14 +478,14 @@ cygwin_getprotobyname (const char *p)
myfault efault; myfault efault;
if (efault.faulted (EFAULT)) if (efault.faulted (EFAULT))
return NULL; return NULL;
return (protoent *) dup_ent (protoent_buf, getprotobyname (p), t_protoent); return dup_ent (getprotobyname (p));
} }
/* exported as getprotobynumber: standards? */ /* exported as getprotobynumber: standards? */
extern "C" struct protoent * extern "C" struct protoent *
cygwin_getprotobynumber (int number) cygwin_getprotobynumber (int number)
{ {
return (protoent *) dup_ent (protoent_buf, getprotobynumber (number), t_protoent); return dup_ent (getprotobynumber (number));
} }
bool bool
@ -786,7 +783,7 @@ cygwin_getservbyname (const char *name, const char *proto)
if (efault.faulted (EFAULT)) if (efault.faulted (EFAULT))
return NULL; return NULL;
servent *res = (servent *) dup_ent (servent_buf, getservbyname (name, proto), t_servent); servent *res = dup_ent (getservbyname (name, proto));
syscall_printf ("%p = getservbyname (%s, %s)", res, name, proto); syscall_printf ("%p = getservbyname (%s, %s)", res, name, proto);
return res; return res;
} }
@ -800,8 +797,8 @@ cygwin_getservbyport (int port, const char *proto)
if (efault.faulted (EFAULT)) if (efault.faulted (EFAULT))
return NULL; return NULL;
servent *res = (servent *) dup_ent (servent_buf, getservbyport (port, proto), t_servent); servent *res = dup_ent (getservbyport (port, proto));
syscall_printf ("%p = getservbyport (%d, %s)", _my_tls.locals.servent_buf, port, proto); syscall_printf ("%p = getservbyport (%d, %s)", res, port, proto);
return res; return res;
} }
@ -863,7 +860,7 @@ cygwin_gethostbyname (const char *name)
h = &tmp; h = &tmp;
} }
hostent *res = (hostent *) dup_ent (hostent_buf, h, t_hostent); hostent *res = dup_ent (h);
if (res) if (res)
debug_printf ("h_name %s", res->h_name); debug_printf ("h_name %s", res->h_name);
else else
@ -883,9 +880,9 @@ cygwin_gethostbyaddr (const char *addr, int len, int type)
if (efault.faulted (EFAULT)) if (efault.faulted (EFAULT))
return NULL; return NULL;
hostent *res = (hostent *) dup_ent (hostent_buf, gethostbyaddr (addr, len, type), t_hostent); hostent *res = dup_ent (gethostbyaddr (addr, len, type));
if (res) if (res)
debug_printf ("h_name %s", _my_tls.locals.hostent_buf->h_name); debug_printf ("h_name %s", res->h_name);
else else
set_host_errno (); set_host_errno ();
return res; return res;

View File

@ -1,6 +1,6 @@
//;# autogenerated: Do not edit. //;# autogenerated: Do not edit.
//; $tls::sizeof__cygtls = 4292; //; $tls::sizeof__cygtls = 4296;
//; $tls::func = -12700; //; $tls::func = -12700;
//; $tls::pfunc = 0; //; $tls::pfunc = 0;
//; $tls::el = -12696; //; $tls::el = -12696;
@ -39,30 +39,30 @@
//; $tls::p__dontuse = 420; //; $tls::p__dontuse = 420;
//; $tls::locals = -11216; //; $tls::locals = -11216;
//; $tls::plocals = 1484; //; $tls::plocals = 1484;
//; $tls::_ctinfo = -9512; //; $tls::_ctinfo = -9508;
//; $tls::p_ctinfo = 3188; //; $tls::p_ctinfo = 3192;
//; $tls::andreas = -9508; //; $tls::andreas = -9504;
//; $tls::pandreas = 3192; //; $tls::pandreas = 3196;
//; $tls::wq = -9492; //; $tls::wq = -9488;
//; $tls::pwq = 3208; //; $tls::pwq = 3212;
//; $tls::prev = -9464; //; $tls::prev = -9460;
//; $tls::pprev = 3236; //; $tls::pprev = 3240;
//; $tls::next = -9460; //; $tls::next = -9456;
//; $tls::pnext = 3240; //; $tls::pnext = 3244;
//; $tls::sig = -9456; //; $tls::sig = -9452;
//; $tls::psig = 3244; //; $tls::psig = 3248;
//; $tls::incyg = -9452; //; $tls::incyg = -9448;
//; $tls::pincyg = 3248; //; $tls::pincyg = 3252;
//; $tls::spinning = -9448; //; $tls::spinning = -9444;
//; $tls::pspinning = 3252; //; $tls::pspinning = 3256;
//; $tls::stacklock = -9444; //; $tls::stacklock = -9440;
//; $tls::pstacklock = 3256; //; $tls::pstacklock = 3260;
//; $tls::stackptr = -9440; //; $tls::stackptr = -9436;
//; $tls::pstackptr = 3260; //; $tls::pstackptr = 3264;
//; $tls::stack = -9436; //; $tls::stack = -9432;
//; $tls::pstack = 3264; //; $tls::pstack = 3268;
//; $tls::initialized = -8412; //; $tls::initialized = -8408;
//; $tls::pinitialized = 4288; //; $tls::pinitialized = 4292;
//; __DATA__ //; __DATA__
#define tls_func (-12700) #define tls_func (-12700)
@ -103,27 +103,27 @@
#define tls_p__dontuse (420) #define tls_p__dontuse (420)
#define tls_locals (-11216) #define tls_locals (-11216)
#define tls_plocals (1484) #define tls_plocals (1484)
#define tls__ctinfo (-9512) #define tls__ctinfo (-9508)
#define tls_p_ctinfo (3188) #define tls_p_ctinfo (3192)
#define tls_andreas (-9508) #define tls_andreas (-9504)
#define tls_pandreas (3192) #define tls_pandreas (3196)
#define tls_wq (-9492) #define tls_wq (-9488)
#define tls_pwq (3208) #define tls_pwq (3212)
#define tls_prev (-9464) #define tls_prev (-9460)
#define tls_pprev (3236) #define tls_pprev (3240)
#define tls_next (-9460) #define tls_next (-9456)
#define tls_pnext (3240) #define tls_pnext (3244)
#define tls_sig (-9456) #define tls_sig (-9452)
#define tls_psig (3244) #define tls_psig (3248)
#define tls_incyg (-9452) #define tls_incyg (-9448)
#define tls_pincyg (3248) #define tls_pincyg (3252)
#define tls_spinning (-9448) #define tls_spinning (-9444)
#define tls_pspinning (3252) #define tls_pspinning (3256)
#define tls_stacklock (-9444) #define tls_stacklock (-9440)
#define tls_pstacklock (3256) #define tls_pstacklock (3260)
#define tls_stackptr (-9440) #define tls_stackptr (-9436)
#define tls_pstackptr (3260) #define tls_pstackptr (3264)
#define tls_stack (-9436) #define tls_stack (-9432)
#define tls_pstack (3264) #define tls_pstack (3268)
#define tls_initialized (-8412) #define tls_initialized (-8408)
#define tls_pinitialized (4288) #define tls_pinitialized (4292)