aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/mk
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/mk')
-rw-r--r--src/cmd/mk/archive.c31
-rw-r--r--src/cmd/mk/env.c2
-rw-r--r--src/cmd/mk/rule.c2
-rw-r--r--src/cmd/mk/run.c2
-rw-r--r--src/cmd/mk/sh.c1
-rw-r--r--src/cmd/mk/symtab.c10
-rw-r--r--src/cmd/mk/sys.h1
-rw-r--r--src/cmd/mk/unix.c24
-rw-r--r--src/cmd/mk/varsub.c8
-rw-r--r--src/cmd/mk/word.c2
10 files changed, 49 insertions, 34 deletions
diff --git a/src/cmd/mk/archive.c b/src/cmd/mk/archive.c
index 01288908..5b0c1d00 100644
--- a/src/cmd/mk/archive.c
+++ b/src/cmd/mk/archive.c
@@ -1,6 +1,6 @@
#include "mk.h"
#define ARMAG "!<arch>\n"
-#define SARMAG 8
+#define SARMAG (sizeof(ARMAG) - sizeof(""))
#define ARFMAG "`\n"
#define SARNAME 16
@@ -102,7 +102,7 @@ atouch(char *name)
LSEEK(fd, SARMAG, 0);
while(read(fd, (char *)&h, sizeof(h)) == sizeof(h)){
for(i = SARNAME-1; i > 0 && h.name[i] == ' '; i--)
- ;
+ ;
h.name[i+1]=0;
if(strcmp(member, h.name) == 0){
t = SARNAME-sizeof(h); /* ughgghh */
@@ -118,6 +118,18 @@ atouch(char *name)
close(fd);
}
+static int
+allspaces(char *a, int n)
+{
+ int i;
+
+ for(i=0; i<n; i++)
+ if(a[i] != ' ')
+ return 0;
+
+ return 1;
+}
+
static void
atimes(char *ar)
{
@@ -151,11 +163,14 @@ atimes(char *ar)
if(readn(fd, name, namelen) != namelen)
break;
name[namelen] = 0;
- }else if(memcmp(h.name, "// ", 2) == 0){ /* GNU */
+ }else if(memcmp(h.name, "// ", 3) == 0){ /* GNU */
/* date, uid, gid, mode all ' ' */
- for(i=2; i<16+12+6+6+8; i++)
- if(h.name[i] != ' ')
- goto skip;
+ if(!allspaces(&h.name[3], sizeof(h.name) - 3) ||
+ !allspaces(h.date, sizeof(h.date)) ||
+ !allspaces(h.uid, sizeof(h.uid)) ||
+ !allspaces(h.gid, sizeof(h.gid)) ||
+ !allspaces(h.mode, sizeof(h.mode)))
+ goto skip;
t = atol(h.size);
if(t&01)
t++;
@@ -187,9 +202,9 @@ atimes(char *ar)
name[namelen] = 0;
namelen = 0;
}else{
- strncpy(name, h.name, sizeof(h.name));
+ memmove(name, h.name, sizeof(h.name));
for(i = sizeof(h.name)-1; i > 0 && name[i] == ' '; i--)
- ;
+ ;
if(name[i] == '/') /* system V bug */
i--;
name[i+1]=0;
diff --git a/src/cmd/mk/env.c b/src/cmd/mk/env.c
index 11df34e3..d7c6481d 100644
--- a/src/cmd/mk/env.c
+++ b/src/cmd/mk/env.c
@@ -142,7 +142,7 @@ buildenv(Job *j, int slot)
for(i = 0; *p; i++, p++){
if((j->r->attr&REGEXP) && j->match[i])
envupd(*p, newword(j->match[i]));
- else
+ else
envupd(*p, newword(""));
}
return envy;
diff --git a/src/cmd/mk/rule.c b/src/cmd/mk/rule.c
index 30728197..537d2d75 100644
--- a/src/cmd/mk/rule.c
+++ b/src/cmd/mk/rule.c
@@ -76,7 +76,7 @@ dumpr(char *s, Rule *r)
{
if(r == nil)
return;
- Bprint(&bout, "%s: start=%ld shelltype=%s shellcmd=%s\n",
+ Bprint(&bout, "%s: start=%ld shelltype=%s shellcmd=%s\n",
s, r, r->shellt->name, wtos(r->shellcmd, ' '));
for(; r; r = r->next){
Bprint(&bout, "\tRule %ld: %s[%d] attr=%x next=%ld chain=%ld alltarget='%s'",
diff --git a/src/cmd/mk/run.c b/src/cmd/mk/run.c
index dd225c0d..6f60cede 100644
--- a/src/cmd/mk/run.c
+++ b/src/cmd/mk/run.c
@@ -29,7 +29,7 @@ run(Job *j)
for(jj = jobs; jj->next; jj = jj->next)
;
jj->next = j;
- } else
+ } else
jobs = j;
j->next = 0;
/* this code also in waitup after parse redirect */
diff --git a/src/cmd/mk/sh.c b/src/cmd/mk/sh.c
index e2566514..d8f205c8 100644
--- a/src/cmd/mk/sh.c
+++ b/src/cmd/mk/sh.c
@@ -203,4 +203,3 @@ Shell shshell = {
shcopyq,
shmatchname
};
-
diff --git a/src/cmd/mk/symtab.c b/src/cmd/mk/symtab.c
index 17674c43..2bb28ba8 100644
--- a/src/cmd/mk/symtab.c
+++ b/src/cmd/mk/symtab.c
@@ -1,7 +1,7 @@
#include "mk.h"
#define NHASH 4099
-#define HASHMUL 79L /* this is a good value */
+#define HASHMUL 79UL /* this is a good value */
static Symtab *hash[NHASH];
void
@@ -21,14 +21,12 @@ syminit(void)
Symtab *
symlook(char *sym, int space, void *install)
{
- long h;
+ ulong h;
char *p;
Symtab *s;
for(p = sym, h = space; *p; h += *p++)
h *= HASHMUL;
- if(h < 0)
- h = ~h;
h %= NHASH;
for(s = hash[h]; s; s = s->next)
if((s->space == space) && (strcmp(s->name, sym) == 0))
@@ -47,7 +45,7 @@ symlook(char *sym, int space, void *install)
void
symdel(char *sym, int space)
{
- long h;
+ ulong h;
char *p;
Symtab *s, *ls;
@@ -55,8 +53,6 @@ symdel(char *sym, int space)
for(p = sym, h = space; *p; h += *p++)
h *= HASHMUL;
- if(h < 0)
- h = ~h;
h %= NHASH;
for(s = hash[h], ls = 0; s; ls = s, s = s->next)
if((s->space == space) && (strcmp(s->name, sym) == 0)){
diff --git a/src/cmd/mk/sys.h b/src/cmd/mk/sys.h
index 03a9d058..f520b066 100644
--- a/src/cmd/mk/sys.h
+++ b/src/cmd/mk/sys.h
@@ -2,4 +2,3 @@
#include <libc.h>
#include <bio.h>
#include <regexp.h>
-
diff --git a/src/cmd/mk/unix.c b/src/cmd/mk/unix.c
index c63d3cef..66bdb1ff 100644
--- a/src/cmd/mk/unix.c
+++ b/src/cmd/mk/unix.c
@@ -23,7 +23,7 @@ readenv(void)
Word *w;
for(p = environ; *p; p++){
-/* rsc 5/5/2004 -- This misparses fn#cd={whatever}
+/* rsc 5/5/2004 -- This misparses fn#cd={whatever}
s = shname(*p);
if(*s == '=') {
*s = 0;
@@ -53,20 +53,26 @@ readenv(void)
void
exportenv(Envy *e, Shell *sh)
{
- int i;
+ int w, n;
char **p;
+ Envy *e1;
static char buf[16384];
- p = 0;
- for(i = 0; e->name; e++, i++) {
- p = (char**) Realloc(p, (i+2)*sizeof(char*));
+ n = 0;
+ for(e1 = e; e1->name; e1++)
+ n++;
+ p = Malloc((n+1)*sizeof(char*));
+ w = 0;
+ for(; e->name; e++) {
+ if(sh == &rcshell && (e->values == 0 || e->values->s == 0 || e->values->s[0] == 0))
+ continue; /* do not write empty string for empty list */
if(e->values)
snprint(buf, sizeof buf, "%s=%s", e->name, wtos(e->values, sh->iws));
else
snprint(buf, sizeof buf, "%s=", e->name);
- p[i] = strdup(buf);
+ p[w++] = strdup(buf);
}
- p[i] = 0;
+ p[w] = 0;
environ = p;
}
@@ -111,7 +117,7 @@ shargv(Word *cmd, int extra, char ***pargv)
n = 0;
for(w=cmd; w; w=w->next)
n++;
-
+
argv = Malloc((n+extra+1)*sizeof(argv[0]));
i = 0;
for(w=cmd; w; w=w->next)
@@ -119,7 +125,7 @@ shargv(Word *cmd, int extra, char ***pargv)
argv[n] = 0;
*pargv = argv;
return n;
-}
+}
int
execsh(char *args, char *cmd, Bufblock *buf, Envy *e, Shell *sh, Word *shellcmd)
diff --git a/src/cmd/mk/varsub.c b/src/cmd/mk/varsub.c
index f858a92a..b6c0ab0f 100644
--- a/src/cmd/mk/varsub.c
+++ b/src/cmd/mk/varsub.c
@@ -61,7 +61,7 @@ varmatch(char *name)
{
Word *w;
Symtab *sym;
-
+
sym = symlook(name, S_VAR, 0);
if(sym){
/* check for at least one non-NULL value */
@@ -107,7 +107,7 @@ expandvar(char **s)
}
*end = 0;
*s = end+1;
-
+
sym = symlook(buf->start, S_VAR, 0);
if(sym == 0 || sym->u.ptr == 0)
w = newword(buf->start);
@@ -173,7 +173,7 @@ subsub(Word *v, char *s, char *end)
while(w->next)
w = w->next;
}
- if(PERCENT(*cp) && nmid > 0){
+ if(PERCENT(*cp) && nmid > 0){
if(w){
bufcpy(buf, w->s, strlen(w->s));
bufcpy(buf, enda, nmid);
@@ -205,7 +205,7 @@ subsub(Word *v, char *s, char *end)
}
if(w == 0)
h = w = newword(v->s);
-
+
if(head == 0)
head = h;
else
diff --git a/src/cmd/mk/word.c b/src/cmd/mk/word.c
index f94c4fd7..e1e52a1c 100644
--- a/src/cmd/mk/word.c
+++ b/src/cmd/mk/word.c
@@ -29,7 +29,7 @@ stow(char *s)
head = w = new;
while(w->next)
w = w->next;
-
+
}
if (!head)
head = newword("");