44 Commits

Author SHA1 Message Date
Hisham Muhammad
95573506c5 Remove old references 2014-01-29 21:43:20 -02:00
Hisham Muhammad
1b3e3d4b4b Add top-level LICENSE file. Closes #33. 2014-01-29 21:15:29 -02:00
Hisham Muhammad
3bfdafcf4c Fix documentation for setmode. Closes #32. 2014-01-29 20:33:43 -02:00
Hisham Muhammad
00b17c6f1a Merge branch 'master' of https://github.com/keplerproject/luafilesystem 2014-01-29 17:27:04 -02:00
Hisham Muhammad
2111509acc Improve indentation consistency 2014-01-29 17:26:45 -02:00
Hisham Muhammad
18afb5a089 Use local stylesheet, suitable for truly offline viewing. 2014-01-29 17:22:49 -02:00
Hisham Muhammad
ebf867f729 Remove outdated links 2014-01-29 17:21:59 -02:00
Hisham Muhammad
5be0c7156e Merge pull request #28 from moteus/patch-1
Fix. Prevents double close the same handle (#24)
2014-01-08 06:53:06 -08:00
Alexey Melnichuk
cc6007171b Fix. Prevents double close the same handle (#24)
lfs_unlock_dir can be called multiple times for the same object.
For example if lock:free is called manually.
Then lfs_unlock_dir will be called always
again, as soon as the LOCK_METATABLE is collected by GC.
This can lead to strange file errors later on, like closing
another file, which now has been assigned the same handle...
2014-01-08 16:18:31 +03:00
Hisham Muhammad
2b80db36f0 Merge pull request #27 from moteus/patch-1
Fix. Use intptr_t to file handle on Windows (#26)
2014-01-04 12:13:23 -08:00
Alexey Melnichuk
ab8348e9bc Fix. Use intptr_t to file handle on Windows (#26)
Tested on MS VS2008(x32) MinGW(x32) and MS VS2012(x64)
2014-01-04 10:02:16 +03:00
Fabio Mascarenhas
2fd989cd6c Merge pull request #21 from Mikhael-Danilov/patch-1
Update src/lfs.c
2013-09-24 06:48:18 -07:00
Mikhael-Danilov
b21e375840 Update src/lfs.c
Fix Windows build: make_link now returns int as it should
2013-02-20 22:19:05 +04:00
Fabio Mascarenhas
9c2679f9d7 Merge pull request #19 from devurandom/fix/warnings
Fix some warnings GCC produced on Linux
2012-10-04 07:25:54 -07:00
Fabio Mascarenhas
62d5dbe3b6 Merge pull request #18 from devurandom/fix/lua52
Full Lua 5.2 compatibility and adherance to modules-create-no-globals
2012-10-04 07:00:22 -07:00
Dennis Schridde
a0d6f9d239 Fix warnings: unused variable
On non-win32 lfs_setmode was defined to 0, ignoring all parameters.
Now the parameters are explicitly discarded.

Fixes:
src/lfs.c: In function ‘lfs_g_setmode’:
src/lfs.c:324:7: warning: unused variable ‘op’ [-Wunused-variable]
src/lfs.c:321:47: warning: unused parameter ‘f’ [-Wunused-parameter]
2012-10-04 10:55:13 +02:00
Dennis Schridde
b35607e8a4 Fix warning: C++ style comments are not allowed in ISO C90 2012-10-04 10:51:44 +02:00
Dennis Schridde
f42c1a1a38 Set global "lfs" when opening module
* Ensures backward compatibility with LFS 1.5
* Module name is defined as LFS_LIBNAME, similar to how Lua standard libraries are defined
2012-10-04 10:48:07 +02:00
Dennis Schridde
5e55437028 Bump version to 1.6.2 and set version via define in src/lfs.c to make it better visible 2012-10-03 02:58:57 +02:00
Dennis Schridde
8e7217e74f Full Lua 5.2 compatibility and adherance to modules-create-no-globals 2012-10-03 02:54:08 +02:00
Fabio Mascarenhas
944e325e29 fix build for Lua 5.2; version 1.6.1 2012-10-01 15:57:09 -03:00
Fabio Mascarenhas
201d18a497 Merge pull request #17 from rrthomas/master
Use Lua 5.2's own luaL_register
2012-10-01 11:53:35 -07:00
Reuben Thomas
584066ee86 lfs.c: use Lua 5.2's own luaL_register 2012-10-01 19:44:00 +01:00
Fabio Mascarenhas
d71c63cdb7 luafilesystem 1.6.0 2012-10-01 11:11:48 -03:00
Fabio Mascarenhas
4a299c53b6 Merge pull request #15 from ewmailing/master
Improvements to use of getcwd() for using the correct max path length
2012-09-26 06:49:35 -07:00
Fabio Mascarenhas
420db54f1e Merge pull request #14 from icgood/master
5.2 compatibility
2012-08-31 12:09:14 -07:00
Eric Wing
37c2309a40 Due to Android (and apparently Sun) not supporting getcwd(NULL, 0), I've changed to call to getcwd to specify a buffer and explicit size which successfully works around the problem. One minor performance advantage is that one less malloc/free is needed since the buffer is now created on the stack. Apparently, this was already changed in a prior commit I didn't see initially, but I think the use of an invented/arbitrary PATH_MAX is incorrect. Platforms should generally provide a constant for this and PATH_MAX itself is already defined on some systems like Linux which can cause collisions. This commit improves on those changes by leveraging the constants provided by the compiler/system.
To help keep the code consistent but still correct, new platform specific code needed to be introduced for the max length. On POSIX I am assuming it is that <sys/param.h> provides MAXPATHLEN. This is what the Mac/BSD man page says to use and verified this is also defined on Ubuntu Linux and Android. On Windows, MAX_PATH is used. MAX_PATH seems to still be 260 which seems kind of small; is there a different constant we are supposed to use? In both cases, the respective constants are mapped to a new #define for LFS_MAXPATHLEN to allow the code to refer to one constant and avoid any potential name collisions in case MAXPATHLEN is defined already by something else on Windows (e.g. Cygwin).
2012-05-01 14:38:02 -07:00
Fabio Mascarenhas
84f1af5eef applied debian patches from enrico tassi 2012-04-08 20:25:40 -03:00
Ian Good
f634765b26 implements fake luaL_register in Lua 5.2+ 2012-02-28 03:37:14 +00:00
Fabio Mascarenhas
149e0fb8ec Merge pull request #8 from rrthomas/master
New lfs.link and other goodies
2011-06-09 14:09:31 -07:00
Reuben Thomas
83faa7e05d Simplify and clarify metatable creation functions. 2011-06-09 20:35:12 +01:00
Reuben Thomas
3cea6c6e96 Add lfs.link. 2011-06-09 19:53:41 +01:00
Reuben Thomas
7e979318bd Use package.config to get directory separator. 2011-06-09 19:53:41 +01:00
Reuben Thomas
de03ad370c Add a comment for make_dir. 2011-06-09 19:53:41 +01:00
Reuben Thomas
fbdff8f1a5 Fix typo in manual. 2011-06-09 19:53:41 +01:00
Reuben Thomas
f42e7e3543 Simplify dir_iter_factory slightly. 2011-06-09 19:53:41 +01:00
Reuben Thomas
d61eb8078d Add .gitignore for *.o and *.so. 2011-06-09 19:53:41 +01:00
Reuben Thomas
361cede4d0 Add trivial implementation of setmode on non-Windows platforms. 2011-06-09 19:53:41 +01:00
Reuben Thomas
3140ca4db8 Make test.lua find its interpreter using /usr/bin/env. 2011-06-09 19:53:41 +01:00
Reuben Thomas
530c9140c7 Add trivial link_info support on Windows (using STAT_FUNC). 2011-06-09 19:53:41 +01:00
Fabio Mascarenhas
d292b3243f update links to bug tracker and cvs 2011-06-06 10:53:39 -03:00
Fabio Mascarenhas
2f55c33b0c change to build with lua 5.2 alpha, issue #5 2011-06-06 10:49:39 -03:00
Fabio Mascarenhas
ae5a05deec fixed dir length bug in windows directory iterator 2010-06-09 14:14:25 -03:00
Fabio Mascarenhas
fd028d3257 removed umask calls in lfs.mkdir, see kepler-list message from Enrico at 2009-12-27 2009-12-29 17:06:25 -02:00
14 changed files with 903 additions and 417 deletions

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
Copyright © 2003-2014 Kepler Project.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

12
README
View File

@@ -22,6 +22,18 @@ Please check the documentation at doc/us/ for more information.
History
-------
Version 1.6.2 [??/Oct/2012]
* Full Lua 5.2 compatibility (with Lua 5.1 fallbacks)
Version 1.6.1 [01/Oct/2012]
* fix build for Lua 5.2
Version 1.6.0 [26/Sep/2012]
* getcwd fix for Android
* support for Lua 5.2
* add lfs.link
* other bug fixes
Version 1.5.0 [20/Oct/2009]
* added explicit next and close methods to second return value of lfs.dir (the directory object), for explicit iteration or explicit closing.
* added directory locking via lfs.lock_dir function (see the manual).

212
doc/us/doc.css Normal file
View File

@@ -0,0 +1,212 @@
body {
margin-left: 1em;
margin-right: 1em;
font-family: arial, helvetica, geneva, sans-serif;
background-color:#ffffff; margin:0px;
}
code {
font-family: "Andale Mono", monospace;
}
tt {
font-family: "Andale Mono", monospace;
}
body, td, th { font-size: 11pt; }
h1, h2, h3, h4 { margin-left: 0em; }
textarea, pre, tt { font-size:10pt; }
body, td, th { color:#000000; }
small { font-size:0.85em; }
h1 { font-size:1.5em; }
h2 { font-size:1.25em; }
h3 { font-size:1.15em; }
h4 { font-size:1.06em; }
a:link { font-weight:bold; color: #004080; text-decoration: none; }
a:visited { font-weight:bold; color: #006699; text-decoration: none; }
a:link:hover { text-decoration:underline; }
hr { color:#cccccc }
img { border-width: 0px; }
h3 { padding-top: 1em; }
p { margin-left: 1em; }
p.name {
font-family: "Andale Mono", monospace;
padding-top: 1em;
margin-left: 0em;
}
blockquote { margin-left: 3em; }
.example {
background-color: rgb(245, 245, 245);
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-color: silver;
border-right-color: silver;
border-bottom-color: silver;
border-left-color: silver;
padding: 1em;
margin-left: 1em;
margin-right: 1em;
font-family: "Andale Mono", monospace;
font-size: smaller;
}
hr {
margin-left: 0em;
background: #00007f;
border: 0px;
height: 1px;
}
ul { list-style-type: disc; }
table.index { border: 1px #00007f; }
table.index td { text-align: left; vertical-align: top; }
table.index ul { padding-top: 0em; margin-top: 0em; }
table {
border: 1px solid black;
border-collapse: collapse;
margin-left: auto;
margin-right: auto;
}
th {
border: 1px solid black;
padding: 0.5em;
}
td {
border: 1px solid black;
padding: 0.5em;
}
div.header, div.footer { margin-left: 0em; }
#container {
margin-left: 1em;
margin-right: 1em;
background-color: #f0f0f0;
}
#product {
text-align: center;
border-bottom: 1px solid #cccccc;
background-color: #ffffff;
}
#product big {
font-size: 2em;
}
#product_logo {
}
#product_name {
}
#product_description {
}
#main {
background-color: #f0f0f0;
border-left: 2px solid #cccccc;
}
#navigation {
float: left;
width: 12em;
margin: 0;
vertical-align: top;
background-color: #f0f0f0;
overflow:visible;
}
#navigation h1 {
background-color:#e7e7e7;
font-size:1.1em;
color:#000000;
text-align:left;
margin:0px;
padding:0.2em;
border-top:1px solid #dddddd;
border-bottom:1px solid #dddddd;
}
#navigation ul {
font-size:1em;
list-style-type: none;
padding: 0;
margin: 1px;
}
#navigation li {
text-indent: -1em;
margin: 0em 0em 0em 0.5em;
display: block;
padding: 3px 0px 0px 12px;
}
#navigation li li a {
padding: 0px 3px 0px -1em;
}
#content {
margin-left: 12em;
padding: 1em;
border-left: 2px solid #cccccc;
border-right: 2px solid #cccccc;
background-color: #ffffff;
}
#about {
clear: both;
margin: 0;
padding: 5px;
border-top: 2px solid #cccccc;
background-color: #ffffff;
}
@media print {
body {
font: 10pt "Times New Roman", "TimeNR", Times, serif;
}
a {
font-weight:bold; color: #004080; text-decoration: underline;
}
#main {
background-color: #ffffff; border-left: 0px;
}
#container {
margin-left: 2%; margin-right: 2%; background-color: #ffffff;
}
#content {
margin-left: 0px; padding: 1em; border-left: 0px; border-right: 0px; background-color: #ffffff;
}
#navigation {
display: none;
}
#product_logo {
display: none;
}
#about img {
display: none;
}
.example {
font-family: "Andale Mono", monospace;
font-size: 8pt;
page-break-inside: avoid;
}
}

