On Wed, Nov 02, 2011 at 03:39:54PM -0600, Eric Blake wrote:
> On 11/02/2011 03:31 PM, Guido Günther wrote:
> >to avoid exceeding UNIX_PATH_MAX
> >---
> > tests/virnetsockettest.c | 60
> > ++++++++++++++++++++++++++++++---------------
> > 1 files changed, 40 insertions(+), 20 deletions(-)
>
> I like this better than Stefan's proposal (a temporary directory is
> better than unlink() on an open fd).
>
> ACK with one nit:
>
> >+ char *template;
> >+ char *tmpdir = NULL;
> >+
> >+ template = strdup("/tmp/libvirt_XXXXXX");
>
> No need to malloc() the template. Just do:
>
> char template[] = "/tmp/libvirt_XXXXXX";
This was actually the first version I had but it didn't seem to match
libvirt's style (in the non-const form and I didn't find it in HACKING)
so I went for the explicit strdup. New version attached.
Cheers,
-- Guido
>From 6ddd359787b7bb1ce6c2d8fe08ebd825896dcf52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <[email protected]>
Date: Wed, 2 Nov 2011 22:06:44 +0100
Subject: [PATCH] virnetsockettest: Use a temporary directory in /tmp
to avoid exceeding UNIX_PATH_MAX
---
tests/virnetsockettest.c | 48 ++++++++++++++++++++++++++-------------------
1 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c
index 6320ce0..a76e5cc 100644
--- a/tests/virnetsockettest.c
+++ b/tests/virnetsockettest.c
@@ -202,16 +202,18 @@ static int testSocketUNIXAccept(const void *data ATTRIBUTE_UNUSED)
int ret = -1;
char *path;
- if (progname[0] == '/') {
- if (virAsprintf(&path, "%s-test.sock", progname) < 0) {
- virReportOOMError();
- goto cleanup;
- }
- } else {
- if (virAsprintf(&path, "%s/%s-test.sock", abs_builddir, progname) < 0) {
- virReportOOMError();
- goto cleanup;
- }
+ char *tmpdir;
+ char template[] = "/tmp/libvirt_XXXXXX";
+
+ tmpdir = mkdtemp(template);
+ if (tmpdir == NULL) {
+ virReportSystemError(errno, "%s",
+ _("Failed to create temporary directory"));
+ goto cleanup;
+ }
+ if (virAsprintf(&path, "%s/test.sock", tmpdir) < 0) {
+ virReportOOMError();
+ goto cleanup;
}
if (virNetSocketNewListenUNIX(path, 0700, -1, getgid(), &lsock) < 0)
@@ -239,6 +241,8 @@ cleanup:
VIR_FREE(path);
virNetSocketFree(lsock);
virNetSocketFree(ssock);
+ if (tmpdir)
+ rmdir(tmpdir);
return ret;
}
@@ -251,16 +255,18 @@ static int testSocketUNIXAddrs(const void *data ATTRIBUTE_UNUSED)
int ret = -1;
char *path;
- if (progname[0] == '/') {
- if (virAsprintf(&path, "%s-test.sock", progname) < 0) {
- virReportOOMError();
- goto cleanup;
- }
- } else {
- if (virAsprintf(&path, "%s/%s-test.sock", abs_builddir, progname) < 0) {
- virReportOOMError();
- goto cleanup;
- }
+ char *tmpdir;
+ char template[] = "/tmp/libvirt_XXXXXX";
+
+ tmpdir = mkdtemp(template);
+ if (tmpdir == NULL) {
+ virReportSystemError(errno, "%s",
+ _("Failed to create temporary directory"));
+ goto cleanup;
+ }
+ if (virAsprintf(&path, "%s/test.sock", tmpdir) < 0) {
+ virReportOOMError();
+ goto cleanup;
}
if (virNetSocketNewListenUNIX(path, 0700, -1, getgid(), &lsock) < 0)
@@ -317,6 +323,8 @@ cleanup:
virNetSocketFree(lsock);
virNetSocketFree(ssock);
virNetSocketFree(csock);
+ if (tmpdir)
+ rmdir(tmpdir);
return ret;
}
--
1.7.7
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list