1998-02-20 18:43  Ulrich Drepper  <drepper@cygnus.com>

	* hesiod/hesiod.c: Pretty print.  Don't use __ protected names.
	* iconvdata/8bit-gap.c: Likewise.
	* iconvdata/8bit-generic.c: Likewise.
	* iconvdata/iso6937.c: Likewise.
	* iconvdata/iso8859-1.c: Likewise.
	* iconvdata/sjis.c: Likewise.
	* iconvdata/t61.c: Likewise.

1998-02-20  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/bits/termios.h: Replace all negative
	feature tests by positive feature tests.

1998-02-19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/unlockpt.c: Always return a value.

1998-02-20  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dlvsym.c (dlvsym_doit): More corrections.
	Patch by Andreas Jaeger.
This commit is contained in:
Ulrich Drepper 1998-02-20 18:45:36 +00:00
parent 03e4219e77
commit dfbad9c855
14 changed files with 168 additions and 127 deletions

6
BUGS
View File

@ -1,7 +1,7 @@
List of known bugs (certainly very incomplete)
----------------------------------------------
Time-stamp: <1997-12-03T15:30:07+0100 drepper>
Time-stamp: <1998-02-20T15:02:41-0800 drepper>
This following list contains those bugs which I'm aware of. Please
make sure that bugs you report are not listed here. If you can fix one
@ -15,7 +15,9 @@ GNU project. There is an easy to use WWW interface available at
I would appreciate it very much if you could verify the problem was not
reported before by looking through the database. To make the information
in this database as useful as possible please report bugs always using the
`glibcbug' shell script which gets installed with GNU libc.
`glibcbug' shell script which gets installed with GNU libc. Before reporting
a bug please check the FAQ since it discusses also a lot of problematic
situations.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -1,3 +1,27 @@
1998-02-20 18:43 Ulrich Drepper <drepper@cygnus.com>
* hesiod/hesiod.c: Pretty print. Don't use __ protected names.
* iconvdata/8bit-gap.c: Likewise.
* iconvdata/8bit-generic.c: Likewise.
* iconvdata/iso6937.c: Likewise.
* iconvdata/iso8859-1.c: Likewise.
* iconvdata/sjis.c: Likewise.
* iconvdata/t61.c: Likewise.
1998-02-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/bits/termios.h: Replace all negative
feature tests by positive feature tests.
1998-02-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/unlockpt.c: Always return a value.
1998-02-20 Ulrich Drepper <drepper@cygnus.com>
* elf/dlvsym.c (dlvsym_doit): More corrections.
Patch by Andreas Jaeger.
1998-02-19 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/sigqueue.c: Fix weak alias definition.

View File

@ -1,3 +1,13 @@
When Berkeley DB is distributed as part of the GNU system, the Berkeley
DB license requirement that derivative works using Berkeley DB themselves
be freely redistributable, does not apply to programs loading standard
UNIX interfaces via the GNU C library and dynamically loading Berkeley DB
support to obtain the underlying functionality.
Sleepycat Software, Inc.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The LICENSE file, mentioned in the beginning of the source files, can
be found together with all the other relevant license texts in the
manual and the INSTALL file in the toplevel directory.

View File

@ -74,6 +74,7 @@ RTLD_NEXT used in code not dynamically loaded"));
&args->ref,
mapscope,
NULL,
&args->version,
match);
}
}

View File

@ -455,7 +455,7 @@ extern void _dl_start_profile (struct link_map *map, const char *output_dir);
extern void _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc);
/* Show the members of the auxiliry aray passed up from the kernel. */
/* Show the members of the auxiliary array passed up from the kernel. */
extern void _dl_show_auxv (void);
__END_DECLS

View File

