 }
 
 
-public class FileBrowser {
+final public class FileBrowser {
 
   var dirp: COpaquePointer?
   var entry: DirentEntry?

    }
  }

  var entryType: FileType {
    let t = entry!.memory.d_type
    return t == 8 ? .F : (t == 4 ? .D : .U)
  }

  public static func scanDir(dirPath: String,
      fn: (name: String, type: FileType) -> Void) throws {
    let fb = try FileBrowser(path: dirPath)
    while fb.next() {
      fn(name: fb.entryName ?? "", type: fb.entryType)
    }
  }

  public static func recurseDir(dirPath: String,
      fn: (name: String, type: FileType, dirPath: String) -> Void) {
    let a = [UInt8](dirPath.utf8)
    let lasti = a.count - 1
    if lasti >= 0 {

    }
  }

  public var name: String? {
    var dirName = entry!.memory.d_name
    return withUnsafePointer(&dirName) { (ptr) -> String? in
      return String.fromCString(UnsafePointer<CChar>(ptr))
    }
  }

  public var nameBytes: [UInt8] {
    var dirName = entry!.memory.d_name
    return withUnsafePointer(&dirName) { (ptr) -> [UInt8] in
      let len = Int(Sys.strlen(UnsafePointer<CChar>(ptr)))
