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:
David Greenman 1994-09-09 11:06:27 +00:00
parent 8dc01fa8c3
commit 9fef312289
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=2603
6 changed files with 45 additions and 21 deletions

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;