From 1a17b22bb3cd80312dfee2e6421fd934b70dd24c Mon Sep 17 00:00:00 2001
From: Richard Nyberg <rnyberg@murmeldjur.se>
Date: Sun, 15 Oct 2006 15:31:17 +0000
Subject: [PATCH] Don't call mkdirs unnecessarily. Note that this code is only
 needed because the content code shuts down btpd on errors. When that is fixed
 this code can be removed.

---
 btpd/torrent.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/btpd/torrent.c b/btpd/torrent.c
index c7bd33f..9a2be5c 100644
--- a/btpd/torrent.c
+++ b/btpd/torrent.c
@@ -95,16 +95,24 @@ torrent_start(struct tlib *tl)
     if (tl->dir == NULL)
         return IPC_EBADTENT;
 
-    if (mkdirs(tl->dir, 0777) != 0 && errno != EEXIST) {
-        btpd_log(BTPD_L_ERROR, "torrent '%s': "
-            "failed to create content dir '%s' (%s).\n",
-            tl->name, tl->dir, strerror(errno));
-        return IPC_ECREATECDIR;
-    } else if (stat(tl->dir, &sb) == -1 ||
-            ((sb.st_mode & S_IFMT) != S_IFDIR)) {
+    if (stat(tl->dir, &sb) == 0) {
+        if ((sb.st_mode & S_IFMT) != S_IFDIR) {
+            btpd_log(BTPD_L_ERROR,
+                "torrent '%s': content dir '%s' is not a directory\n",
+                tl->name, tl->dir);
+            return IPC_EBADCDIR;
+        }
+    } else if (errno == ENOENT) {
+        if (mkdirs(tl->dir, 0777) != 0 && errno != EEXIST) {
+            btpd_log(BTPD_L_ERROR, "torrent '%s': "
+                "failed to create content dir '%s' (%s).\n",
+                tl->name, tl->dir, strerror(errno));
+            return IPC_ECREATECDIR;
+        }
+    } else {
         btpd_log(BTPD_L_ERROR,
-            "torrent '%s': content dir '%s' is either not a directory or"
-            " cannot be accessed.\n", tl->name, tl->dir);
+            "torrent '%s': couldn't stat content dir '%s' (%s)\n",
+            tl->name, tl->dir, strerror(errno));
         return IPC_EBADCDIR;
     }