Switch to side-by-side view

--- a/src/internfile/internfile.cpp
+++ b/src/internfile/internfile.cpp
@@ -581,6 +581,9 @@
 void FileInterner::collectIpathAndMT(Rcl::Doc& doc) const
 {
     LOGDEB2("FileInterner::collectIpathAndMT\n");
+
+    // Set to true if any element in the stack sets an ipath. (at least one of
+    // the docs is a compound).
     bool hasipath = false;
 
     if (!m_noxattrs) {
@@ -589,28 +592,27 @@
 
     docFieldsFromMetaCmds(m_cfg, m_cmdFields, doc);
 
-    // If there is no ipath stack, the mimetype is the one from the file
+    // If there is no ipath stack, the mimetype is the one from the
+    // file, else we'll change it further down.
     doc.mimetype = m_mimetype;
 
-    string ipathel;
-    for (vector<RecollFilter*>::const_iterator hit = m_handlers.begin();
-	 hit != m_handlers.end(); hit++) {
-	const map<string, string>& docdata = (*hit)->get_meta_data();
-        ipathel.clear();
+    for (const auto& handler : m_handlers) {
+	const map<string, string>& docdata = handler->get_meta_data();
+        string ipathel;
 	getKeyValue(docdata, cstr_dj_keyipath, ipathel);
         if (!ipathel.empty()) {
             // Non-empty ipath. This stack element is for an
             // actual embedded document, not a format translation.
             hasipath = true;
+            doc.ipath += colon_hide(ipathel) + cstr_isep;
             getKeyValue(docdata, cstr_dj_keymt, doc.mimetype);
             getKeyValue(docdata, cstr_dj_keyfn, doc.meta[Rcl::Doc::keyfn]);
-        } else {
+       } else {
             if (doc.fbytes.empty()) {
-                lltodecstr((*hit)->get_docsize(), doc.fbytes);
+                lltodecstr(handler->get_docsize(), doc.fbytes);
                 LOGDEB("collectIpath..: fbytes->" << doc.fbytes << endl);
             }
         }
-        doc.ipath += colon_hide(ipathel) + cstr_isep;
         // We set the author field from the innermost doc which has
         // one: allows finding, e.g. an image attachment having no
         // metadata by a search on the sender name. Only do this for
@@ -625,16 +627,12 @@
         }
     }
 
-    // Trim empty tail elements in ipath.
     if (hasipath) {
+        // Trim ending ipath separator
 	LOGDEB2("IPATH [" << doc.ipath << "]\n");
-	string::size_type sit = doc.ipath.find_last_not_of(cstr_isep);
-	if (sit == string::npos)
-	    doc.ipath.erase();
-	else if (sit < doc.ipath.length() -1)
-	    doc.ipath.erase(sit+1);
-    } else {
-	doc.ipath.erase();
+        if (doc.ipath.back() ==  cstr_isep[0]) {
+            doc.ipath.erase(doc.ipath.end()-1);
+        }
     }
 }