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:
parent
db35d59994
commit
69a3aecf6b
6 changed files with 41 additions and 0 deletions
|
@ -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));
|
||||||
|
|
|
@ -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*);
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue