- if (len > 0 && b[len - 1] == '\n') {
- char *str;
- xbt_dynar_pop(db, &str);
- free(str);
+ if (len > 0 && b[len - 1] == '\n')
+ xbt_dynar_pop(db, NULL);
+
+ /* Find the common suffix, do it before extracting the prefix,
+ * as xbt_dynar_pop costs less than xbt_dynar_shift */
+ length_da = xbt_dynar_length(da);
+ while (length_da > 0 && xbt_dynar_length(db) > 0 &&
+ !strcmp(xbt_dynar_get_as(da, length_da - 1, char *),
+ xbt_dynar_getlast_as(db, char *))) {
+ xbt_dynar_pop(db, NULL);
+ length_da--;