@ -58,47 +58,48 @@ static const char rcsid[] = "$Id$";
/* A few operating systems don't define these. */
#ifndef C_HS
#define C_HS 4
# define C_HS 4
#endif
#ifndef T_TXT
#define T_TXT 16
# define T_TXT 16
#endif
static int read_config_file(struct hesiod_p *ctx, const char *filename);
static char **get_txt_records(struct hesiod_p *ctx, int class,
const char *name);
static int read_config_file (struct hesiod_p *ctx, const char *filename);
static char **get_txt_records (struct hesiod_p *ctx, int class,
const char *name);
#ifdef _LIBC
# define cistrcmp(s1, s2) strcasecmp (s1, s2)
#else
static int cistrcmp(const char *s1, const char *s2);
static int cistrcmp (const char *s1, const char *s2);
#endif
/* This function is called to initialize a hesiod_p. */
int hesiod_init(void **context)
int
hesiod_init (void **context)
{
struct hesiod_p *ctx;
const char *p, *configname;
ctx = malloc(sizeof(struct hesiod_p));
ctx = malloc (sizeof (struct hesiod_p));
if (ctx)
{
*context = ctx;
configname = __secure_getenv("HESIOD_CONFIG");
configname = __secure_getenv ("HESIOD_CONFIG");
if (!configname)
configname = SYSCONFDIR "/hesiod.conf";
if (read_config_file(ctx, configname) >= 0)
if (read_config_file (ctx, configname) >= 0)
{
/* The default rhs can be overridden by an environment variable. */
p = __secure_getenv("HES_DOMAIN");
p = __secure_getenv ("HES_DOMAIN");
if (p)
{
if (ctx->rhs)
free(ctx->rhs);
ctx->rhs = malloc(strlen(p) + 2);
free (ctx->rhs);
ctx->rhs = malloc (strlen (p) + 2);
if (ctx->rhs)
{
*ctx->rhs = '.';
strcpy(ctx->rhs + 1, (*p == '.') ? p + 1 : p);
strcpy (ctx->rhs + 1, (*p == '.') ? p + 1 : p);
return 0;
}
else
@ -112,47 +113,49 @@ int hesiod_init(void **context)
__set_errno (ENOMEM);
if (ctx->lhs)
free(ctx->lhs);
free (ctx->lhs);
if (ctx->rhs)
free(ctx->rhs);
free (ctx->rhs);
if (ctx)
free(ctx);
free (ctx);
return -1;
}
/* This function deallocates the hesiod_p. */
void hesiod_end(void *context)
void
hesiod_end (void *context)
{
struct hesiod_p *ctx = (struct hesiod_p *) context;
free(ctx->rhs);
free (ctx->rhs);
if (ctx->lhs)
free(ctx->lhs);
free(ctx);
free (ctx->lhs);
free (ctx);
}
/* This function takes a hesiod (name, type) and returns a DNS
* name which is to be resolved.
*/
char *hesiod_to_bind(void *context, const char *name, const char *type)
char *
hesiod_to_bind (void *context, const char *name, const char *type)
{
struct hesiod_p *ctx = (struct hesiod_p *) context;
char bindname[MAXDNAME], *p, *endp, *ret, **rhs_list = NULL;
const char *rhs;
size_t len;
endp = stpcpy(bindname, name);
endp = stpcpy (bindname, name);
/* Find the right right hand side to use, possibly truncating bindname. */
p = strchr(bindname, '@');
p = strchr (bindname, '@');
if (p)
{
*p++ = 0;
if (strchr(p, '.'))
if (strchr (p, '.'))
rhs = name + (p - bindname);
else
{
rhs_list = hesiod_resolve(context, p, "rhs-extension");
rhs_list = hesiod_resolve (context, p, "rhs-extension");
if (rhs_list)
rhs = *rhs_list;
else
@ -161,82 +164,85 @@ char *hesiod_to_bind(void *context, const char *name, const char *type)
return NULL;
}
}
} else
rhs = ctx->rhs;
}
else
rhs = ctx->rhs;
/* See if we have enough room. */
len = (endp - bindname) + 1 + strlen(type);
len = (endp - bindname) + 1 + strlen (type);
if (ctx->lhs)
len += strlen(ctx->lhs) + ((ctx->lhs[0] != '.') ? 1 : 0);
len += strlen(rhs) + ((rhs[0] != '.') ? 1 : 0);
if (len > sizeof(bindname) - 1)
len += strlen (ctx->lhs) + ((ctx->lhs[0] != '.') ? 1 : 0);
len += strlen (rhs) + ((rhs[0] != '.') ? 1 : 0);
if (len > sizeof (bindname) - 1)
{
if (rhs_list)
hesiod_free_list(context, rhs_list);
hesiod_free_list (context, rhs_list);
__set_errno (EMSGSIZE);
return NULL;
}
/* Put together the rest of the domain. */
endp = __stpcpy (__stpcpy (endp, "."), type);
endp = stpcpy (stpcpy (endp, "."), type);
if (ctx->lhs)
{
if (ctx->lhs[0] != '.')
endp = __stpcpy (endp, ".");
endp = __stpcpy (endp, ctx->lhs);
endp = stpcpy (endp, ".");
endp = stpcpy (endp, ctx->lhs);
}
if (rhs[0] != '.')
endp = __stpcpy (endp, ".");
endp = __stpcpy (endp, rhs);
endp = stpcpy (endp, ".");
endp = stpcpy (endp, rhs);
/* rhs_list is no longer needed, since we're done with rhs. */
if (rhs_list)
hesiod_free_list(context, rhs_list);
hesiod_free_list (context, rhs_list);
/* Make a copy of the result and return it to the caller. */
ret = malloc((endp - bindname) + 1);
ret = malloc ((endp - bindname) + 1);
if (!ret)
{
__set_errno (ENOMEM);
return NULL;
}
strcpy(ret, bindname);
return ret;
return strcpy (ret, bindname);
}
/* This is the core function. Given a hesiod name and type, it
* returns an array of strings returned by the resolver.
*/
char **hesiod_resolve(void *context, const char *name, const char *type)
char **
hesiod_resolve (void *context, const char *name, const char *type)
{
struct hesiod_p *ctx = (struct hesiod_p *) context;
char *bindname, **retvec;
bindname = hesiod_to_bind(context, name, type);
if (!bindname)
bindname = hesiod_to_bind (context, name, type);
if (bindname == NULL)
return NULL;
retvec = get_txt_records(ctx, ctx->classes[0], bindname);
if (retvec == NULL && errno == ENOENT && ctx->classes[1])
retvec = get_txt_records(ctx, ctx->classes[1], bindname);
retvec = get_txt_records (ctx, ctx->classes[1], bindname);
free(bindname);
free (bindname);
return retvec;
}
void hesiod_free_list(void *context, char **list)
void
hesiod_free_list (void *context, char **list)
{
char **p;
for (p = list; *p; p++)
free(*p);
free(list);
free (*p);
free (list);
}
/* This function parses the /etc/hesiod.conf file. Returns 0 on success,
* -1 on failure. On failure, it might leave values in ctx->lhs or
* ctx->rhs which need to be freed by the caller. */
static int read_config_file(struct hesiod_p *ctx, const char *filename)
static int
read_config_file (struct hesiod_p *ctx, const char *filename)
{
char *key, *data, *p, **which;
char buf[MAXDNAME + 7];
@ -248,16 +254,16 @@ static int read_config_file(struct hesiod_p *ctx, const char *filename)
ctx->classes[1] = C_HS;
/* Try to open the configuration file. */
fp = fopen(filename, "r");
if (!fp)
fp = fopen (filename, "r");
if (fp = NULL)
{
/* Use compiled in default domain names. */
ctx->lhs = malloc(strlen(DEF_LHS) + 1);
ctx->rhs = malloc(strlen(DEF_RHS) + 1);
ctx->lhs = malloc (strlen (DEF_LHS) + 1);
ctx->rhs = malloc (strlen (DEF_RHS) + 1);
if (ctx->lhs && ctx->rhs)
{
strcpy(ctx->lhs, DEF_LHS);
strcpy(ctx->rhs, DEF_RHS);
strcpy (ctx->lhs, DEF_LHS);
strcpy (ctx->rhs, DEF_RHS);
return 0;
}
else
@ -269,49 +275,48 @@ static int read_config_file(struct hesiod_p *ctx, const char *filename)
ctx->lhs = NULL;
ctx->rhs = NULL;
while (fgets(buf, sizeof(buf), fp) != NULL)
while (fgets (buf, sizeof (buf), fp) != NULL)
{
p = buf;
if (*p == '#' || *p == '\n' || *p == '\r')
continue;
while(*p == ' ' || *p == '\t')
p++;
while (*p == ' ' || *p == '\t')
++p;
key = p;
while(*p != ' ' && *p != '\t' && *p != '=')
p++;
++p;
*p++ = 0;
while(isspace(*p) || *p == '=')
p++;
while (isspace (*p) || *p == '=')
++p;
data = p;
while(!isspace(*p))
p++;
while (!isspace (*p))
++p;
*p = 0;
if (cistrcmp(key, "lhs") == 0 || cistrcmp(key, "rhs") == 0)
if (cistrcmp (key, "lhs") == 0 || cistrcmp (key, "rhs") == 0)
{
which = (strcmp(key, "lhs") == 0) ? &ctx->lhs : &ctx->rhs;
*which = malloc(strlen(data) + 1);
which = (strcmp (key, "lhs") == 0) ? &ctx->lhs : &ctx->rhs;
*which = strdup (data);
if (!*which)
{
__set_errno (ENOMEM);
return -1;
}
strcpy(*which, data);
}
else if (cistrcmp(key, "classes") == 0)
else if (cistrcmp (key, "classes") == 0)
{
n = 0;
while (*data && n < 2)
{
p = data;
while (*p && *p != ',')
p++;
++p;
if (*p)
*p++ = 0;
if (cistrcmp(data, "IN") == 0)
if (cistrcmp (data, "IN") == 0)
ctx->classes[n++] = C_IN;
else if (cistrcmp(data, "HS") == 0)
else if (cistrcmp (data, "HS") == 0)
ctx->classes[n++] = C_HS;
data = p;
}
@ -319,7 +324,7 @@ static int read_config_file(struct hesiod_p *ctx, const char *filename)
ctx->classes[n++] = 0;
}
}
fclose(fp);
fclose (fp);
if (!ctx->rhs || ctx->classes[0] == 0 || ctx->classes[0] == ctx->classes[1])
{
@ -333,8 +338,8 @@ static int read_config_file(struct hesiod_p *ctx, const char *filename)
/* Given a DNS class and a DNS name, do a lookup for TXT records, and
* return a list of them.
*/
static char **get_txt_records(struct hesiod_p *ctx, int qclass,
const char *name)
static char **
get_txt_records (struct hesiod_p *ctx, int qclass, const char *name)
{
HEADER *hp;
unsigned char qbuf[PACKETSZ], abuf[MAX_HESRESP], *p, *eom, *eor;
@ -342,17 +347,17 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
int ancount, qdcount, i, j, n, skip, type, class, len;
/* Make sure the resolver is initialized. */
if ((_res.options & RES_INIT) == 0 && res_init() == -1)
if ((_res.options & RES_INIT) == 0 && res_init () == -1)
return NULL;
/* Construct the query. */
n = res_mkquery(QUERY, name, qclass, T_TXT, NULL, 0,
NULL, qbuf, PACKETSZ);
n = res_mkquery (QUERY, name, qclass, T_TXT, NULL, 0,
NULL, qbuf, PACKETSZ);
if (n < 0)
return NULL;
/* Send the query. */
n = res_send(qbuf, n, abuf, MAX_HESRESP);
n = res_send (qbuf, n, abuf, MAX_HESRESP);
if (n < 0)
{
__set_errno (ECONNREFUSED);
@ -361,15 +366,15 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
/* Parse the header of the result. */
hp = (HEADER *) abuf;
ancount = ntohs(hp->ancount);
qdcount = ntohs(hp->qdcount);
p = abuf + sizeof(HEADER);
ancount = ntohs (hp->ancount);
qdcount = ntohs (hp->qdcount);
p = abuf + sizeof (HEADER);
eom = abuf + n;
/* Skip questions, trying to get to the answer section which follows. */
for (i = 0; i < qdcount; i++)
for (i = 0; i < qdcount; ++i)
{
skip = dn_skipname(p, eom);
skip = dn_skipname (p, eom);
if (skip < 0 || p + skip + QFIXEDSZ > eom)
{
__set_errno (EMSGSIZE);
@ -379,8 +384,8 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
}
/* Allocate space for the text record answers. */
list = malloc((ancount + 1) * sizeof(char *));
if (!list)
list = malloc ((ancount + 1) * sizeof(char *));
if (list == NULL)
{
__set_errno (ENOMEM);
return NULL;
@ -391,7 +396,7 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
for (i = 0; i < ancount; i++)
{
/* Parse the header of this answer. */
skip = dn_skipname(p, eom);
skip = dn_skipname (p, eom);
if (skip < 0 || p + skip + 10 > eom)
break;
type = p[skip + 0] << 8 | p[skip + 1];
@ -412,7 +417,7 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
}
/* Allocate space for this answer. */
list[j] = malloc(len);
list[j] = malloc (len);
if (!list[j])
{
__set_errno (ENOMEM);
@ -430,9 +435,8 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
__set_errno (EMSGSIZE);
break;
}
memcpy(dst, p, n);
dst = mempcpy (dst, p, n);
p += n;
dst += n;
}
if (p < eor)
{
@ -446,15 +450,15 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
if (i < ancount)
{
for (i = 0; i < j; i++)
free(list[i]);
free(list);
free (list[i]);
free (list);
return NULL;
}
if (j == 0)
{
__set_errno (ENOENT);
free(list);
free (list);
return NULL;
}
@ -463,7 +467,8 @@ static char **get_txt_records(struct hesiod_p *ctx, int qclass,
}
#ifndef _LIBC
static int cistrcmp(const char *s1, const char *s2)
static int
cistrcmp (const char *s1, const char *s2)
{
while (*s1 && tolower(*s1) == tolower(*s2))
{

View File

@ -1,6 +1,6 @@
/* Generic conversion to and from 8bit charsets,
converting from UCS using gaps.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -57,9 +57,9 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data)
enum direction dir;
int result;
if (__strcasestr (step->from_name, NAME) != NULL)
if (strcasestr (step->from_name, NAME) != NULL)
dir = from_8bit;
else if (__strcasestr (step->to_name, NAME) != NULL)
else if (strcasestr (step->to_name, NAME) != NULL)
dir = to_8bit;
else
dir = illegal;

View File

@ -1,5 +1,5 @@
/* Generic conversion to and from 8bit charsets.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -44,9 +44,9 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data)
enum direction dir;
int result;
if (__strcasestr (step->from_name, NAME) != NULL)
if (strcasestr (step->from_name, NAME) != NULL)
dir = from_8bit;
else if (__strcasestr (step->to_name, NAME) != NULL)
else if (strcasestr (step->to_name, NAME) != NULL)
dir = to_8bit;
else
dir = illegal;

View File

@ -1,5 +1,5 @@
/* Generic conversion to and from ISO 6937.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -394,9 +394,9 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data)
enum direction dir;
int result;
if (__strcasestr (step->from_name, "ISO_6937") != NULL)
if (strcasestr (step->from_name, "ISO_6937") != NULL)
dir = from_iso6937;
else if (__strcasestr (step->to_name, "ISO_6937") != NULL)
else if (strcasestr (step->to_name, "ISO_6937") != NULL)
dir = to_iso6937;
else
dir = illegal;

View File

@ -1,5 +1,5 @@
/* Conversion to and from ISO 8859-1.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -44,9 +44,9 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data)
enum direction dir;
int result;
if (__strcasestr (step->from_name, "ISO-8859-1") != NULL)
if (strcasestr (step->from_name, "ISO-8859-1") != NULL)
dir = from_iso88591;
else if (__strcasestr (step->to_name, "ISO-8859-1") != NULL)
else if (strcasestr (step->to_name, "ISO-8859-1") != NULL)
dir = to_iso88591;
else
dir = illegal;

View File

@ -1,5 +1,5 @@
/* Mapping tables for SJIS handling.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -4004,9 +4004,9 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data)
enum direction dir;
int result;
if (__strcasestr (step->from_name, "SJIS") != NULL)
if (strcasestr (step->from_name, "SJIS") != NULL)
dir = from_sjis;
else if (__strcasestr (step->to_name, "SJIS") != NULL)
else if (strcasestr (step->to_name, "SJIS") != NULL)
dir = to_sjis;
else
dir = illegal;

View File

@ -1,5 +1,5 @@
/* Generic conversion to and from T.61.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -385,9 +385,9 @@ gconv_init (struct gconv_step *step, struct gconv_step_data *data)
enum direction dir;
int result;
if (__strcasestr (step->from_name, "T.61") != NULL)
if (strcasestr (step->from_name, "T.61") != NULL)
dir = from_t61;
else if (__strcasestr (step->to_name, "T.61") != NULL)
else if (strcasestr (step->to_name, "T.61") != NULL)
dir = to_t61;
else
dir = illegal;

View File

@ -82,7 +82,7 @@ struct termios
#define ONLRET 0000040
#define OFILL 0000100
#define OFDEL 0000200
#if !defined __USE_POSIX || defined __USE_UNIX98
#if defined __USE_MISC || defined __USE_UNIX98
# define NLDLY 0000400
# define NL0 0000000
# define NL1 0000400
@ -108,12 +108,12 @@ struct termios
#define VT0 0000000
#define VT1 0040000
#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU
#ifdef __USE_MISC
# define XTABS 0014000
#endif
/* c_cflag bit meaning */
#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU
#ifdef __USE_MISC
# define CBAUD 0010017
#endif
#define B0 0000000 /* hang up */
@ -132,7 +132,7 @@ struct termios
#define B9600 0000015
#define B19200 0000016
#define B38400 0000017
#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU
#ifdef __USE_MISC
# define EXTA B19200
# define EXTB B38400
#endif
@ -147,14 +147,14 @@ struct termios
#define PARODD 0001000
#define HUPCL 0002000
#define CLOCAL 0004000
#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU
#ifdef __USE_MISC
# define CBAUDEX 0010000
#endif
#define B57600 0010001
#define B115200 0010002
#define B230400 0010003
#define B460800 0010004
#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU
#ifdef __USE_MISC
# define CIBAUD 002003600000 /* input baud rate (not used) */
# define CRTSCTS 020000000000 /* flow control */
#endif
@ -162,7 +162,7 @@ struct termios
/* c_lflag bits */
#define ISIG 0000001
#define ICANON 0000002
#if !defined __USE_POSIX || defined __USE_UNIX98
#if defined __USE_MISC || defined __USE_UNIX98
# define XCASE 0000004
#endif
#define ECHO 0000010
@ -171,7 +171,7 @@ struct termios
#define ECHONL 0000100
#define NOFLSH 0000200
#define TOSTOP 0000400
#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU
#ifdef __USE_MISC
# define ECHOCTL 0001000
# define ECHOPRT 0002000
# define ECHOKE 0004000

View File

@ -35,7 +35,7 @@ unlockpt (fd)
if (ioctl (fd, TIOCSPTLCK, &unlock))
{
if(errno == EINVAL)
if (errno == EINVAL)
{
__set_errno (serrno);
return 0;
@ -43,8 +43,7 @@ unlockpt (fd)
else
return -1;
}
#else
#endif
/* On pre-/dev/ptmx kernels this function should be a no-op. */
return 0;
#endif
}