forked from mia/Aegisub
80 lines
2.2 KiB
Text
80 lines
2.2 KiB
Text
-- Copyright (c) 2014, Thomas Goyne <plorkyeran@aegisub.org>
|
|
--
|
|
-- Permission to use, copy, modify, and distribute this software for any
|
|
-- purpose with or without fee is hereby granted, provided that the above
|
|
-- copyright notice and this permission notice appear in all copies.
|
|
--
|
|
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
-- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
-- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
-- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
--
|
|
-- Aegisub Project http://www.aegisub.org/
|
|
|
|
impl = require 'aegisub.__lfs_impl'
|
|
ffi = require 'ffi'
|
|
ffi_util = require 'aegisub.ffi'
|
|
|
|
for k, v in pairs impl
|
|
impl[k] = ffi_util.err_arg_to_multiple_return v
|
|
|
|
string_ret = (f) -> (...) ->
|
|
res, err = f ...
|
|
ffi_util.string(res), err
|
|
|
|
number_ret = (f) -> (...) ->
|
|
res, err = f ...
|
|
tonumber(res), err
|
|
|
|
attributes = (path, field) ->
|
|
switch field
|
|
when 'mode'
|
|
res, err = impl.get_mode path
|
|
ffi_util.string(res), err
|
|
when 'modification'
|
|
res, err = impl.get_mtime path
|
|
tonumber(res), err
|
|
when 'size'
|
|
res, err = impl.get_size path
|
|
tonumber(res), err
|
|
else
|
|
mode, err = impl.get_mode path
|
|
if err or mode == nil then return nil, err
|
|
|
|
mod, err = impl.get_mtime path
|
|
if err then return nil, err
|
|
|
|
size, err = impl.get_size path
|
|
if err then return nil, err
|
|
|
|
mode: ffi_util.string(mode), modification: tonumber(mod), size: tonumber(size)
|
|
|
|
class dir_iter
|
|
new: (iter) =>
|
|
@iter = ffi.gc iter, -> impl.dir_free iter
|
|
close: =>
|
|
impl.dir_close @iter
|
|
next: =>
|
|
str, err = impl.dir_next @iter
|
|
if err then error err, 2
|
|
ffi_util.string str
|
|
|
|
dir = (path) ->
|
|
obj, err = impl.dir_new path
|
|
if err
|
|
error 2, err
|
|
iter = dir_iter obj
|
|
iter.next, iter
|
|
|
|
return {
|
|
:attributes
|
|
chdir: number_ret impl.chdir
|
|
currentdir: string_ret impl.currentdir
|
|
:dir
|
|
mkdir: number_ret impl.mkdir
|
|
rmdir: number_ret impl.rmdir
|
|
touch: number_ret impl.touch
|
|
}
|