do
s.write_native(items, first_byte, bytelen)
end
+
+ redef fun file_extension do
+ var its = _items
+ var p = _last_byte
+ var c = its[p]
+ var st = _first_byte
+ while p >= st and c != '.'.ascii do
+ p -= 1
+ c = its[p]
+ end
+ if p <= st then return null
+ var ls = _last_byte
+ return new FlatString.with_infos(its, ls - p, p + 1, ls)
+ end
+
+ redef fun basename(extension) do
+ var l = _last_byte
+ var its = _items
+ var min = _first_byte
+ var sl = '/'.ascii
+ while l > min and its[l] == sl do l -= 1
+ if l == min then return "/"
+ var ns = l
+ while ns >= min and its[ns] != sl do ns -= 1
+ var bname = new FlatString.with_infos(its, l - ns, ns + 1, l)
+
+ return if extension != null then bname.strip_extension(extension) else bname
+ end
end
redef class NativeString