mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	tools/nolibc: implement strerror()
strerror() is commonly used. For example in kselftest which currently needs to do an #ifdef NOLIBC to handle the lack of strerror(). Keep it simple and reuse the output format of perror() for strerror(). Acked-by: Shuah Khan <skhan@linuxfoundation.org> Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
This commit is contained in:
		
							parent
							
								
									582facfa5a
								
							
						
					
					
						commit
						d20d0b10f8
					
				
					 2 changed files with 14 additions and 0 deletions
				
			
		| 
						 | 
					@ -376,6 +376,16 @@ int setvbuf(FILE *stream __attribute__((unused)),
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static __attribute__((unused))
 | 
				
			||||||
 | 
					const char *strerror(int errno)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						static char buf[18] = "errno=";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						i64toa_r(errno, &buf[6]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return buf;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* make sure to include all global symbols */
 | 
					/* make sure to include all global symbols */
 | 
				
			||||||
#include "nolibc.h"
 | 
					#include "nolibc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1210,6 +1210,10 @@ int run_stdlib(int min, int max)
 | 
				
			||||||
		CASE_TEST(strtol_underflow);        EXPECT_STRTOX(1, strtol, "-0x8000000000000001", 16, LONG_MIN, -1, ERANGE); break;
 | 
							CASE_TEST(strtol_underflow);        EXPECT_STRTOX(1, strtol, "-0x8000000000000001", 16, LONG_MIN, -1, ERANGE); break;
 | 
				
			||||||
		CASE_TEST(strtoul_negative);        EXPECT_STRTOX(1, strtoul, "-0x1", 16, ULONG_MAX, 4, 0); break;
 | 
							CASE_TEST(strtoul_negative);        EXPECT_STRTOX(1, strtoul, "-0x1", 16, ULONG_MAX, 4, 0); break;
 | 
				
			||||||
		CASE_TEST(strtoul_overflow);        EXPECT_STRTOX(1, strtoul, "0x10000000000000000", 16, ULONG_MAX, -1, ERANGE); break;
 | 
							CASE_TEST(strtoul_overflow);        EXPECT_STRTOX(1, strtoul, "0x10000000000000000", 16, ULONG_MAX, -1, ERANGE); break;
 | 
				
			||||||
 | 
							CASE_TEST(strerror_success);        EXPECT_STREQ(is_nolibc, strerror(0), "errno=0"); break;
 | 
				
			||||||
 | 
							CASE_TEST(strerror_EINVAL);         EXPECT_STREQ(is_nolibc, strerror(EINVAL), "errno=22"); break;
 | 
				
			||||||
 | 
							CASE_TEST(strerror_int_max);        EXPECT_STREQ(is_nolibc, strerror(INT_MAX), "errno=2147483647"); break;
 | 
				
			||||||
 | 
							CASE_TEST(strerror_int_min);        EXPECT_STREQ(is_nolibc, strerror(INT_MIN), "errno=-2147483648"); break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case __LINE__:
 | 
							case __LINE__:
 | 
				
			||||||
			return ret; /* must be last */
 | 
								return ret; /* must be last */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue