Two fixes from the NetBSD group (Charles Hannum):
1) dir.c: get byte order right in mkentry() 2) pass1.c: When doing -c2 conversion, do secsize reads for a symlink - not doing so was causing the conversion to fail because the device driver can't deal with short reads.
This commit is contained in:
parent
8dc01fa8c3
commit
9fef312289
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=2603
@ -328,13 +328,20 @@ mkentry(idesc)
|
||||
dirp->d_reclen = oldlen;
|
||||
dirp = (struct direct *)(((char *)dirp) + oldlen);
|
||||
dirp->d_ino = idesc->id_parent; /* ino to be entered is in id_parent */
|
||||
if (newinofmt)
|
||||
if (newinofmt) {
|
||||
dirp->d_type = typemap[idesc->id_parent];
|
||||
else
|
||||
dirp->d_type = 0;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
} else {
|
||||
# if (BYTE_ORDER == LITTLE_ENDIAN)
|
||||
dirp->d_type = newent.d_namlen;
|
||||
dirp->d_namlen = 0;
|
||||
# else
|
||||
dirp->d_type = 0;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
# endif
|
||||
}
|
||||
dirp->d_reclen = newent.d_reclen;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
bcopy(idesc->id_name, dirp->d_name, (size_t)dirp->d_namlen + 1);
|
||||
bcopy(idesc->id_name, dirp->d_name, (size_t)newent.d_namlen + 1);
|
||||
return (ALTERED|STOP);
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@ checkinode(inumber, idesc)
|
||||
struct zlncnt *zlnp;
|
||||
int ndb, j;
|
||||
mode_t mode;
|
||||
char symbuf[MAXSYMLINKLEN];
|
||||
char *symbuf;
|
||||
|
||||
dp = getnextinode(inumber);
|
||||
mode = dp->di_mode & IFMT;
|
||||
@ -141,9 +141,10 @@ checkinode(inumber, idesc)
|
||||
if (doinglevel2 &&
|
||||
dp->di_size > 0 && dp->di_size < MAXSYMLINKLEN &&
|
||||
dp->di_blocks != 0) {
|
||||
symbuf = alloca(secsize);
|
||||
if (bread(fsreadfd, symbuf,
|
||||
fsbtodb(&sblock, dp->di_db[0]),
|
||||
(long)dp->di_size) != 0)
|
||||
(long)secsize) != 0)
|
||||
errexit("cannot read symlink");
|
||||
if (debug) {
|
||||
symbuf[dp->di_size] = 0;
|
||||
|
@ -328,13 +328,20 @@ mkentry(idesc)
|
||||
dirp->d_reclen = oldlen;
|
||||
dirp = (struct direct *)(((char *)dirp) + oldlen);
|
||||
dirp->d_ino = idesc->id_parent; /* ino to be entered is in id_parent */
|
||||
if (newinofmt)
|
||||
if (newinofmt) {
|
||||
dirp->d_type = typemap[idesc->id_parent];
|
||||
else
|
||||
dirp->d_type = 0;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
} else {
|
||||
# if (BYTE_ORDER == LITTLE_ENDIAN)
|
||||
dirp->d_type = newent.d_namlen;
|
||||
dirp->d_namlen = 0;
|
||||
# else
|
||||
dirp->d_type = 0;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
# endif
|
||||
}
|
||||
dirp->d_reclen = newent.d_reclen;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
bcopy(idesc->id_name, dirp->d_name, (size_t)dirp->d_namlen + 1);
|
||||
bcopy(idesc->id_name, dirp->d_name, (size_t)newent.d_namlen + 1);
|
||||
return (ALTERED|STOP);
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@ checkinode(inumber, idesc)
|
||||
struct zlncnt *zlnp;
|
||||
int ndb, j;
|
||||
mode_t mode;
|
||||
char symbuf[MAXSYMLINKLEN];
|
||||
char *symbuf;
|
||||
|
||||
dp = getnextinode(inumber);
|
||||
mode = dp->di_mode & IFMT;
|
||||
@ -141,9 +141,10 @@ checkinode(inumber, idesc)
|
||||
if (doinglevel2 &&
|
||||
dp->di_size > 0 && dp->di_size < MAXSYMLINKLEN &&
|
||||
dp->di_blocks != 0) {
|
||||
symbuf = alloca(secsize);
|
||||
if (bread(fsreadfd, symbuf,
|
||||
fsbtodb(&sblock, dp->di_db[0]),
|
||||
(long)dp->di_size) != 0)
|
||||
(long)secsize) != 0)
|
||||
errexit("cannot read symlink");
|
||||
if (debug) {
|
||||
symbuf[dp->di_size] = 0;
|
||||
|
@ -328,13 +328,20 @@ mkentry(idesc)
|
||||
dirp->d_reclen = oldlen;
|
||||
dirp = (struct direct *)(((char *)dirp) + oldlen);
|
||||
dirp->d_ino = idesc->id_parent; /* ino to be entered is in id_parent */
|
||||
if (newinofmt)
|
||||
if (newinofmt) {
|
||||
dirp->d_type = typemap[idesc->id_parent];
|
||||
else
|
||||
dirp->d_type = 0;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
} else {
|
||||
# if (BYTE_ORDER == LITTLE_ENDIAN)
|
||||
dirp->d_type = newent.d_namlen;
|
||||
dirp->d_namlen = 0;
|
||||
# else
|
||||
dirp->d_type = 0;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
# endif
|
||||
}
|
||||
dirp->d_reclen = newent.d_reclen;
|
||||
dirp->d_namlen = newent.d_namlen;
|
||||
bcopy(idesc->id_name, dirp->d_name, (size_t)dirp->d_namlen + 1);
|
||||
bcopy(idesc->id_name, dirp->d_name, (size_t)newent.d_namlen + 1);
|
||||
return (ALTERED|STOP);
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@ checkinode(inumber, idesc)
|
||||
struct zlncnt *zlnp;
|
||||
int ndb, j;
|
||||
mode_t mode;
|
||||
char symbuf[MAXSYMLINKLEN];
|
||||
char *symbuf;
|
||||
|
||||
dp = getnextinode(inumber);
|
||||
mode = dp->di_mode & IFMT;
|
||||
@ -141,9 +141,10 @@ checkinode(inumber, idesc)
|
||||
if (doinglevel2 &&
|
||||
dp->di_size > 0 && dp->di_size < MAXSYMLINKLEN &&
|
||||
dp->di_blocks != 0) {
|
||||
symbuf = alloca(secsize);
|
||||
if (bread(fsreadfd, symbuf,
|
||||
fsbtodb(&sblock, dp->di_db[0]),
|
||||
(long)dp->di_size) != 0)
|
||||
(long)secsize) != 0)
|
||||
errexit("cannot read symlink");
|
||||
if (debug) {
|
||||
symbuf[dp->di_size] = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user