+ char_directive dir = dirs->dir[dir_idx];
+ int n = 0;
+
+ while (dir_idx < dirs->count && dir.conversion == '%' )
+ {
+ g_string_erase (str, dir.dir_start - *s, 1);
+ dir = dirs->dir[++dir_idx];
+ n++;
+ }
+
+ g_string_truncate (str, dir.dir_start - *s - n);
+
+ if ( dir_idx >= dirs->count)
+ *s = NULL;
+ else
+ *s = dir.dir_end;