git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 08/17] cmd_init_db(): when creating directories, handle errors conservatively

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jan 18, 2014, 22:48 UTC
Message-ID
<1390085341-2553-9-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1390085341-2553-1-git-send-email-mhagger@alum.mit.edu>

safe_create_leading_directories_const() returns a non-zero value on error. The old code at this calling site recognized a couple of particular error values, and treated all other return values as success. Instead, be more conservative: recognize the errors we are interested in, but treat any other nonzero values as failures. This is more robust in case somebody adds another possible return value without telling us.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 builtin/init-db.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/builtin/init-db.c b/builtin/init-db.c
index 6f69593..c7c76bb 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -515,13 +515,14 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
 				saved = shared_repository;
 				shared_repository = 0;
 				switch (safe_create_leading_directories_const(argv[0])) {
+				case SCLD_OK:
+				case SCLD_PERMS:
+					break;
 				case SCLD_EXISTS:
 					errno = EEXIST;
 					/* fallthru */
-				case SCLD_FAILED:
-					die_errno(_("cannot mkdir %s"), argv[0]);
-					break;
 				default:
+					die_errno(_("cannot mkdir %s"), argv[0]);
 					break;
 				}
 				shared_repository = saved;
-- 
1.8.5.2
Previous: Michael HaggertyNext: Michael Haggerty
Message 9 of 18 in “Fix some mkdir/rmdir races”
  1. 00/17 Fix some mkdir/rmdir racesMichael Haggerty, Jan 18, 2014
  2. 01/17 safe_create_leading_directories(): fix format of "if" chainingMichael Haggerty, Jan 18, 2014
  3. 02/17 safe_create_leading_directories(): reduce scope of local variableMichael Haggerty, Jan 18, 2014
  4. 03/17 safe_create_leading_directories(): add explicit "slash" pointerMichael Haggerty, Jan 18, 2014
  5. 04/17 safe_create_leading_directories(): rename local variableMichael Haggerty, Jan 18, 2014
  6. 05/17 safe_create_leading_directories(): split on first of multiple slashesMichael Haggerty, Jan 18, 2014
  7. 06/17 safe_create_leading_directories(): always restore slash at end of loopMichael Haggerty, Jan 18, 2014
  8. 07/17 safe_create_leading_directories(): introduce enum for return valuesMichael Haggerty, Jan 18, 2014
  9. 08/17 cmd_init_db(): when creating directories, handle errors conservativelyMichael Haggerty, Jan 18, 2014
  10. 09/17 safe_create_leading_directories(): add new error value SCLD_VANISHEDMichael Haggerty, Jan 18, 2014
  11. 10/17 lock_ref_sha1_basic(): on SCLD_VANISHED, retryMichael Haggerty, Jan 18, 2014
  12. 11/17 lock_ref_sha1_basic(): if locking fails with ENOENT, retryMichael Haggerty, Jan 18, 2014
  13. 12/17 remove_dir_recurse(): tighten condition for removing unreadable dirMichael Haggerty, Jan 18, 2014
  14. 13/17 remove_dir_recurse(): handle disappearing files and directoriesMichael Haggerty, Jan 18, 2014
  15. 14/17 rename_ref(): extract function rename_tmp_log()Michael Haggerty, Jan 18, 2014
  16. 15/17 rename_tmp_log(): handle a possible mkdir/rmdir raceMichael Haggerty, Jan 18, 2014
  17. 16/17 rename_tmp_log(): limit the number of remote_empty_directories() attemptsMichael Haggerty, Jan 18, 2014
  18. 17/17 rename_tmp_log(): on SCLD_VANISHED, retryMichael Haggerty, Jan 18, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.