File: file.lua

package info (click to toggle)
lua-uri 0.1%2B20130926%2Bgit14fa255d-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch
  • size: 408 kB
  • ctags: 332
  • sloc: makefile: 53
file content (72 lines) | stat: -rw-r--r-- 1,735 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
local M = { _NAME = "uri.file" }
local Util = require "uri._util"
local URI = require "uri"
Util.subclass_of(M, URI)

function M.init (self)
    if self:userinfo() or self:port() then
        return nil, "usernames and passwords are not allowed in HTTP URIs"
    end

    local host = self:host()
    local path = self:path()
    if host then
        if host:lower() == "localhost" then self:host("") end
    else
        if not path:find("^/") then
            return nil, "file URIs must contain a host, even if it's empty"
        end
        self:host("")
    end

    if path == "" then self:path("/") end

    return self
end

function M.host (self, ...)
    local old = M._SUPER.host(self)

    if select('#', ...) > 0 then
        local new = ...
        if not new then error("file URIs must have an authority part", 2) end
        if new:lower() == "localhost" then new = "" end
        M._SUPER.host(self, new)
    end

    return old
end

function M.path (self, ...)
    local old = M._SUPER.path(self)

    if select('#', ...) > 0 then
        local new = ...
        if not new or new == "" then new = "/" end
        M._SUPER.path(self, new)
    end

    return old
end

local function _os_implementation (os)
    local FileImpl = Util.attempt_require("uri.file." .. os:lower(), 3)
    if not FileImpl then
        error("no file URI implementation for operating system " .. os)
    end
    return FileImpl
end

function M.filesystem_path (self, os)
    return _os_implementation(os).filesystem_path(self)
end

function M.make_file_uri (path, os)
    return _os_implementation(os).make_file_uri(path)
end

Util.uri_part_not_allowed(M, "userinfo")
Util.uri_part_not_allowed(M, "port")

return M
-- vi:ts=4 sw=4 expandtab