about summary refs log tree commit diff
path: root/time/zic.c
diff options
context:
space:
mode:
Diffstat (limited to 'time/zic.c')
-rw-r--r--time/zic.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/time/zic.c b/time/zic.c
index 9ab3967e98..2e07d79196 100644
--- a/time/zic.c
+++ b/time/zic.c
@@ -2126,15 +2126,20 @@ char * const	argname;
 		if (!itsdir(name)) {
 			/*
 			** It doesn't seem to exist, so we try to create it.
+			** Double check the return. Someone may be one
+			** step ahead of us.
 			*/
 			if (mkdir(name, 0755) != 0) {
-				const char *e = strerror(errno);
+			  	int save_error = errno;
+				if (errno == EEXIST && !itsdir(name)) {
+					const char *e = strerror(save_error);
 
-				(void) fprintf(stderr,
-				    _("%s: Can't create directory %s: %s\n"),
-				    progname, name, e);
-				ifree(name);
-				return -1;
+					(void) fprintf(stderr,
+				      _("%s: Can't create directory %s: %s\n"),
+						       progname, name, e);
+					ifree(name);
+					return -1;
+				}
 			}
 		}
 		*cp = '/';