another attempt to fix embedded-dot problem

This commit is contained in:
David Rose 2002-07-27 19:16:56 +00:00
parent 07ab48032d
commit 32348d7410
2 changed files with 22 additions and 12 deletions

View File

@ -193,19 +193,25 @@ void ImageFile::
set_filename(const string &dirname, const string &basename) {
_filename = Filename(dirname, basename);
if (_properties._alpha_type != (PNMFileType *)NULL) {
_alpha_filename =
_filename.get_fullpath() + "_a." +
_properties._alpha_type->get_suggested_extension();
}
// Since we use set_extension() here, if the file already contains a
// filename extension it will be lost.
// It is particularly important to note that a single embedded dot
// will appear to begin a filename extension, so if the filename
// does *not* contain an extension, but does contain an embedded
// dot, the filename will be truncated at that dot. It is therefore
// important that the supplied basename always contains either an
// extension or a terminating dot.
if (_properties._color_type != (PNMFileType *)NULL) {
// We shouldn't use _filename.set_extension(), because that may
// inadvertently truncate the filename if it already includes a
// dot.
_filename =
_filename.get_fullpath() + "." +
_properties._color_type->get_suggested_extension();
_filename.set_extension
(_properties._color_type->get_suggested_extension());
}
if (_properties._alpha_type != (PNMFileType *)NULL) {
_alpha_filename = _filename.get_fullpath_wo_extension() + "_a";
_alpha_filename.set_extension
(_properties._alpha_type->get_suggested_extension());
}
}

View File

@ -175,8 +175,12 @@ PaletteImage(PalettePage *page, int index) :
_got_image = false;
ostringstream name;
// We must end the basename with a dot, so that it does not appear
// to have a filename extension. Otherwise, an embedded dot in the
// group's name would make everything following appear to be an
// extension, which would get lost in the set_filename() call.
name << page->get_group()->get_name() << "_palette_"
<< page->get_name() << "_" << index + 1;
<< page->get_name() << "_" << index + 1 << ".";
_basename = name.str();