aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/fstyp/msdosfs.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/usr.sbin/fstyp/msdosfs.c b/usr.sbin/fstyp/msdosfs.c
index 3d86802f6a2e..ce745869edba 100644
--- a/usr.sbin/fstyp/msdosfs.c
+++ b/usr.sbin/fstyp/msdosfs.c
@@ -48,6 +48,7 @@ fstyp_msdosfs(FILE *fp, char *label, size_t size)
FAT32_BSBPB *pfat32_bsbpb;
FAT_DES *pfat_entry;
uint8_t *sector0, *sector;
+ size_t copysize;
sector0 = NULL;
sector = NULL;
@@ -83,8 +84,9 @@ fstyp_msdosfs(FILE *fp, char *label, size_t size)
sizeof(pfat_bsbpb->BS_VolLab)) == 0) {
goto endofchecks;
}
- strlcpy(label, pfat_bsbpb->BS_VolLab,
- MIN(size, sizeof(pfat_bsbpb->BS_VolLab) + 1));
+ copysize = MIN(size - 1, sizeof(pfat_bsbpb->BS_VolLab));
+ memcpy(label, pfat_bsbpb->BS_VolLab, copysize);
+ label[copysize] = '\0';
} else if (UINT32BYTES(pfat32_bsbpb->BPB_FATSz32) != 0) {
uint32_t fat_FirstDataSector, fat_BytesPerSector, offset;
@@ -101,8 +103,10 @@ fstyp_msdosfs(FILE *fp, char *label, size_t size)
*/
if (strncmp(pfat32_bsbpb->BS_VolLab, LABEL_NO_NAME,
sizeof(pfat32_bsbpb->BS_VolLab)) != 0) {
- strlcpy(label, pfat32_bsbpb->BS_VolLab,
- MIN(size, sizeof(pfat32_bsbpb->BS_VolLab) + 1));
+ copysize = MIN(size - 1,
+ sizeof(pfat32_bsbpb->BS_VolLab) + 1);
+ memcpy(label, pfat32_bsbpb->BS_VolLab, copysize);
+ label[copysize] = '\0';
goto endofchecks;
}
@@ -146,9 +150,11 @@ fstyp_msdosfs(FILE *fp, char *label, size_t size)
*/
if (pfat_entry->DIR_Attr &
FAT_DES_ATTR_VOLUME_ID) {
- strlcpy(label, pfat_entry->DIR_Name,
- MIN(size,
- sizeof(pfat_entry->DIR_Name) + 1));
+ copysize = MIN(size - 1,
+ sizeof(pfat_entry->DIR_Name));
+ memcpy(label, pfat_entry->DIR_Name,
+ copysize);
+ label[copysize] = '\0';
goto endofchecks;
}
} while((uint8_t *)(++pfat_entry) <