View File

@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<link rel="stylesheet" href="doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
@@ -45,10 +45,10 @@
</ul>
</li>
<li><strong>Examples</strong></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<li><a href="https://github.com/keplerproject/luafilesystem">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem/issues">Bug Tracker</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem">Git</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
@@ -65,7 +65,7 @@
attributes for each file inside it.</p>
<pre class="example">
require"lfs"
local lfs = require"lfs"
function attrdir (path)
for file in lfs.dir(path) do

View File

@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<link rel="stylesheet" href="doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
@@ -45,10 +45,10 @@
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<li><a href="https://github.com/keplerproject/luafilesystem">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem/issues">Bug Tracker</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem">Git</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
@@ -71,7 +71,8 @@ the underlying directory structure and file attributes.</p>
<h2><a name="status"></a>Status</h2>
<p>Current version is 1.5.0. It was developed for Lua 5.1.</p>
<p>Current version is 1.6.2. It was developed for Lua 5.1 but also
works with Lua 5.2.</p>
<h2><a name="download"></a>Download</h2>
@@ -82,10 +83,30 @@ page.</p>
<h2><a name="history"></a>History</h2>
<dl class="history">
<dt><strong>Version 1.6.2</strong> [??/Oct/2012]</dt>
<dd><ul>
<li>Full Lua 5.2 compatibility (with Lua 5.1 fallbacks)</li>
</ul></dd>
<dt><strong>Version 1.6.1</strong> [01/Oct/2012]</dt>
<dd><ul>
<li>fix build for Lua 5.2</li>
</ul></dd>
<dt><strong>Version 1.6.0</strong> [26/Sep/2012]</dt>
<dd><ul>
<li>getcwd fix for Android</li>
<li>support for Lua 5.2</li>
<li>add lfs.link</li>
<li>other bug fixes</li>
</ul></dd>
<dt><strong>Version 1.5.0</strong> [20/Oct/2009]</dt>
<dd><ul>
<li>Added explicit next and close methods to second return value of lfs.dir
(the directory object), for explicit iteration or explicit closing.</li>
<li>Added directory locking via lfs.lock_dir function (see the <a href="manual.html">manual</a>).</li>
</ul></dd>
<dt><strong>Version 1.4.2</strong> [03/Feb/2009]</dt>
<dd>
<ul>
@@ -120,7 +141,7 @@ page.</p>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.3/">Version 1.3.0</a></strong> [26/Oct/2007]</dt>
<dt><strong>Version 1.3.0</strong> [26/Oct/2007]</dt>
<dd>
<ul>
<li>added function
@@ -129,14 +150,14 @@ page.</p>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2.1</a></strong> [08/May/2007]</dt>
<dt><strong>Version 1.2.1</strong> [08/May/2007]</dt>
<dd>
<ul>
<li>compatible only with Lua 5.1 (Lua 5.0 support was dropped)</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.2/">Version 1.2</a></strong> [15/Mar/2006]</dt>
<dt><strong>Version 1.2</strong> [15/Mar/2006]</dt>
<dd>
<ul>
<li>added optional argument to
@@ -147,14 +168,14 @@ page.</p>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.1/">Version 1.1</a></strong> [30/May/2005]</dt>
<dt><strong>Version 1.1</strong> [30/May/2005]</dt>
<dd>
<ul>
<li>added function <a href="manual.html#touch"><code>lfs.touch</code></a>.</li>
</ul>
</dd>
<dt><strong><a href="http://www.keplerproject.org/luafilesystem/1.0/">Version 1.0</a></strong> [21/Jan/2005]</dt>
<dt><strong>Version 1.0</strong> [21/Jan/2005]</dt>
<dd />
<dt><strong>Version 1.0 Beta</strong> [10/Nov/2004]</dt>

