   @spec absname(t, t) :: binary
   def absname(path, relative_to) do
     path = IO.chardata_to_string(path)
+
     case type(path) do
-      :relative -> absname_join(relative_to, path)
-      :absolute -> absname_join([path])
+      :relative ->
+        absname_join(relative_to, path)
+
+      :absolute ->
+        absname_join([path])
+
       :volumerelative ->
         relative_to = IO.chardata_to_string(relative_to)
         absname_vr(split(path), split(relative_to), relative_to)

  """
  @spec join(t, t) :: binary
  def join(left, right) do
    left    = IO.chardata_to_string(left)
    os_type = major_os_type()
    do_join(left, right, os_type) |> remove_dir_sep(os_type)
  end

  defp do_join("", right, os_type),   do: relative(right, os_type)
  defp do_join("/", right, os_type),  do: "/" <> relative(right, os_type)
  defp do_join(left, right, os_type), do: remove_dir_sep(left, os_type) <> "/" <> relative(right, os_type)

  defp remove_dir_sep("", _os_type), do: ""
  defp remove_dir_sep("/", _os_type), do: "/"
  defp remove_dir_sep(bin, os_type) do
    last = :binary.last(bin)
    if last == ?/ or (last == ?\\ and os_type == :win32) do
      binary_part(bin, 0, byte_size(bin) - 1)
    else

      case call({:list_dir, dir}) do
        {:ok, files} ->
          {:ok, for(file <- files, hd(file) != ?., do: file)}

        other ->
          other
      end
