mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 12:23:15 +00:00
LibC: Add vsnprintf(), snprintf(), execvp() and abs().
This commit is contained in:
parent
db35d59994
commit
69a3aecf6b
|
@ -296,6 +296,33 @@ int sprintf(char* buffer, const char* fmt, ...)
|
|||
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)
|
||||
{
|
||||
fprintf(stderr, "%s: %s\n", s, strerror(errno));
|
||||
|
|
|
@ -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*);
|
||||
int vfprintf(FILE*, 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 printf(const char* fmt, ...);
|
||||
int dbgprintf(const char* fmt, ...);
|
||||
int sprintf(char* buffer, const char* fmt, ...);
|
||||
int snprintf(char* buffer, size_t, const char* fmt, ...);
|
||||
int putchar(int ch);
|
||||
int putc(int ch, FILE*);
|
||||
int puts(const char*);
|
||||
|
|
|
@ -244,4 +244,9 @@ void srand(unsigned seed)
|
|||
s_next_rand = seed;
|
||||
}
|
||||
|
||||
int abs(int i)
|
||||
{
|
||||
return i < 0 ? -i : i;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ void exit(int status) __NORETURN;
|
|||
void abort() __NORETURN;
|
||||
char* ptsname(int fd);
|
||||
int ptsname_r(int fd, char* buffer, size_t);
|
||||
int abs(int);
|
||||
|
||||
#define RAND_MAX 32767
|
||||
int rand();
|
||||
|
|
|
@ -24,6 +24,11 @@ int execve(const char* filename, const char** argv, const char** envp)
|
|||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||
}
|
||||
|
||||
int execvp(const char* filename, const char** argv)
|
||||
{
|
||||
return execve(filename, argv, nullptr);
|
||||
}
|
||||
|
||||
uid_t getuid()
|
||||
{
|
||||
return syscall(SC_getuid);
|
||||
|
|
|
@ -11,6 +11,7 @@ extern char** environ;
|
|||
inline int getpagesize() { return 4096; }
|
||||
pid_t fork();
|
||||
int execve(const char* filename, const char** argv, const char** envp);
|
||||
int execvp(const char* filename, const char** argv);
|
||||
void sync();
|
||||
void _exit(int status);
|
||||
pid_t getsid(pid_t);
|
||||
|
|
Loading…
Reference in a new issue