summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/driver/mdso_driver_ctx.c3
-rw-r--r--src/driver/mdso_unit_ctx.c7
-rw-r--r--src/internal/mdso_driver_impl.h1
3 files changed, 9 insertions, 2 deletions
diff --git a/src/driver/mdso_driver_ctx.c b/src/driver/mdso_driver_ctx.c
index e7e4a0f..46525f2 100644
--- a/src/driver/mdso_driver_ctx.c
+++ b/src/driver/mdso_driver_ctx.c
@@ -378,6 +378,9 @@ static void mdso_free_driver_ctx_impl(struct mdso_driver_ctx_alloc * ictx)
close(ictx->ctx.fddst);
if (ictx->ctx.fdtmpin >= 0)
+ unlink(ictx->ctx.tmpname);
+
+ if (ictx->ctx.fdtmpin >= 0)
close(ictx->ctx.fdtmpin);
if (ictx->ctx.asmbase)
diff --git a/src/driver/mdso_unit_ctx.c b/src/driver/mdso_unit_ctx.c
index d14beed..1c6212c 100644
--- a/src/driver/mdso_unit_ctx.c
+++ b/src/driver/mdso_unit_ctx.c
@@ -42,7 +42,7 @@ static int mdso_stdin_to_tmp(const struct mdso_driver_ctx * dctx)
ssize_t cnt;
char * ch;
char buf[4096];
- char template[] = "/tmp/mdso_stdin_to_tmp_XXXXXX";
+ char tmpname[] = "/tmp/mdso_stdin_to_tmp_XXXXXX";
addr = (uintptr_t)dctx - offsetof(struct mdso_driver_ctx_impl,ctx);
ictx = (struct mdso_driver_ctx_impl *)addr;
@@ -50,14 +50,17 @@ static int mdso_stdin_to_tmp(const struct mdso_driver_ctx * dctx)
if (ictx->fdtmpin >= 0)
return dup(ictx->fdtmpin);
- if ((fdtmp = mkstemp(template)) < 0)
+ if ((fdtmp = mkstemp(tmpname)) < 0)
return -1;
if ((ictx->fdtmpin = dup(fdtmp)) < 0) {
close(fdtmp);
+ unlink(tmpname);
return -1;
}
+ strcpy(ictx->tmpname,tmpname);
+
for (;;) {
ret = read(0,buf,sizeof(buf)-1);
diff --git a/src/internal/mdso_driver_impl.h b/src/internal/mdso_driver_impl.h
index dc37a66..02234f7 100644
--- a/src/internal/mdso_driver_impl.h
+++ b/src/internal/mdso_driver_impl.h
@@ -59,6 +59,7 @@ struct mdso_driver_ctx_impl {
struct mdso_error_info** erricap;
struct mdso_error_info * erriptr[64];
struct mdso_error_info erribuf[64];
+ char tmpname[32];
};
struct mdso_unit_ctx_impl {