aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUwe Hermann <uwe@hermann-uwe.de>2008-04-11 19:43:55 +0000
committerUwe Hermann <uwe@hermann-uwe.de>2008-04-11 19:43:55 +0000
commit72199bc49a7ac72fd89c1ddf105c000d457b01ad (patch)
tree07708f1354ba4ae5cb84a6cd8848ad88166d0449
parentb103345a14cf3fe28f32573833dd06af66dfadaf (diff)
Rewrite and filling of libc/ctype.c (thus adjusting copyright line).
Use a simple one-liner for each of the functions. You can surely optimize the code some more, but I chose not to do that in order to keep it readable. When compiling with -Os the size differences are minimal. Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Acked-by: Jordan Crouse <jordan.crouse@amd.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3236 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--payloads/libpayload/include/libpayload.h14
-rw-r--r--payloads/libpayload/libc/ctype.c88
2 files changed, 79 insertions, 23 deletions
diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h
index 4b868b447a..27668e168e 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -99,9 +99,21 @@ extern int last_putchar;
#define havechar havekey
/* libc/ctype.c */
-int isspace(int c);
+int isalnum(int c);
+int isalpha(int c);
+int isascii(int c);
+int isblank(int c);
+int iscntrl(int c);
int isdigit(int c);
+int isgraph(int c);
+int islower(int c);
+int isprint(int c);
+int ispunct(int c);
+int isspace(int c);
+int isupper(int c);
+int isxdigit(int c);
int tolower(int c);
+int toupper(int c);
/* libc/ipchecksum.c */
unsigned short ipchksum(const unsigned short *ptr, unsigned long nbytes);
diff --git a/payloads/libpayload/libc/ctype.c b/payloads/libpayload/libc/ctype.c
index 9853fceb59..9f83261ac1 100644
--- a/payloads/libpayload/libc/ctype.c
+++ b/payloads/libpayload/libc/ctype.c
@@ -1,7 +1,7 @@
/*
* This file is part of the libpayload project.
*
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ * Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,34 +29,78 @@
#include <libpayload.h>
-int isspace(int c)
+int isalpha(int c)
+{
+ return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
+}
+
+int isascii(int c)
+{
+ return (c >= 0 && c <= 127);
+}
+
+int isblank(int c)
+{
+ return (c == ' ' || c == '\t');
+}
+
+int iscntrl(int c)
{
- switch (c) {
- case ' ':
- case '\f':
- case '\n':
- case '\r':
- case '\t':
- case '\v':
- return 1;
- default:
- return 0;
- }
+ return (c <= 31 || c == 127);
}
int isdigit(int c)
{
- switch (c) {
- case '0'...'9':
- return 1;
- default:
- return 0;
- }
+ return (c >= '0' && c <= '9');
+}
+
+int isalnum(int c)
+{
+ return isalpha(c) || isdigit(c);
+}
+
+int isgraph(int c)
+{
+ return (c >= 33 && c <= 126);
+}
+
+int islower(int c)
+{
+ return (c >= 'a' && c <= 'z');
+}
+
+int isprint(int c)
+{
+ return (c >= 32 && c <= 126);
+}
+
+int ispunct(int c)
+{
+ return isprint(c) && !isspace(c) && !isalnum(c);
+}
+
+int isspace(int c)
+{
+ return (c == ' ' || (c >= '\t' || c <= '\r'));
+}
+
+int isupper(int c)
+{
+ return (c >= 'A' && c <= 'Z');
+}
+
+int isxdigit(int c)
+{
+ return isdigit(c) || (tolower(c) >= 'a' && tolower(c) <= 'z');
}
int tolower(int c)
{
- if (c >= 'A' && c <= 'Z')
- return c - 'A' + 'a';
- return c;
+ return (c >= 'A' && c <= 'Z') ? (c + 32) : c;
}
+
+int toupper(int c)
+{
+ return (c >= 'a' && c <= 'z') ? (c - 32) : c;
+}
+