Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keplerproject/luafilesystem.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/lfs.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2014-08-09 21:54:41 +0400
committerHisham Muhammad <hisham@gobolinux.org>2014-08-09 21:54:41 +0400
commit601b4e54981d685d0a3c6049622453e897e55c01 (patch)
treef8db6b102a3ac4226fbfbb52310e1896dbae2ad2 /src/lfs.c
parent95573506c5b92d2fdc32b162a3ad86d2da8d4f15 (diff)
parent4437e194558279b31878965d1c4b2188b1a8cf39 (diff)
Merge pull request #44 from stefan991/fix-attribute-lookup
Fix attributes `blksize` and `blocks`
Diffstat (limited to 'src/lfs.c')
-rw-r--r--src/lfs.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/src/lfs.c b/src/lfs.c
index ccbba5e..b2322c9 100644
--- a/src/lfs.c
+++ b/src/lfs.c
@@ -716,12 +716,6 @@ static void push_st_blksize (lua_State *L, STAT_STRUCT *info) {
lua_pushnumber (L, (lua_Number)info->st_blksize);
}
#endif
-static void push_invalid (lua_State *L, STAT_STRUCT *info) {
- luaL_error(L, "invalid attribute name");
-#ifndef _WIN32
- info->st_blksize = 0; /* never reached */
-#endif
-}
/*
** Convert the inode protection mode to a permission list.
@@ -787,14 +781,13 @@ struct _stat_members members[] = {
{ "blocks", push_st_blocks },
{ "blksize", push_st_blksize },
#endif
- { NULL, push_invalid }
+ { NULL, NULL }
};
/*
** Get file or symbolic link information
*/
static int _file_info_ (lua_State *L, int (*st)(const char*, STAT_STRUCT*)) {
- int i;
STAT_STRUCT info;
const char *file = luaL_checkstring (L, 1);
@@ -804,25 +797,23 @@ static int _file_info_ (lua_State *L, int (*st)(const char*, STAT_STRUCT*)) {
return 2;
}
if (lua_isstring (L, 2)) {
- int v;
const char *member = lua_tostring (L, 2);
- if (strcmp (member, "mode") == 0) v = 0;
-#ifndef _WIN32
- else if (strcmp (member, "blocks") == 0) v = 11;
- else if (strcmp (member, "blksize") == 0) v = 12;
-#endif
- else /* look for member */
- for (v = 1; members[v].name; v++)
- if (*members[v].name == *member)
- break;
- /* push member value and return */
- members[v].push (L, &info);
- return 1;
- } else if (!lua_istable (L, 2))
- /* creates a table if none is given */
+ for (int i = 0; members[i].name; i++) {
+ if (strcmp(members[i].name, member) == 0) {
+ /* push member value and return */
+ members[i].push (L, &info);
+ return 1;
+ }
+ }
+ /* member not found */
+ return luaL_error(L, "invalid attribute name");
+ }
+ /* creates a table if none is given */
+ if (!lua_istable (L, 2)) {
lua_newtable (L);
+ }
/* stores all members in table on top of the stack */
- for (i = 0; members[i].name; i++) {
+ for (int i = 0; members[i].name; i++) {
lua_pushstring (L, members[i].name);
members[i].push (L, &info);
lua_rawset (L, -3);