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

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

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jan 6, 2014, 13:45 UTC
Message-ID
<1389015935-21936-9-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1389015935-21936-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 13 of 29 in “Fix some mkdir/rmdir races”
  1. 00/17 Fix some mkdir/rmdir racesMichael Haggerty, Jan 6, 2014
  2. 01/17 safe_create_leading_directories(): fix format of "if" chainingMichael Haggerty, Jan 6, 2014
  3. 02/17 safe_create_leading_directories(): reduce scope of local variableMichael Haggerty, Jan 6, 2014
  4. 03/17 safe_create_leading_directories(): add explicit "slash" pointerMichael Haggerty, Jan 6, 2014
  5. Junio C HamanoJan 6, 2014
  6. Michael HaggertyJan 7, 2014
  7. Junio C HamanoJan 7, 2014
  8. Sebastian SchuberthJan 19, 2014
  9. 04/17 safe_create_leading_directories(): rename local variableMichael Haggerty, Jan 6, 2014
  10. 05/17 safe_create_leading_directories(): split on first of multiple slashesMichael Haggerty, Jan 6, 2014
  11. 06/17 safe_create_leading_directories(): always restore slash at end of loopMichael Haggerty, Jan 6, 2014
  12. 07/17 safe_create_leading_directories(): introduce enum for return valuesMichael Haggerty, Jan 6, 2014
  13. 08/17 cmd_init_db(): when creating directories, handle errors conservativelyMichael Haggerty, Jan 6, 2014
  14. 09/17 safe_create_leading_directories(): add new error value SCLD_VANISHEDMichael Haggerty, Jan 6, 2014
  15. 10/17 lock_ref_sha1_basic(): on SCLD_VANISHED, retryMichael Haggerty, Jan 6, 2014
  16. Junio C HamanoJan 6, 2014
  17. Michael HaggertyJan 7, 2014
  18. 11/17 lock_ref_sha1_basic(): if locking fails with ENOENT, retryMichael Haggerty, Jan 6, 2014
  19. 12/17 remove_dir_recurse(): tighten condition for removing unreadable dirMichael Haggerty, Jan 6, 2014
  20. 13/17 remove_dir_recurse(): handle disappearing files and directoriesMichael Haggerty, Jan 6, 2014
  21. Junio C HamanoJan 6, 2014
  22. Michael HaggertyJan 7, 2014
  23. Junio C HamanoJan 7, 2014
  24. 14/17 rename_ref(): extract function rename_tmp_log()Michael Haggerty, Jan 6, 2014
  25. 15/17 rename_tmp_log(): handle a possible mkdir/rmdir raceMichael Haggerty, Jan 6, 2014
  26. 16/17 rename_tmp_log(): limit the number of remote_empty_directories() attemptsMichael Haggerty, Jan 6, 2014
  27. 17/17 rename_tmp_log(): on SCLD_VANISHED, retryMichael Haggerty, Jan 6, 2014
  28. Junio C HamanoJan 6, 2014
  29. Michael HaggertyJan 7, 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.