aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/microtar/src/microtar.c5
-rw-r--r--src/lpm.c11
-rw-r--r--src/lpm.lua4
3 files changed, 12 insertions, 8 deletions
diff --git a/lib/microtar/src/microtar.c b/lib/microtar/src/microtar.c
index 1cd9920..20c509d 100644
--- a/lib/microtar/src/microtar.c
+++ b/lib/microtar/src/microtar.c
@@ -337,8 +337,9 @@ int mtar_clear_header(mtar_header_t *h){
h->size = 0;
h->mtime = 0;
h->type = 0;
- bzero(h->name, strlen(h->name));
- bzero(h->linkname, strlen(h->linkname));
+
+ bzero(h->name, sizeof(h->name));
+ bzero(h->linkname, sizeof(h->linkname));
return MTAR_ESUCCESS;
}
diff --git a/src/lpm.c b/src/lpm.c
index 11084ed..75868dc 100644
--- a/src/lpm.c
+++ b/src/lpm.c
@@ -820,6 +820,9 @@ static int lpm_extract(lua_State* L) {
int has_ext_before = 0;
int has_ext_allways = 0;
+ mtar_clear_header(&before_h);
+ mtar_clear_header(&allways_h);
+
while ((mtar_read_header(&tar, &h)) != MTAR_ENULLRECORD ) {
if (h.type == MTAR_TREG) {
@@ -839,7 +842,6 @@ static int lpm_extract(lua_State* L) {
return luaL_error(L, "can't extract tar archive file %s, can't create directory %s: %s", src, target, strerror(errno));
}
- char buffer[8192];
FILE* file = fopen(target, "wb");
if (!file) {
mtar_close(&tar);
@@ -848,7 +850,8 @@ static int lpm_extract(lua_State* L) {
if (chmod(target, h.mode))
return luaL_error(L, "can't extract tar archive file %s, can't chmod file %s: %s", src, target, strerror(errno));
-
+
+ char buffer[8192];
int remaining = h.size;
while (remaining > 0) {
int read_size = remaining < sizeof(buffer) ? remaining : sizeof(buffer);
@@ -926,7 +929,7 @@ static int lpm_extract(lua_State* L) {
if (mtar_read_data(&tar, before_h.name, read_size) != MTAR_ESUCCESS) {
mtar_close(&tar);
return luaL_error(L, "Error while reading GNU extended: %s", strerror(errno));
- }
+ }
}
else if (h.type == MTAR_TGLP) {
@@ -936,7 +939,7 @@ static int lpm_extract(lua_State* L) {
if (mtar_read_data(&tar, before_h.linkname, read_size) != MTAR_ESUCCESS) {
mtar_close(&tar);
return luaL_error(L, "Error while reading GNU extended: %s", strerror(errno));
- }
+ }
}
mtar_next(&tar);
diff --git a/src/lpm.lua b/src/lpm.lua
index 8ebe33f..8638efe 100644
--- a/src/lpm.lua
+++ b/src/lpm.lua
@@ -1379,7 +1379,7 @@ function Bottle:construct()
end
-- atomically move things
common.rmrf(local_path)
- common.mkdirp(local_path)
+ common.mkdirp(common.dirname(local_path))
common.rename(self.local_path, local_path)
self.local_path = local_path
end
@@ -1393,7 +1393,7 @@ end
function Bottle:run(args)
args = args or {}
if self.is_system then error("system bottle cannot be run") end
- local path = self.local_path .. PATHSEP .. "lite-xl"
+ local path = self.local_path .. PATHSEP .. "lite-xl" .. EXECUTABLE_EXTENSION
if not system.stat(path) then error("cannot find bottle executable " .. path) end
os.execute(path .. (#args > 0 and " " or "") .. table.concat(args, " "))
end