Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/posix')
-rw-r--r--newlib/libc/posix/collate.c19
-rw-r--r--newlib/libc/posix/engine.c14
-rw-r--r--newlib/libc/posix/glob.c4
-rw-r--r--newlib/libc/posix/popen.c5
-rw-r--r--newlib/libc/posix/readdir.c6
-rw-r--r--newlib/libc/posix/readdir_r.c2
-rw-r--r--newlib/libc/posix/regcomp.c14
-rw-r--r--newlib/libc/posix/telldir.c3
-rw-r--r--newlib/libc/posix/wordexp.c3
9 files changed, 32 insertions, 38 deletions
diff --git a/newlib/libc/posix/collate.c b/newlib/libc/posix/collate.c
index 8bb04ef0d..6ee455001 100644
--- a/newlib/libc/posix/collate.c
+++ b/newlib/libc/posix/collate.c
@@ -117,26 +117,24 @@ __collate_substitute(s)
const u_char *s;
{
int dest_len, len, nlen;
- int delta = strlen((const char *) s);
+ int delta = strlen(s);
u_char *dest_str = NULL;
if(s == NULL || *s == '\0')
- return __collate_strdup((u_char *) "");
+ return __collate_strdup("");
delta += delta / 8;
- dest_str = (u_char *) malloc(dest_len = delta);
+ dest_str = malloc(dest_len = delta);
if(dest_str == NULL)
__collate_err(EX_OSERR, __FUNCTION__);
len = 0;
while(*s) {
- nlen = len + strlen((const char *)
- __collate_substitute_table[*s]);
+ nlen = len + strlen(__collate_substitute_table[*s]);
if (dest_len <= nlen) {
dest_str = reallocf(dest_str, dest_len = nlen + delta);
if(dest_str == NULL)
__collate_err(EX_OSERR, __FUNCTION__);
}
- strcpy((char *) dest_str + len,
- (const char *) __collate_substitute_table[*s++]);
+ strcpy(dest_str + len, __collate_substitute_table[*s++]);
len = nlen;
}
return dest_str;
@@ -152,9 +150,8 @@ __collate_lookup(t, len, prim, sec)
*len = 1;
*prim = *sec = 0;
for(p2 = __collate_chain_pri_table; p2->str[0]; p2++) {
- if(strncmp((const char *) t, (const char *) p2->str,
- strlen((const char *) p2->str)) == 0) {
- *len = strlen((const char *) p2->str);
+ if(strncmp(t, p2->str, strlen(p2->str)) == 0) {
+ *len = strlen(p2->str);
*prim = p2->prim;
*sec = p2->sec;
return;
@@ -168,7 +165,7 @@ u_char *
__collate_strdup(s)
u_char *s;
{
- u_char *t = (u_char *) strdup((const char *) s);
+ u_char *t = strdup(s);
if (t == NULL)
__collate_err(EX_OSERR, __FUNCTION__);
diff --git a/newlib/libc/posix/engine.c b/newlib/libc/posix/engine.c
index 73ce45c11..8494b90a9 100644
--- a/newlib/libc/posix/engine.c
+++ b/newlib/libc/posix/engine.c
@@ -145,7 +145,7 @@ int eflags;
int i;
struct match mv;
struct match *m = &mv;
- char *dp = NULL;
+ char *dp;
const sopno gf = g->firststate+1; /* +1 for OEND */
const sopno gl = g->laststate;
char *start;
@@ -181,8 +181,8 @@ int eflags;
pp = mustlast;
for (dp = start+g->mlen-1; dp < stop;) {
/* Fast skip non-matches */
- while (dp < stop && charjump[(unsigned char) *dp])
- dp += charjump[(unsigned char) *dp];
+ while (dp < stop && charjump[*dp])
+ dp += charjump[*dp];
if (dp >= stop)
break;
@@ -198,7 +198,7 @@ int eflags;
/* Jump to next possible match */
mj = matchjump[pp - mustfirst];
- cj = charjump[(unsigned char) *dp];
+ cj = charjump[*dp];
dp += (cj < mj ? mj : cj);
pp = mustlast;
}
@@ -364,12 +364,6 @@ sopno stopst;
char *ssp; /* start of string matched by subsubRE */
char *sep; /* end of string matched by subsubRE */
char *oldssp; /* previous ssp */
-#if defined (__GNUC__) && \
- ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || __GNUC__ > 4)
-/* dp is only used for assertion testing which, for some reason, is not
- recognized as usage. */
-#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
-#endif
char *dp;
AT("diss", start, stop, startst, stopst);
diff --git a/newlib/libc/posix/glob.c b/newlib/libc/posix/glob.c
index 977a5a4f8..4dafe71aa 100644
--- a/newlib/libc/posix/glob.c
+++ b/newlib/libc/posix/glob.c
@@ -30,10 +30,6 @@
* SUCH DAMAGE.
*/
-#ifdef __CYGWIN__
-#define _NO_GLOB /* Cygwin provides its own glob. */
-#endif
-
#ifndef _NO_GLOB
#if defined(LIBC_SCCS) && !defined(lint)
diff --git a/newlib/libc/posix/popen.c b/newlib/libc/posix/popen.c
index faf72b6e3..38978c7aa 100644
--- a/newlib/libc/posix/popen.c
+++ b/newlib/libc/posix/popen.c
@@ -113,7 +113,7 @@ _DEFUN(popen, (program, type),
const char *program _AND
const char *type)
{
- struct pid *cur;
+ struct pid *cur, *last;
FILE *iop;
int pdes[2], pid;
@@ -159,7 +159,8 @@ _DEFUN(popen, (program, type),
(void)close(pdes[1]);
}
/* Close all fd's created by prior popen. */
- for (cur = pidlist; cur; cur = cur->next)
+ for (last = NULL, cur = pidlist; cur;
+ last = cur, cur = cur->next)
(void)close (fileno (cur->fp));
execl(_PATH_BSHELL, "sh", "-c", program, NULL);
_exit(127);
diff --git a/newlib/libc/posix/readdir.c b/newlib/libc/posix/readdir.c
index d3187e603..da07d5c00 100644
--- a/newlib/libc/posix/readdir.c
+++ b/newlib/libc/posix/readdir.c
@@ -75,6 +75,12 @@ _DEFUN(readdir, (dirp),
continue;
}
dp = (struct dirent *)(dirp->dd_buf + dirp->dd_loc);
+ if ((int)dp & 03) { /* bogus pointer check */
+#ifdef HAVE_DD_LOCK
+ __lock_release_recursive(dirp->dd_lock);
+#endif
+ return NULL;
+ }
if (dp->d_reclen <= 0 ||
dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) {
#ifdef HAVE_DD_LOCK
diff --git a/newlib/libc/posix/readdir_r.c b/newlib/libc/posix/readdir_r.c
index b9a0b9024..9bc013c64 100644
--- a/newlib/libc/posix/readdir_r.c
+++ b/newlib/libc/posix/readdir_r.c
@@ -76,7 +76,7 @@ struct dirent *tmpdp;
__lock_release_recursive(dirp->dd_lock);
#endif
*dpp = NULL;
- return dirp->dd_size == 0 ? 0 : errno;
+ return errno;
}
}
if (dirp->dd_loc >= dirp->dd_size) {
diff --git a/newlib/libc/posix/regcomp.c b/newlib/libc/posix/regcomp.c
index bd90d2cdf..7f9e188a7 100644
--- a/newlib/libc/posix/regcomp.c
+++ b/newlib/libc/posix/regcomp.c
@@ -103,8 +103,8 @@ static void freeset(struct parse *p, cset *cs);
static int freezeset(struct parse *p, cset *cs);
static int firstch(struct parse *p, cset *cs);
static int nch(struct parse *p, cset *cs);
-#if used
static void mcadd(struct parse *p, cset *cs, char *cp);
+#if used
static void mcsub(cset *cs, char *cp);
static int mcin(cset *cs, char *cp);
static char *mcfind(cset *cs, char *cp);
@@ -308,8 +308,8 @@ struct parse *p;
int stop; /* character this ERE should end at */
{
char c;
- sopno prevback = 0;
- sopno prevfwd = 0;
+ sopno prevback;
+ sopno prevfwd;
sopno conc;
int first = 1; /* is this the first alternative? */
@@ -1333,7 +1333,6 @@ cset *cs;
return(n);
}
-#if used
/*
- mcadd - add a collating element to a cset
== static void mcadd(struct parse *p, cset *cs, \
@@ -1361,6 +1360,7 @@ char *cp;
cs->multis[cs->smultis - 1] = '\0';
}
+#if used
/*
- mcsub - subtract a collating element from a cset
== static void mcsub(cset *cs, char *cp);
@@ -1688,8 +1688,8 @@ struct parse *p;
struct re_guts *g;
{
sop *scan;
- sop *start = NULL;
- sop *newstart = NULL;
+ sop *start;
+ sop *newstart;
sopno newlen;
sop s;
char *cp;
@@ -1961,7 +1961,7 @@ struct re_guts *g;
* is the first one that would be matched).
*/
for (mindex = 0; mindex < g->mlen; mindex++)
- g->charjump[(unsigned char) g->must[mindex]] = g->mlen - mindex - 1;
+ g->charjump[g->must[mindex]] = g->mlen - mindex - 1;
}
/*
diff --git a/newlib/libc/posix/telldir.c b/newlib/libc/posix/telldir.c
index caac4890b..f2b1c79bd 100644
--- a/newlib/libc/posix/telldir.c
+++ b/newlib/libc/posix/telldir.c
@@ -69,10 +69,7 @@ struct ddloc {
static long dd_loccnt = 1; /* Index of entry for sequential readdir's */
static struct ddloc *dd_hash[NDIRHASH]; /* Hash list heads for ddlocs */
-
-#ifdef HAVE_DD_LOCK
__LOCK_INIT(static, dd_hash_lock);
-#endif
/*
* return a pointer into a directory
diff --git a/newlib/libc/posix/wordexp.c b/newlib/libc/posix/wordexp.c
index bfdb63fd0..b6c4a6d1f 100644
--- a/newlib/libc/posix/wordexp.c
+++ b/newlib/libc/posix/wordexp.c
@@ -37,6 +37,7 @@ wordexp(const char *words, wordexp_t *pwordexp, int flags)
char *iter;
pid_t pid;
int num_words = 0;
+ int num_bytes = 0;
int fd[2];
int fd_err[2];
int err = 0;
@@ -128,6 +129,8 @@ wordexp(const char *words, wordexp_t *pwordexp, int flags)
if((iter = strchr(tmp, '\n')))
*iter = '\0';
+ num_bytes = atoi(tmp) + pwordexp->we_wordc;
+
/* Get each expansion from the shell output, and store each in
pwordexp's we_wordv vector. */
for(i = 0; i < num_words; i++)