X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flib%2Flib.h;h=8883cf71da155018031cbb53db3004086e3c5f23;hb=9bade155997ac1dfe4eebb5b5dfe7ff2b38ffdc8;hp=2f788bea4de58e068695bc8cc03a9c3c7d390377;hpb=540641a18c65c05df757ced2f225ade578da15aa;p=pintos-anon diff --git a/src/lib/lib.h b/src/lib/lib.h index 2f788be..8883cf7 100644 --- a/src/lib/lib.h +++ b/src/lib/lib.h @@ -2,11 +2,11 @@ #define HEADER_LIB_H 1 #include +#include #include +#include "debug.h" -#define ROUND_UP(X, STEP) (((X) + (STEP) - 1) / (STEP) * (STEP)) -#define DIV_ROUND_UP(X, STEP) (((X) + (STEP) - 1) / (STEP)) - +/* */ void *memset (void *, int, size_t); void *memcpy (void *, const void *, size_t); void *memmove (void *, const void *, size_t); @@ -16,15 +16,53 @@ int memcmp (const void *, const void *, size_t); char *strchr (const char *, int); size_t strlcpy (char *, const char *, size_t); size_t strlen (const char *); +size_t strnlen (const char *, size_t); +int strcmp (const char *, const char *); +char *strtok_r (char *, const char *, char **); -void vprintk (const char *, va_list); -void printk (const char *, ...) - __attribute__ ((format (printf, 1, 2))); +/* */ +int atoi (const char *); -static inline int -isdigit (int c) -{ - return c >= '0' && c <= '9'; +/* */ +int vsnprintf (char *, size_t, const char *, va_list) PRINTF_FORMAT (3, 0); +int snprintf (char *, size_t, const char *, ...) PRINTF_FORMAT (3, 4); + +/* */ +static inline int islower (int c) { return c >= 'a' && c <= 'z'; } +static inline int isupper (int c) { return c >= 'A' && c <= 'Z'; } +static inline int isalpha (int c) { return islower (c) || isupper (c); } +static inline int isdigit (int c) { return c >= '0' && c <= '9'; } +static inline int isalnum (int c) { return isalpha (c) || isdigit (c); } +static inline int isxdigit (int c) { + return isdigit (c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); +} +static inline int isspace (int c) { return strchr (" \f\n\r\t\v", c) != NULL; } +static inline int isgraph (int c) { return c >= 33 && c < 127; } +static inline int isprint (int c) { return c >= 32 && c < 127; } +static inline int iscntrl (int c) { return c >= 0 && c < 32; } +static inline int isascii (int c) { return c >= 0 && c < 128; } +static inline int ispunct (int c) { + return isprint (c) && !isalnum (c) && !isspace (c); } + +/* Nonstandard. */ + +/* Yields X rounded up to the nearest multiple of STEP. + For X >= 0, STEP >= 1 only. */ +#define ROUND_UP(X, STEP) (((X) + (STEP) - 1) / (STEP) * (STEP)) + +/* Yields X divided by STEP, rounded up. + For X >= 0, STEP >= 1 only. */ +#define DIV_ROUND_UP(X, STEP) (((X) + (STEP) - 1) / (STEP)) + +/* Yields X rounded down to the nearest multiple of STEP. + For X >= 0, STEP >= 1 only. */ +#define ROUND_DOWN(X, STEP) ((X) / (STEP) * (STEP)) + +/* There is no DIV_ROUND_DOWN. It would be simply X / STEP. */ + +void vprintk (const char *, va_list) PRINTF_FORMAT (1, 0); +void printk (const char *, ...) PRINTF_FORMAT (1, 2); +void hex_dump (const void *, size_t size, bool ascii); #endif /* lib.h */