diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/util/util.c | 32 | ||||
-rw-r--r-- | lib/util/util.h | 5 |
2 files changed, 37 insertions, 0 deletions
diff --git a/lib/util/util.c b/lib/util/util.c index 7f30d436e8..4dd79266af 100644 --- a/lib/util/util.c +++ b/lib/util/util.c @@ -6,6 +6,7 @@ Copyright (C) Simo Sorce 2001 Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003. Copyright (C) James J Myers 2003 + Copyright (C) Volker Lendecke 2010 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -61,6 +62,37 @@ _PUBLIC_ const char *tmpdir(void) /** + Create a tmp file, open it and immediately unlink it. + Returns the file descriptor or -1 on error. +**/ +int create_unlink_tmp(const char *dir) +{ + char *fname; + int fd; + + fname = talloc_asprintf(talloc_tos(), "%s/listenerlock_XXXXXX", dir); + if (fname == NULL) { + errno = ENOMEM; + return -1; + } + fd = mkstemp(fname); + if (fd == -1) { + TALLOC_FREE(fname); + return -1; + } + if (unlink(fname) == -1) { + int sys_errno = errno; + close(fd); + TALLOC_FREE(fname); + errno = sys_errno; + return -1; + } + TALLOC_FREE(fname); + return fd; +} + + +/** Check if a file exists - call vfs_file_exist for samba files. **/ _PUBLIC_ bool file_exist(const char *fname) diff --git a/lib/util/util.h b/lib/util/util.h index b9734b07c8..7f0de26781 100644 --- a/lib/util/util.h +++ b/lib/util/util.h @@ -623,6 +623,11 @@ bool file_compare(const char *path1, const char *path2); _PUBLIC_ const char *tmpdir(void); /** + * Creates and immediately unlinks a file. Returns open file descriptor. + **/ +_PUBLIC_ int create_unlink_tmp(const char *dir); + +/** Check if a file exists - call vfs_file_exist for samba files. **/ _PUBLIC_ bool file_exist(const char *fname); |