[lxc-devel] [PATCH] lua: implement dirname in C rather than depen on external executable

Dwight Engen dwight.engen at oracle.com
Thu Sep 5 13:57:39 UTC 2013


On Thu,  5 Sep 2013 15:29:20 +0200
Natanael Copa <ncopa at alpinelinux.org> wrote:

> Instead of popen and run external executable dirname we implement a
> dirname in C in the core module.
> 
> We also remove the unused basename function.
> 
> Signed-off-by: Natanael Copa <ncopa at alpinelinux.org>

Acked-by: Dwight Engen <dwight.engen at oracle.com>

This is also on top of Natanael's 5.1 -> 5.2 patch, can be applied once
we sort that out.

> ---
>  src/lua-lxc/core.c  |  8 ++++++++
>  src/lua-lxc/lxc.lua | 18 +-----------------
>  2 files changed, 9 insertions(+), 17 deletions(-)
> 
> diff --git a/src/lua-lxc/core.c b/src/lua-lxc/core.c
> index 504e147..002e8bf 100644
> --- a/src/lua-lxc/core.c
> +++ b/src/lua-lxc/core.c
> @@ -28,6 +28,7 @@
>  #include <assert.h>
>  #include <string.h>
>  #include <unistd.h>
> +#include <libgen.h>
>  #include <lxc/lxccontainer.h>
>  
>  #if LUA_VERSION_NUM < 502
> @@ -387,11 +388,18 @@ static int lxc_util_usleep(lua_State *L) {
>      return 0;
>  }
>  
> +static int lxc_util_dirname(lua_State *L) {
> +    char *path = strdupa(luaL_checkstring(L, 1));
> +    lua_pushstring(L, dirname(path));
> +    return 1;
> +}
> +
>  static luaL_Reg lxc_lib_methods[] = {
>      {"version_get",		lxc_version_get},
>      {"default_config_path_get",	lxc_default_config_path_get},
>      {"container_new",		container_new},
>      {"usleep",			lxc_util_usleep},
> +    {"dirname",			lxc_util_dirname},
>      {NULL, NULL}
>  };
>  
> diff --git a/src/lua-lxc/lxc.lua b/src/lua-lxc/lxc.lua
> index 4ef1ff9..2f1204c 100755
> --- a/src/lua-lxc/lxc.lua
> +++ b/src/lua-lxc/lxc.lua
> @@ -70,22 +70,6 @@ function string:split(delim, max_cols)
>      return cols
>  end
>  
> -function dirname(path)
> -    local f,output
> -    f = io.popen("dirname " .. path)
> -    output = f:read('*all')
> -    f:close()
> -    return output:sub(1,-2)
> -end
> -
> -function basename(path, suffix)
> -    local f,output
> -    f = io.popen("basename " .. path .. " " .. (suffix or ""))
> -    output = f:read('*all')
> -    f:close()
> -    return output:sub(1,-2)
> -end
> -
>  function cgroup_path_get()
>      local f,line,cgroup_path
>  
> @@ -99,7 +83,7 @@ function cgroup_path_get()
>  	    end
>  	    c = line:split(" ", 6)
>  	    if (c[1] == "cgroup") then
> -		cgroup_path = dirname(c[2])
> +		cgroup_path = core.dirname(c[2])
>  		break
>  	    end
>  	end





More information about the lxc-devel mailing list