9660srv: give names to anonymous structs in union
This commit is contained in:
parent
01e0780781
commit
13c28c2c13
2 changed files with 48 additions and 48 deletions
|
|
@ -141,7 +141,7 @@ chat("%d %d\n", haveplan9, nojoliet);
|
||||||
putbuf(dirp);
|
putbuf(dirp);
|
||||||
nexterror();
|
nexterror();
|
||||||
}
|
}
|
||||||
root->len = sizeof(Isofile) - sizeof(Drec) + dp->reclen;
|
root->len = sizeof(Isofile) - sizeof(Drec) + dp->z.reclen;
|
||||||
root->ptr = fp = ealloc(root->len);
|
root->ptr = fp = ealloc(root->len);
|
||||||
|
|
||||||
if(haveplan9)
|
if(haveplan9)
|
||||||
|
|
@ -151,14 +151,14 @@ chat("%d %d\n", haveplan9, nojoliet);
|
||||||
fp->blksize = blksize;
|
fp->blksize = blksize;
|
||||||
fp->offset = 0;
|
fp->offset = 0;
|
||||||
fp->doffset = 0;
|
fp->doffset = 0;
|
||||||
memmove(&fp->d, dp, dp->reclen);
|
memmove(&fp->d, dp, dp->z.reclen);
|
||||||
root->qid.path = l32(dp->addr);
|
root->qid.path = l32(dp->z.addr);
|
||||||
root->qid.type = QTDIR;
|
root->qid.type = QTDIR;
|
||||||
putbuf(dirp);
|
putbuf(dirp);
|
||||||
poperror();
|
poperror();
|
||||||
if(getdrec(root, rd) >= 0){
|
if(getdrec(root, rd) >= 0){
|
||||||
n = rd->reclen-(34+rd->namelen);
|
n = rd->z.reclen-(34+rd->z.namelen);
|
||||||
s = (uchar*)rd->name + rd->namelen;
|
s = (uchar*)rd->z.name + rd->z.namelen;
|
||||||
if((uintptr)s & 1){
|
if((uintptr)s & 1){
|
||||||
s++;
|
s++;
|
||||||
n--;
|
n--;
|
||||||
|
|
@ -216,13 +216,13 @@ iwalkup(Xfile *f)
|
||||||
ppf.ptr = &ppiso;
|
ppf.ptr = &ppiso;
|
||||||
if(opendotdot(f, &pf) < 0)
|
if(opendotdot(f, &pf) < 0)
|
||||||
error("can't open pf");
|
error("can't open pf");
|
||||||
paddr = l32(pf.ptr->d.addr);
|
paddr = l32(pf.ptr->d.z.addr);
|
||||||
if(l32(f->ptr->d.addr) == paddr)
|
if(l32(f->ptr->d.z.addr) == paddr)
|
||||||
return;
|
return;
|
||||||
if(opendotdot(&pf, &ppf) < 0)
|
if(opendotdot(&pf, &ppf) < 0)
|
||||||
error("can't open ppf");
|
error("can't open ppf");
|
||||||
while(getdrec(&ppf, d) >= 0){
|
while(getdrec(&ppf, d) >= 0){
|
||||||
if(l32(d->addr) == paddr){
|
if(l32(d->z.addr) == paddr){
|
||||||
newdrec(f, d);
|
newdrec(f, d);
|
||||||
f->qid.path = paddr;
|
f->qid.path = paddr;
|
||||||
f->qid.type = QTDIR;
|
f->qid.type = QTDIR;
|
||||||
|
|
@ -344,10 +344,10 @@ ireaddir(Xfile *f, uchar *buf, long offset, long count)
|
||||||
rcnt = 0;
|
rcnt = 0;
|
||||||
setnames(&d, names);
|
setnames(&d, names);
|
||||||
while(rcnt < count && getdrec(f, drec) >= 0){
|
while(rcnt < count && getdrec(f, drec) >= 0){
|
||||||
if(drec->namelen == 1){
|
if(drec->z.namelen == 1){
|
||||||
if(drec->name[0] == 0)
|
if(drec->z.name[0] == 0)
|
||||||
continue;
|
continue;
|
||||||
if(drec->name[0] == 1)
|
if(drec->z.name[0] == 1)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
rzdir(f->xf, &d, ip->fmt, drec);
|
rzdir(f->xf, &d, ip->fmt, drec);
|
||||||
|
|
@ -371,15 +371,15 @@ iread(Xfile *f, char *buf, vlong offset, long count)
|
||||||
Isofile *ip = f->ptr;
|
Isofile *ip = f->ptr;
|
||||||
Iobuf *p;
|
Iobuf *p;
|
||||||
|
|
||||||
size = l32(ip->d.size);
|
size = l32(ip->d.z.size);
|
||||||
if(offset >= size)
|
if(offset >= size)
|
||||||
return 0;
|
return 0;
|
||||||
if(offset+count > size)
|
if(offset+count > size)
|
||||||
count = size - offset;
|
count = size - offset;
|
||||||
addr = ((vlong)l32(ip->d.addr) + ip->d.attrlen)*ip->blksize + offset;
|
addr = ((vlong)l32(ip->d.z.addr) + ip->d.z.attrlen)*ip->blksize + offset;
|
||||||
o = addr % Sectorsize;
|
o = addr % Sectorsize;
|
||||||
addr /= Sectorsize;
|
addr /= Sectorsize;
|
||||||
/*chat("d.addr=%ld, addr=%lld, o=%d...", l32(ip->d.addr), addr, o);*/
|
/*chat("d.addr=%ld, addr=%lld, o=%d...", l32(ip->d.z.addr), addr, o);*/
|
||||||
n = Sectorsize - o;
|
n = Sectorsize - o;
|
||||||
|
|
||||||
while(count > 0){
|
while(count > 0){
|
||||||
|
|
@ -449,22 +449,22 @@ showdrec(int fd, int fmt, void *x)
|
||||||
int namelen;
|
int namelen;
|
||||||
int syslen;
|
int syslen;
|
||||||
|
|
||||||
if(d->reclen == 0)
|
if(d->z.reclen == 0)
|
||||||
return 0;
|
return 0;
|
||||||
fprint(fd, "%d %d %ld %ld ",
|
fprint(fd, "%d %d %ld %ld ",
|
||||||
d->reclen, d->attrlen, l32(d->addr), l32(d->size));
|
d->z.reclen, d->z.attrlen, l32(d->z.addr), l32(d->z.size));
|
||||||
fprint(fd, "%s 0x%2.2x %d %d %ld ",
|
fprint(fd, "%s 0x%2.2x %d %d %ld ",
|
||||||
rdate(d->date, fmt), (fmt=='z' ? d->flags : d->r_flags),
|
rdate(d->z.date, fmt), (fmt=='z' ? d->z.flags : d->r.flags),
|
||||||
d->unitsize, d->gapsize, l16(d->vseqno));
|
d->z.unitsize, d->z.gapsize, l16(d->z.vseqno));
|
||||||
fprint(fd, "%d %s", d->namelen, nstr(d->name, d->namelen));
|
fprint(fd, "%d %s", d->z.namelen, nstr(d->z.name, d->z.namelen));
|
||||||
if(fmt != 'J'){
|
if(fmt != 'J'){
|
||||||
namelen = d->namelen + (1-(d->namelen&1));
|
namelen = d->z.namelen + (1-(d->z.namelen&1));
|
||||||
syslen = d->reclen - 33 - namelen;
|
syslen = d->z.reclen - 33 - namelen;
|
||||||
if(syslen != 0)
|
if(syslen != 0)
|
||||||
fprint(fd, " %s", nstr(&d->name[namelen], syslen));
|
fprint(fd, " %s", nstr(&d->z.name[namelen], syslen));
|
||||||
}
|
}
|
||||||
fprint(fd, "\n");
|
fprint(fd, "\n");
|
||||||
return d->reclen + (d->reclen&1);
|
return d->z.reclen + (d->z.reclen&1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -474,13 +474,13 @@ newdrec(Xfile *f, Drec *dp)
|
||||||
Isofile *n;
|
Isofile *n;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
len = sizeof(Isofile) - sizeof(Drec) + dp->reclen;
|
len = sizeof(Isofile) - sizeof(Drec) + dp->z.reclen;
|
||||||
n = ealloc(len);
|
n = ealloc(len);
|
||||||
n->fmt = x->fmt;
|
n->fmt = x->fmt;
|
||||||
n->blksize = x->blksize;
|
n->blksize = x->blksize;
|
||||||
n->offset = 0;
|
n->offset = 0;
|
||||||
n->doffset = 0;
|
n->doffset = 0;
|
||||||
memmove(&n->d, dp, dp->reclen);
|
memmove(&n->d, dp, dp->z.reclen);
|
||||||
free(x);
|
free(x);
|
||||||
f->ptr = n;
|
f->ptr = n;
|
||||||
f->len = len;
|
f->len = len;
|
||||||
|
|
@ -508,9 +508,9 @@ getdrec(Xfile *f, void *buf)
|
||||||
|
|
||||||
if(!ip)
|
if(!ip)
|
||||||
return -1;
|
return -1;
|
||||||
size = l32(ip->d.size);
|
size = l32(ip->d.z.size);
|
||||||
while(ip->offset < size){
|
while(ip->offset < size){
|
||||||
addr = (l32(ip->d.addr)+ip->d.attrlen)*ip->blksize + ip->offset;
|
addr = (l32(ip->d.z.addr)+ip->d.z.attrlen)*ip->blksize + ip->offset;
|
||||||
boff = addr % Sectorsize;
|
boff = addr % Sectorsize;
|
||||||
if(boff > Sectorsize-34){
|
if(boff > Sectorsize-34){
|
||||||
ip->offset += Sectorsize-boff;
|
ip->offset += Sectorsize-boff;
|
||||||
|
|
@ -546,11 +546,11 @@ opendotdot(Xfile *f, Xfile *pf)
|
||||||
chat("opendotdot: getdrec(.) failed...");
|
chat("opendotdot: getdrec(.) failed...");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(d->namelen != 1 || d->name[0] != 0){
|
if(d->z.namelen != 1 || d->z.name[0] != 0){
|
||||||
chat("opendotdot: no . entry...");
|
chat("opendotdot: no . entry...");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(l32(d->addr) != l32(ip->d.addr)){
|
if(l32(d->z.addr) != l32(ip->d.z.addr)){
|
||||||
chat("opendotdot: bad . address...");
|
chat("opendotdot: bad . address...");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -558,7 +558,7 @@ opendotdot(Xfile *f, Xfile *pf)
|
||||||
chat("opendotdot: getdrec(..) failed...");
|
chat("opendotdot: getdrec(..) failed...");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(d->namelen != 1 || d->name[0] != 1){
|
if(d->z.namelen != 1 || d->z.name[0] != 1){
|
||||||
chat("opendotdot: no .. entry...");
|
chat("opendotdot: no .. entry...");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -591,13 +591,13 @@ rzdir(Xfs *fs, Dir *d, int fmt, Drec *dp)
|
||||||
have = 0;
|
have = 0;
|
||||||
flags = 0;
|
flags = 0;
|
||||||
vers = -1;
|
vers = -1;
|
||||||
d->qid.path = l32(dp->addr);
|
d->qid.path = l32(dp->z.addr);
|
||||||
d->qid.type = 0;
|
d->qid.type = 0;
|
||||||
d->qid.vers = 0;
|
d->qid.vers = 0;
|
||||||
n = dp->namelen;
|
n = dp->z.namelen;
|
||||||
memset(d->name, 0, Maxname);
|
memset(d->name, 0, Maxname);
|
||||||
if(n == 1) {
|
if(n == 1) {
|
||||||
switch(dp->name[0]){
|
switch(dp->z.name[0]){
|
||||||
case 1:
|
case 1:
|
||||||
d->name[1] = '.';
|
d->name[1] = '.';
|
||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
@ -606,11 +606,11 @@ rzdir(Xfs *fs, Dir *d, int fmt, Drec *dp)
|
||||||
have = Hname;
|
have = Hname;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
d->name[0] = tolower(dp->name[0]);
|
d->name[0] = tolower(dp->z.name[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(fmt == 'J'){ /* Joliet, 16-bit Unicode */
|
if(fmt == 'J'){ /* Joliet, 16-bit Unicode */
|
||||||
q = (uchar*)dp->name;
|
q = (uchar*)dp->z.name;
|
||||||
for(i=j=lj=0; i<n && j<Maxname; i+=2){
|
for(i=j=lj=0; i<n && j<Maxname; i+=2){
|
||||||
lj = j;
|
lj = j;
|
||||||
r = (q[i]<<8)|q[i+1];
|
r = (q[i]<<8)|q[i+1];
|
||||||
|
|
@ -623,12 +623,12 @@ rzdir(Xfs *fs, Dir *d, int fmt, Drec *dp)
|
||||||
if(n >= Maxname)
|
if(n >= Maxname)
|
||||||
n = Maxname-1;
|
n = Maxname-1;
|
||||||
for(i=0; i<n; i++)
|
for(i=0; i<n; i++)
|
||||||
d->name[i] = tolower(dp->name[i]);
|
d->name[i] = tolower(dp->z.name[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sysl = dp->reclen-(34+dp->namelen);
|
sysl = dp->z.reclen-(34+dp->z.namelen);
|
||||||
s = (uchar*)dp->name + dp->namelen;
|
s = (uchar*)dp->z.name + dp->z.namelen;
|
||||||
if(((uintptr)s) & 1) {
|
if(((uintptr)s) & 1) {
|
||||||
s++;
|
s++;
|
||||||
sysl--;
|
sysl--;
|
||||||
|
|
@ -671,19 +671,19 @@ rzdir(Xfs *fs, Dir *d, int fmt, Drec *dp)
|
||||||
strcpy(d->gid, "ridge");
|
strcpy(d->gid, "ridge");
|
||||||
else
|
else
|
||||||
strcpy(d->gid, "iso9660");
|
strcpy(d->gid, "iso9660");
|
||||||
flags = dp->flags;
|
flags = dp->z.flags;
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
strcpy(d->gid, "sierra");
|
strcpy(d->gid, "sierra");
|
||||||
flags = dp->r_flags;
|
flags = dp->r.flags;
|
||||||
break;
|
break;
|
||||||
case 'J':
|
case 'J':
|
||||||
strcpy(d->gid, "joliet");
|
strcpy(d->gid, "joliet");
|
||||||
flags = dp->flags;
|
flags = dp->z.flags;
|
||||||
break;
|
break;
|
||||||
case '9':
|
case '9':
|
||||||
strcpy(d->gid, "plan9");
|
strcpy(d->gid, "plan9");
|
||||||
flags = dp->flags;
|
flags = dp->z.flags;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(flags & 0x02){
|
if(flags & 0x02){
|
||||||
|
|
@ -754,10 +754,10 @@ rzdir(Xfs *fs, Dir *d, int fmt, Drec *dp)
|
||||||
}
|
}
|
||||||
d->length = 0;
|
d->length = 0;
|
||||||
if((d->mode & DMDIR) == 0)
|
if((d->mode & DMDIR) == 0)
|
||||||
d->length = l32(dp->size);
|
d->length = l32(dp->z.size);
|
||||||
d->type = 0;
|
d->type = 0;
|
||||||
d->dev = 0;
|
d->dev = 0;
|
||||||
d->atime = gtime(dp->date);
|
d->atime = gtime(dp->z.date);
|
||||||
d->mtime = d->atime;
|
d->mtime = d->atime;
|
||||||
return vers;
|
return vers;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -123,12 +123,12 @@ union Drec
|
||||||
Byte4LM vseqno; /* ? in high sierra */
|
Byte4LM vseqno; /* ? in high sierra */
|
||||||
uchar namelen;
|
uchar namelen;
|
||||||
uchar name[1];
|
uchar name[1];
|
||||||
};
|
} z;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uchar r_pad[24];
|
uchar pad[24];
|
||||||
uchar r_flags;
|
uchar flags;
|
||||||
};
|
} r;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Isofile
|
struct Isofile
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue