Bugs: Browse | Submit New | Admin

[#8676] File.basename fails on Windows root paths

Date:
2007-02-15 17:09
Priority:
3
Submitted By:
Daniel Berger (djberg96)
Assigned To:
Akinori MUSHA (knu)
Category:
Files / Dirs / IO
State:
Closed
Platform:
 
Summary:
File.basename fails on Windows root paths

Detailed description
Ruby 1.8.5
Windows XP Pro, SP2

The File.basename method does not work properly on Windows root paths. IMO, calling File.basename on a root path should
return itself. However, on MS Windows it appears to be dropping the volume name and it doesn't handle UNC root paths
correctly:

require 'test/unit'

class TC_File_Basename_ClassMethod < Test::Unit::TestCase
   def test_basename_windows_root_forward_slash
      assert_equal("C:/", File.basename("C:/"))
   end

   def test_basename_windows_root_backslash
      assert_equal("C:\\", File.basename("C:\\"))  # Or "C:/" if you prefer
   end

   def test_basename_windows_unc_root_two_elements
      assert_equal("\\\\foo\\bar", File.basename("\\\\foo\\bar"))
   end

   def test_basename_windows_unc_root_one_element
      assert_equal("\\\\foo", File.basename("\\\\foo"))
   end
end

C:\Documents and Settings\djberge\My Documents\Ruby>ruby basename_bugs.rb
Loaded suite basename_bugs
Started
FFFF
Finished in 0.07 seconds.

  1) Failure:
test_basename_windows_root_backslash(TC_File_Basename_ClassMethod) [basename_bugs.rb:9]:
<"C:\\"> expected but was
<"\\">.

  2) Failure:
test_basename_windows_root_forward_slash(TC_File_Basename_ClassMethod) [basename_bugs.rb:5]:
<"C:/"> expected but was
<"/">.

  3) Failure:
test_basename_windows_unc_root_one_element(TC_File_Basename_ClassMethod) [basename_bugs.rb:17]:
<"\\\\foo"> expected but was
<"/">.

  4) Failure:
test_basename_windows_unc_root_two_elements(TC_File_Basename_ClassMethod) [basename_bugs.rb:13]:
<"\\\\foo\\bar"> expected but was
<"/">.

4 tests, 4 assertions, 4 failures, 0 errors

This method should probably be moved to win32.c where you can use the Windows path handling functions from shlwapi.h
to get things right, and convert the path separators as you see fit.

Regards,

Dan

Add A Comment: Notepad

Please login


Followup

Message
Date: 2014-02-20 22:33
Sender: Daniel Berger

I think it works better now. There's always win32-file, too.

Attached Files:

Name Description Download
No Files Currently Attached

Changes:

Field Old Value Date By
close_date2014-02-20 22:332014-02-20 22:33djberg96
resolution_idNone2014-02-20 22:33djberg96
status_idOpen2014-02-20 22:33djberg96
assigned_tonone2007-06-12 01:22zenspider
category_idMisc / Other Standard Library2007-05-29 20:57zenspider
category_idLanguage / Runtime / Core Libraries2007-05-29 15:54zenspider