diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 7072f1b498b..1ff88f1d127 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -48,6 +48,7 @@ use std::collections::HashMap; use std::path::PathBuf; use std::rc::Rc; use std::u32; +use std::env::current_dir; use core::DocContext; use doctree; @@ -201,7 +202,13 @@ impl<'a, 'tcx> Clean for visit_ast::RustdocVisitor<'a, 'tcx> { } let src = match cx.input { - Input::File(ref path) => path.clone(), + Input::File(ref path) => { + if path.is_absolute() { + path.clone() + } else { + current_dir().unwrap().join(path) + } + }, Input::Str(_) => PathBuf::new() // FIXME: this is wrong }; diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 267220891b9..a7c796dd2f5 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -46,7 +46,7 @@ use std::io::prelude::*; use std::io::{self, BufWriter, BufReader}; use std::iter::repeat; use std::mem; -use std::path::{PathBuf, Path}; +use std::path::{PathBuf, Path, Component}; use std::str; use std::sync::Arc; @@ -810,16 +810,17 @@ fn clean_srcpath(src_root: &Path, p: &Path, keep_filename: bool, mut f: F) wh // make it relative, if possible let p = p.strip_prefix(src_root).unwrap_or(p); - let mut iter = p.iter().map(|x| x.to_str().unwrap()).peekable(); + let mut iter = p.components().peekable(); + while let Some(c) = iter.next() { if !keep_filename && iter.peek().is_none() { break; } - if ".." == c { - f("up"); - } else { - f(c) + match c { + Component::ParentDir => f("up"), + Component::Normal(c) => f(c.to_str().unwrap()), + _ => continue, } } } @@ -871,7 +872,7 @@ impl<'a> DocFolder for SourceCollector<'a> { // entire crate. The other option is maintaining this mapping on a // per-file basis, but that's probably not worth it... self.cx - .include_sources = match self.emit_source(&item.source .filename) { + .include_sources = match self.emit_source(&item.source.filename) { Ok(()) => true, Err(e) => { println!("warning: source code was requested to be rendered, \ diff --git a/src/test/rustdoc/issue-26995.rs b/src/test/rustdoc/issue-26995.rs new file mode 100644 index 00000000000..bfb440a1839 --- /dev/null +++ b/src/test/rustdoc/issue-26995.rs @@ -0,0 +1,17 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-windows +// compile-flags: --no-defaults + +// @has src/issue_26995/dev/null.html +// @has issue_26995/null/index.html '//a/@href' '../../src/issue_26995/dev/null.html' +#[path="/dev/null"] +pub mod null;