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

Re: [PATCH] Do _not_ call unlink on a directory

From
JGJan-Benedict Glaw <jbglaw@lug-owl.de>
Date
Jul 16, 2007, 17:41 UTC
Message-ID
<20070716174138.GC22998@lug-owl.de>
In-Reply-To
<11846075213759-git-send-email-sithglan@stud.uni-erlangen.de>
On Mon, 2007-07-16 19:38:41 +0200, Thomas Glanzmann <sithglan@stud.uni-erlangen.de> wrote:
Show 17 quoted lines
> Calling unlink on a directory on a Solaris UFS filesystem as root makes it
> inconsistent. Thanks to Johannes Sixt for the obvious fix.
> 
> Signed-off-by: Thomas Glanzmann <sithglan@stud.uni-erlangen.de>
> ---
>  entry.c |    6 +++---
>  1 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/entry.c b/entry.c
> index 82bf725..907293f 100644
> --- a/entry.c
> +++ b/entry.c
> @@ -6,18 +6,18 @@ static void create_directories(const char *path, const struct checkout *state)
>  	int len = strlen(path);
>  	char *buf = xmalloc(len + 1);
>  	const char *slash = path;
> +        struct stat st;
Whitespace damage.
Show 6 quoted lines
>  	while ((slash = strchr(slash+1, '/')) != NULL) {
>  		len = slash - path;
>  		memcpy(buf, path, len);
>  		buf[len] = 0;
> +                if (!stat(buf, &st) && S_ISDIR(st.st_mode))
> +                        continue; /* ok */
Dito.
Show 10 quoted lines
>  		if (mkdir(buf, 0777)) {
>  			if (errno == EEXIST) {
> -				struct stat st;
>  				if (len > state->base_dir_len && state->force && !unlink(buf) && !mkdir(buf, 0777))
>  					continue;
> -				if (!stat(buf, &st) && S_ISDIR(st.st_mode))
> -					continue; /* ok */
>  			}
>  			die("cannot create directory at %s", buf);
>  		}
MfG, JBG
-- 
      Jan-Benedict Glaw      jbglaw@lug-owl.de              +49-172-7608481
Signature of:         "really soon now":      an unspecified period of time, likly to
the second  :                                 be greater than any reasonable definition
                                              of "soon".
Previous: Thomas GlanzmannNext: Brian Downing
Message 16 of 30 in “Do _not_ call unlink on a directory”
  1. Do _not_ call unlink on a directoryThomas Glanzmann, Jul 16, 2007
  2. Matthieu MoyJul 16, 2007
  3. Scott LambJul 16, 2007
  4. Thomas GlanzmannJul 16, 2007
  5. Thomas GlanzmannJul 16, 2007
  6. Linus TorvaldsJul 16, 2007
  7. Thomas GlanzmannJul 16, 2007
  8. Linus TorvaldsJul 16, 2007
  9. Thomas GlanzmannJul 16, 2007
  10. Scott LambJul 16, 2007
  11. Linus TorvaldsJul 16, 2007
  12. Scott LambJul 16, 2007
  13. Linus TorvaldsJul 16, 2007
  14. Linus TorvaldsJul 16, 2007
  15. Do _not_ call unlink on a directoryThomas Glanzmann, Jul 16, 2007
  16. Jan-Benedict GlawJul 16, 2007
  17. Brian DowningJul 16, 2007
  18. Thomas GlanzmannJul 16, 2007
  19. Linus TorvaldsJul 16, 2007
  20. Brian DowningJul 16, 2007
  21. Linus TorvaldsJul 16, 2007
  22. David KastrupJul 17, 2007
  23. Junio C HamanoJul 17, 2007
  24. Junio C HamanoJul 17, 2007
  25. Thomas GlanzmannJul 17, 2007
  26. Junio C HamanoJul 17, 2007
  27. Thomas GlanzmannJul 17, 2007
  28. Johannes SixtJul 18, 2007
  29. Thomas GlanzmannJul 18, 2007
  30. Linus TorvaldsJul 17, 2007

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.