}
}
namelen = strlen(dirent->d_name);
- if (namelen > MAX_INPUT_NAMELEN)
- errx(MKFS_EX_ERROR,
- _("Very long (%zu bytes) filename `%s' found.\n"
- " Please increase MAX_INPUT_NAMELEN in "
- "mkcramfs.c and recompile. Exiting."),
- namelen, dirent->d_name);
+ if (namelen > MAX_INPUT_NAMELEN) {
+ namelen = MAX_INPUT_NAMELEN;
+ warn_namelen = 1;
+ }
+
memcpy(endpath, dirent->d_name, namelen + 1);
if (lstat(path, &st) < 0) {
continue;
}
entry = xcalloc(1, sizeof(struct entry));
- entry->name = (unsigned char *)xstrdup(dirent->d_name);
- if (namelen > 255) {
- /* Can't happen when reading from ext2fs. */
-
- /* TODO: we ought to avoid chopping in half
- multi-byte UTF8 characters. */
- entry->name[namelen = 255] = '\0';
- warn_namelen = 1;
- }
+ entry->name = (unsigned char *)xstrndup(dirent->d_name, namelen);
entry->mode = st.st_mode;
entry->size = st.st_size;
entry->uid = st.st_uid;
if (warn_namelen)
/* Can't happen when reading from ext2fs. */
/* Bytes, not chars: think UTF8. */
- warnx(_("warning: filenames truncated to 255 bytes."));
+ warnx(_("warning: filenames truncated to %u bytes."), MAX_INPUT_NAMELEN);
if (warn_skip)
warnx(_("warning: files were skipped due to errors."));
if (warn_size)