{
int ret;
struct stat st;
+ mode_t old_umask;
ret = lstat(dname, &st);
- if (ret == -1) {
- mode_t old_umask;
+ if (ret == 0) {
+ return true;
+ }
- if (errno != ENOENT) {
- DEBUG(0, ("lstat failed on directory %s: %s\n",
- dname, strerror(errno)));
- return false;
- }
+ if (errno != ENOENT) {
+ DEBUG(0, ("lstat failed on directory %s: %s\n",
+ dname, strerror(errno)));
+ return false;
+ }
- /* Create directory */
- old_umask = umask(0);
- ret = mkdir(dname, dir_perms);
- if (ret == -1 && errno != EEXIST) {
- DEBUG(0, ("mkdir failed on directory "
- "%s: %s\n", dname,
- strerror(errno)));
- umask(old_umask);
- return false;
- }
+ /* Create directory */
+ old_umask = umask(0);
+ ret = mkdir(dname, dir_perms);
+ if (ret == -1 && errno != EEXIST) {
+ DEBUG(0, ("mkdir failed on directory "
+ "%s: %s\n", dname,
+ strerror(errno)));
umask(old_umask);
+ return false;
+ }
+ umask(old_umask);
- ret = lstat(dname, &st);
- if (ret == -1) {
- DEBUG(0, ("lstat failed on created directory %s: %s\n",
- dname, strerror(errno)));
- return false;
- }
+ ret = lstat(dname, &st);
+ if (ret == -1) {
+ DEBUG(0, ("lstat failed on created directory %s: %s\n",
+ dname, strerror(errno)));
+ return false;
}
return true;