+
+ if (mkdir(path, 0777) < 0) {
+ /* If we failed for any other reason than the directory
+ * already exists, output a diagnostic and return -1 */
+ if (errno != EEXIST
+ || !(flags & FILEUTILS_RECUR)
+ || ((stat(path, &st) < 0) || !S_ISDIR(st.st_mode))
+ ) {
+ fail_msg = "create";
+ break;
+ }
+ /* Since the directory exists, don't attempt to change
+ * permissions if it was the full target. Note that
+ * this is not an error condition. */
+ if (!c) {
+ goto ret0;
+ }
+ }
+
+ if (!c) {
+ /* Done. If necessary, update perms on the newly
+ * created directory. Failure to update here _is_
+ * an error. */
+ if ((mode != -1) && (chmod(path, mode) < 0)) {
+ fail_msg = "set permissions of";
+ break;
+ }
+ goto ret0;
+ }
+
+ /* Remove any inserted nul from the path (recursive mode) */
+ *s = c;
+ } /* while (1) */
+
+ bb_perror_msg("can't %s directory '%s'", fail_msg, path);
+ flags = -1;
+ goto ret;
+ ret0:
+ flags = 0;
+ ret:
+ //bb_error_msg("2 org_mask:%o", org_mask);
+ if (org_mask != cur_mask)
+ umask(org_mask);
+ return flags;