View File

@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<link rel="stylesheet" href="doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
@@ -45,10 +45,10 @@
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<li><a href="https://github.com/keplerproject/luafilesystem">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem/issues/">Bug Tracker</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem">Git</a></li>
</ul>
</li>
<li><strong>License</strong></li>

View File

@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>LuaFileSystem</title>
<link rel="stylesheet" href="http://www.keplerproject.org/doc.css" type="text/css"/>
<link rel="stylesheet" href="doc.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
@@ -43,10 +43,10 @@
</ul>
</li>
<li><a href="examples.html">Examples</a></li>
<li><a href="http://luaforge.net/projects/luafilesystem/">Project</a>
<li><a href="https://github.com/keplerproject/luafilesystem">Project</a>
<ul>
<li><a href="http://luaforge.net/tracker/?group_id=66">Bug Tracker</a></li>
<li><a href="http://luaforge.net/scm/?group_id=66">CVS</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem/issues">Bug Tracker</a></li>
<li><a href="https://github.com/keplerproject/luafilesystem">Git</a></li>
</ul>
</li>
<li><a href="license.html">License</a></li>
@@ -174,7 +174,7 @@ LuaFileSystem offers the following functions:
<dt><a name="chdir"></a><strong><code>lfs.lock_dir(path, [seconds_stale])</code></strong></dt>
<dd>Creates a lockfile (called lockfile.lfs) in <code>path</code> if it does not
exist and returns the lock. If the lock already exists checks it
exist and returns the lock. If the lock already exists checks if
it's stale, using the second parameter (default for the second
parameter is <code>INT_MAX</code>, which in practice means the lock will never
be stale. To free the the lock call <code>lock:free()</code>. <br/>
@@ -206,6 +206,13 @@ LuaFileSystem offers the following functions:
Returns <code>true</code> if the operation was successful; in
case of error, it returns <code>nil</code> plus an error string.
</dd>
<dt><a name="link"></a><strong><code>lfs.link (old, new[, symlink])</code></strong></dt>
<dd>Creates a link. The first argument is the object to link to
and the second is the name of the link. If the optional third
argument is true, the link will by a symbolic link (by default, a
hard link is created).
</dd>
<dt><a name="mkdir"></a><strong><code>lfs.mkdir (dirname)</code></strong></dt>
<dd>Creates a new directory. The argument is the name of the new
@@ -220,16 +227,18 @@ LuaFileSystem offers the following functions:
in case of error, it returns <code>nil</code> plus an error string.</dd>
<dt><a name="setmode"></a><strong><code>lfs.setmode (file, mode)</code></strong></dt>
<dd>Sets the writing mode for a file. The mode string can be either <code>binary</code> or <code>text</code>.
Returns the previous mode string for the file. This function is only available in Windows, so you may want to make sure that
<code>lfs.setmode</code> exists before using it.
<dd>Sets the writing mode for a file. The mode string can be either <code>"binary"</code> or <code>"text"</code>.
Returns <code>true</code> followed the previous mode string for the file, or
<code>nil</code> followed by an error string in case of errors.
On non-Windows platforms, where the two modes are identical,
setting the mode has no effect, and the mode is always returned as <code>binary</code>.
</dd>
<dt><a name="symlinkattributes"></a><strong><code>lfs.symlinkattributes (filepath [, aname])</code></strong></dt>
<dd>Identical to <a href="#attributes">lfs.attributes</a> except that
it obtains information about the link itself (not the file it refers to).
This function is not available in Windows so you may want to make sure that
<code>lfs.symlinkattributes</code> exists before using it.
On Windows this function does not yet support links, and is identical to
<code>lfs.attributes</code>.
</dd>
<dt><a name="touch"></a><strong><code>lfs.touch (filepath [, atime [, mtime]])</code></strong></dt>

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.6.0-1"
source = {
url = "https://github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.6.0.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.6.1-1"
source = {
url = "https://github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.6.1.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

View File

@@ -0,0 +1,27 @@
package = "LuaFileSystem"
version = "1.6.2-1"
source = {
url = "https://github.com/downloads/keplerproject/luafilesystem/luafilesystem-1.6.2.tar.gz",
}
description = {
summary = "File System Library for the Lua Programming Language",
detailed = [[
LuaFileSystem is a Lua library developed to complement the set of
functions related to file systems offered by the standard Lua
distribution. LuaFileSystem offers a portable way to access the
underlying directory structure and file attributes.
]]
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = { lfs = "src/lfs.c" },
copy_directories = { "doc", "tests" }
}

2
src/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.o
*.so

784
src/lfs.c

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
LIBRARY lfs.dll
DESCRIPTION "LuaFileSystem"
VERSION 1.4.2
VERSION 1.5.0
EXPORTS
luaopen_lfs

View File

@@ -1,28 +1,31 @@
#!/usr/local/bin/lua5.1
#!/usr/bin/env lua5.1
local tmp = "/tmp"
local sep = "/"
local sep = string.match (package.config, "[^\n]+")
local upper = ".."
require"lfs"
local lfs = require"lfs"
print (lfs._VERSION)
io.write(".")
io.flush()
function attrdir (path)
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..sep..file
print ("\t=> "..f.." <=")
local attr = lfs.attributes (f)
assert (type(attr) == "table")
if attr.mode == "directory" then
attrdir (f)
else
for name, value in pairs(attr) do
print (name, value)
end
end
end
end
for file in lfs.dir(path) do
if file ~= "." and file ~= ".." then
local f = path..sep..file
print ("\t=> "..f.." <=")
local attr = lfs.attributes (f)
assert (type(attr) == "table")
if attr.mode == "directory" then
attrdir (f)
else
for name, value in pairs(attr) do
print (name, value)
end
end
end
end
end
-- Checking changing directories
@@ -33,6 +36,9 @@ assert (lfs.chdir (reldir), "could not change back to current directory")
assert (lfs.currentdir() == current, "error trying to change directories")
assert (lfs.chdir ("this couldn't be an actual directory") == nil, "could change to a non-existent directory")
io.write(".")
io.flush()
-- Changing creating and removing directories
local tmpdir = current..sep.."lfs_tmp_dir"
local tmpfile = tmpdir..sep.."tmp_file"
@@ -40,19 +46,25 @@ local tmpfile = tmpdir..sep.."tmp_file"
-- that may have resulted from an interrupted test execution and remove it
if lfs.chdir (tmpdir) then
assert (lfs.chdir (upper), "could not change to upper directory")
assert (os.remove (tmpfile), "could not remove file from previous test")
assert (os.remove (tmpfile), "could not remove file from previous test")
assert (lfs.rmdir (tmpdir), "could not remove directory from previous test")
end
io.write(".")
io.flush()
-- tries to create a directory
assert (lfs.mkdir (tmpdir), "could not make a new directory")
local attrib, errmsg = lfs.attributes (tmpdir)
if not attrib then
error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg)
error ("could not get attributes of file `"..tmpdir.."':\n"..errmsg)
end
local f = io.open(tmpfile, "w")
f:close()
io.write(".")
io.flush()
-- Change access time
local testdate = os.time({ year = 2007, day = 10, month = 2, hour=0})
assert (lfs.touch (tmpfile, testdate))
@@ -60,6 +72,9 @@ local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate, "could not set access time")
assert (new_att.modification == testdate, "could not set modification time")
io.write(".")
io.flush()
-- Change access and modification time
local testdate1 = os.time({ year = 2007, day = 10, month = 2, hour=0})
local testdate2 = os.time({ year = 2007, day = 11, month = 2, hour=0})
@@ -69,48 +84,68 @@ local new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == testdate2, "could not set access time")
assert (new_att.modification == testdate1, "could not set modification time")
local res, err = lfs.symlinkattributes(tmpfile)
if err ~= "symlinkattributes not supported on this platform" then
-- Checking symbolic link information (does not work in Windows)
assert (os.execute ("ln -s "..tmpfile.." _a_link_for_test_"))
assert (lfs.attributes"_a_link_for_test_".mode == "file")
assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link")
assert (os.remove"_a_link_for_test_")
io.write(".")
io.flush()
-- Checking link (does not work on Windows)
if lfs.link (tmpfile, "_a_link_for_test_", true) then
assert (lfs.attributes"_a_link_for_test_".mode == "file")
assert (lfs.symlinkattributes"_a_link_for_test_".mode == "link")
assert (lfs.link (tmpfile, "_a_hard_link_for_test_"))
assert (lfs.attributes (tmpfile, "nlink") == 2)
assert (os.remove"_a_link_for_test_")
assert (os.remove"_a_hard_link_for_test_")
end
if lfs.setmode then
-- Checking text/binary modes (works only in Windows)
local f = io.open(tmpfile, "w")
local result, mode = lfs.setmode(f, "binary")
assert((result and mode == "text") or (not result and mode == "setmode not supported on this platform"))
result, mode = lfs.setmode(f, "text")
assert((result and mode == "binary") or (not result and mode == "setmode not supported on this platform"))
f:close()
end
io.write(".")
io.flush()
-- Checking text/binary modes (only has an effect in Windows)
local f = io.open(tmpfile, "w")
local result, mode = lfs.setmode(f, "binary")
assert(result) -- on non-Windows platforms, mode is always returned as "binary"
result, mode = lfs.setmode(f, "text")
assert(result and mode == "binary")
f:close()
io.write(".")
io.flush()
-- Restore access time to current value
assert (lfs.touch (tmpfile, attrib.access, attrib.modification))
new_att = assert (lfs.attributes (tmpfile))
assert (new_att.access == attrib.access)
assert (new_att.modification == attrib.modification)
io.write(".")
io.flush()
-- Remove new file and directory
assert (os.remove (tmpfile), "could not remove new file")
assert (lfs.rmdir (tmpdir), "could not remove new directory")
assert (lfs.mkdir (tmpdir..sep.."lfs_tmp_dir") == nil, "could create a directory inside a non-existent one")
io.write(".")
io.flush()
-- Trying to get attributes of a non-existent file
assert (lfs.attributes ("this couldn't be an actual file") == nil, "could get attributes of a non-existent file")
assert (type(lfs.attributes (upper)) == "table", "couldn't get attributes of upper directory")
io.write(".")
io.flush()
-- Stressing directory iterator
count = 0
for i = 1, 4000 do
for file in lfs.dir (tmp) do
count = count + 1
end
for file in lfs.dir (tmp) do
count = count + 1
end
end
io.write(".")
io.flush()
-- Stressing directory iterator, explicit version
count = 0
for i = 1, 4000 do
@@ -123,6 +158,9 @@ for i = 1, 4000 do
assert(not pcall(dir.next, dir))
end
io.write(".")
io.flush()
-- directory explicit close
local iter, dir = lfs.dir(tmp)
dir:close()