Просмотр исходного кода

Fix bug with empty directories

Ben S 11 лет назад
Родитель
Сommit
03ecb8c9e1
3 измененных файлов с 4 добавлено и 6 удалено
  1. 2 2
      src/exa.rs
  2. 1 1
      src/file.rs
  3. 1 3
      src/unix.rs

+ 2 - 2
src/exa.rs

@@ -79,7 +79,7 @@ fn lines_view(files: Vec<&File>) {
 }
 }
 
 
 fn grid_view(across: bool, console_width: uint, files: Vec<&File>) {
 fn grid_view(across: bool, console_width: uint, files: Vec<&File>) {
-    let max_column_length = files.iter().map(|f| f.file_name_width()).max().unwrap();
+    let max_column_length = files.iter().map(|f| f.file_name_width()).max().unwrap_or(0);
     let num_columns = (console_width + 1) / (max_column_length + 1);
     let num_columns = (console_width + 1) / (max_column_length + 1);
     let count = files.len();
     let count = files.len();
 
 
@@ -143,7 +143,7 @@ fn details_view(options: &Options, columns: &Vec<Column>, files: Vec<&File>) {
         .collect();
         .collect();
 
 
     let column_widths: Vec<uint> = range(0, columns.len())
     let column_widths: Vec<uint> = range(0, columns.len())
-        .map(|n| lengths.iter().map(|row| row[n]).max().unwrap())
+        .map(|n| lengths.iter().map(|row| row[n]).max().unwrap_or(0))
         .collect();
         .collect();
 
 
     for (field_widths, row) in lengths.iter().zip(table.iter()) {
     for (field_widths, row) in lengths.iter().zip(table.iter()) {

+ 1 - 1
src/file.rs

@@ -32,7 +32,7 @@ pub struct File<'a> {
 impl<'a> File<'a> {
 impl<'a> File<'a> {
     pub fn from_path(path: &'a Path, parent: &'a Dir) -> IoResult<File<'a>> {
     pub fn from_path(path: &'a Path, parent: &'a Dir) -> IoResult<File<'a>> {
         let v = path.filename().unwrap();  // fails if / or . or ..
         let v = path.filename().unwrap();  // fails if / or . or ..
-        let filename = String::from_utf8(v.to_vec()).unwrap();
+        let filename = String::from_utf8(v.to_vec()).unwrap_or_else(|_| panic!("Name was not valid UTF-8"));
         
         
         // Use lstat here instead of file.stat(), as it doesn't follow
         // Use lstat here instead of file.stat(), as it doesn't follow
         // symbolic links. Otherwise, the stat() call will fail if it
         // symbolic links. Otherwise, the stat() call will fail if it

+ 1 - 3
src/unix.rs

@@ -29,7 +29,6 @@ mod c {
     }
     }
 
 
     #[repr(C)]
     #[repr(C)]
-    #[deriving(Show)]
     pub struct c_group {
     pub struct c_group {
         pub gr_name:   *const c_char,         // group name
         pub gr_name:   *const c_char,         // group name
         pub gr_passwd: *const c_char,         // password
         pub gr_passwd: *const c_char,         // password
@@ -142,7 +141,6 @@ impl Unix {
                 }                
                 }                
                 self.group_names.insert(gid, group_name);
                 self.group_names.insert(gid, group_name);
             }
             }
-        }
-        
+        }        
     }
     }
 }
 }