1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 00:57:36 +00:00

LibC: Add vsnprintf(), snprintf(), execvp() and abs().

This commit is contained in:
Andreas Kling 2019-01-23 06:35:34 +01:00
parent db35d59994
commit 69a3aecf6b
6 changed files with 41 additions and 0 deletions

View file

@ -296,6 +296,33 @@ int sprintf(char* buffer, const char* fmt, ...)
return ret; return ret;
} }
static size_t __vsnprintf_space_remaining;
static void sized_buffer_putch(char*& bufptr, char ch)
{
if (__vsnprintf_space_remaining) {
*bufptr++ = ch;
--__vsnprintf_space_remaining;
}
}
int vsnprintf(char* buffer, size_t size, const char* fmt, va_list ap)
{
__vsnprintf_space_remaining = size;
int ret = printfInternal(sized_buffer_putch, buffer, fmt, ap);
buffer[ret] = '\0';
return ret;
}
int snprintf(char* buffer, size_t size, const char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int ret = vsnprintf(buffer, size, fmt, ap);
buffer[ret] = '\0';
va_end(ap);
return ret;
}
void perror(const char* s) void perror(const char* s)
{ {
fprintf(stderr, "%s: %s\n", s, strerror(errno)); fprintf(stderr, "%s: %s\n", s, strerror(errno));

View file

@ -52,10 +52,12 @@ size_t fread(void* ptr, size_t size, size_t nmemb, FILE*);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE*); size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE*);
int vfprintf(FILE*, const char* fmt, va_list); int vfprintf(FILE*, const char* fmt, va_list);
int vsprintf(char* buffer, const char* fmt, va_list); int vsprintf(char* buffer, const char* fmt, va_list);
int vsnprintf(char* buffer, size_t, const char* fmt, va_list);
int fprintf(FILE*, const char* fmt, ...); int fprintf(FILE*, const char* fmt, ...);
int printf(const char* fmt, ...); int printf(const char* fmt, ...);
int dbgprintf(const char* fmt, ...); int dbgprintf(const char* fmt, ...);
int sprintf(char* buffer, const char* fmt, ...); int sprintf(char* buffer, const char* fmt, ...);
int snprintf(char* buffer, size_t, const char* fmt, ...);
int putchar(int ch); int putchar(int ch);
int putc(int ch, FILE*); int putc(int ch, FILE*);
int puts(const char*); int puts(const char*);

View file

@ -244,4 +244,9 @@ void srand(unsigned seed)
s_next_rand = seed; s_next_rand = seed;
} }
int abs(int i)
{
return i < 0 ? -i : i;
}
} }

View file

@ -20,6 +20,7 @@ void exit(int status) __NORETURN;
void abort() __NORETURN; void abort() __NORETURN;
char* ptsname(int fd); char* ptsname(int fd);
int ptsname_r(int fd, char* buffer, size_t); int ptsname_r(int fd, char* buffer, size_t);
int abs(int);
#define RAND_MAX 32767 #define RAND_MAX 32767
int rand(); int rand();

View file

@ -24,6 +24,11 @@ int execve(const char* filename, const char** argv, const char** envp)
__RETURN_WITH_ERRNO(rc, rc, -1); __RETURN_WITH_ERRNO(rc, rc, -1);
} }
int execvp(const char* filename, const char** argv)
{
return execve(filename, argv, nullptr);
}
uid_t getuid() uid_t getuid()
{ {
return syscall(SC_getuid); return syscall(SC_getuid);

View file

@ -11,6 +11,7 @@ extern char** environ;
inline int getpagesize() { return 4096; } inline int getpagesize() { return 4096; }
pid_t fork(); pid_t fork();
int execve(const char* filename, const char** argv, const char** envp); int execve(const char* filename, const char** argv, const char** envp);
int execvp(const char* filename, const char** argv);
void sync(); void sync();
void _exit(int status); void _exit(int status);
pid_t getsid(pid_t); pid_t getsid(pid_t);