rem: errh->message("%s unchanged", filename.c_str());
add: errh->message("%s unchanged", map_file.c_str());
context: update_autofont_map(const String &fontname, String mapline, ErrorHandler *errh){#if HAVE_KPATHSEA    if (automatic && getodir(O_MAP, errh)) {	String filename = odir[O_MAP] + "/" + vendor + ".map";	// report nocreate/verbose	if (nocreate) {	    errh->message("would update %s", filename.c_str());	    return 0;	} else if (verbose)	    errh->message("updating %s", filename.c_str());		int fd = open(filename.c_str(), O_RDWR | O_CREAT, 0666);	if (fd < 0)	    return errh->error("%s: %s", filename.c_str(), strerror(errno));	FILE *f = fdopen(fd, "r+");	// NB: also change update_autofont_map if you change this code# if defined(F_SETLKW) && defined(HAVE_FTRUNCATE)	{	    struct flock lock;	    lock.l_type = F_WRLCK;	    lock.l_whence = SEEK_SET;	    lock.l_start = 0;	    lock.l_len = 0;	    int result;	    while ((result = fcntl(fd, F_SETLKW, &lock)) < 0 || errno == EINTR)		/* try again */;	    if (result < 0) {		result = errno;		fclose(f);		return errh->error("locking %s: %s", filename.c_str(), strerror(result));	    }	}# endif	// remove spurious absolute paths from mapline	for (int pos = mapline.find_left('<'); pos >= 0; pos = mapline.find_left('<', pos + 1)) {	    if (pos + 1 < mapline.length() && (mapline[pos+1] == '[' || mapline[pos+1] == '<'))		pos++;	    if (pos + 1 + writable_texdir.length() <= mapline.length()		&& memcmp(mapline.data() + pos + 1, writable_texdir.data(), writable_texdir.length()) == 0) {		int space = mapline.find_left(' ', pos + writable_texdir.length());		if (space < 0)		    space = mapline.length();		int slash = mapline.find_right('/', space);		mapline = mapline.substring(0, pos + 1) + mapline.substring(slash + 1);	    }	}	// read old data from encoding file	StringAccum sa;	while (!feof(f))	    if (char *x = sa.reserve(8192)) {		int amt = fread(x, 1, 8192, f);		sa.forward(amt);	    } else {		fclose(f);		return errh->error("Out of memory!");	    }	String text = sa.take_string();	// add comment if necessary	bool created = (!text);	if (created)	    text = "% Automatically maintained by otftotfm or other programs. Do not edit.\n\n";	if (text.back() != '\n')	    text += "\n";	// append old encodings	int fl = 0;	int nl = text.find_left('\n') + 1;	while (fl < text.length()) {	    if (fl + fontname.length() + 1 < nl		&& memcmp(text.data() + fl, fontname.data(), fontname.length()) == 0		&& text[fl + fontname.length()] == ' ') {		// found the old name		if (text.substring(fl, nl - fl) == mapline) {		    // duplicate of old name, don't change it		    fclose(f);		    if (verbose)			errh->message("%s unchanged", filename.c_str());		    return 0;		} else {		    text = text.substring(0, fl) + text.substring(nl);		    nl = fl;		}	    }	    fl = nl;	    nl = text.find_left('\n', fl) + 1;	}	// add our text	text += mapline;	// rewind file# ifdef HAVE_FTRUNCATE	rewind(f);	ftruncate(fd, 0);# else	fclose(f);	f = fopen(filename.c_str(), "w");# endif	// write data	fwrite(text.data(), 1, text.length(), f);		fclose(f);	// inform about the new file if necessary	if (created)	    update_odir(O_MAP, filename, errh);    }#else    (void) mapline;#endif    return 0;}