소스 검색

fix error return value for cuserid

the historical function was specified to return an empty string in the
caller-provided buffer, not a null pointer, to indicate error when the
argument is non-null. only when the argument is null should it return
a null pointer on error.
Rich Felker 4 년 전
부모
커밋
49b6df3d9f
1개의 변경된 파일3개의 추가작업 그리고 2개의 파일을 삭제
  1. 3 2
      src/legacy/cuserid.c

+ 3 - 2
src/legacy/cuserid.c

@@ -9,12 +9,13 @@ char *cuserid(char *buf)
 	static char usridbuf[L_cuserid];
 	struct passwd pw, *ppw;
 	long pwb[256];
+	if (buf) *buf = 0;
 	getpwuid_r(geteuid(), &pw, (void *)pwb, sizeof pwb, &ppw);
 	if (!ppw)
-		return 0;
+		return buf;
 	size_t len = strnlen(pw.pw_name, L_cuserid);
 	if (len == L_cuserid)
-		return 0;
+		return buf;
 	if (!buf) buf = usridbuf;
 	memcpy(buf, pw.pw_name, len+1);
 	return buf;