projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix arm __tlsdesc_dynamic when built as thumb code without __ARM_ARCH>=5
[musl]
/
src
/
passwd
/
getspnam_r.c
diff --git
a/src/passwd/getspnam_r.c
b/src/passwd/getspnam_r.c
index
541206f
..
541e853
100644
(file)
--- a/
src/passwd/getspnam_r.c
+++ b/
src/passwd/getspnam_r.c
@@
-67,6
+67,7
@@
int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct
size_t k, l = strlen(name);
int skip = 0;
int cs;
size_t k, l = strlen(name);
int skip = 0;
int cs;
+ int orig_errno = errno;
*res = 0;
*res = 0;
@@
-93,8
+94,14
@@
int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct
return errno;
}
} else {
return errno;
}
} else {
+ if (errno != ENOENT && errno != ENOTDIR)
+ return errno;
f = fopen("/etc/shadow", "rbe");
f = fopen("/etc/shadow", "rbe");
- if (!f) return errno;
+ if (!f) {
+ if (errno != ENOENT && errno != ENOTDIR)
+ return errno;
+ return 0;
+ }
}
pthread_cleanup_push(cleanup, f);
}
pthread_cleanup_push(cleanup, f);
@@
-113,6
+120,6
@@
int getspnam_r(const char *name, struct spwd *sp, char *buf, size_t size, struct
break;
}
pthread_cleanup_pop(1);
break;
}
pthread_cleanup_pop(1);
-
if (rv) errno = rv
;
+
errno = rv ? rv : orig_errno
;
return rv;
}
return rv;
}