summaryrefslogtreecommitdiffstats
path: root/libebl/eblmachineflagname.c
diff options
context:
space:
mode:
authorUlrich Drepper <[email protected]>2005-07-26 05:00:05 +0000
committerUlrich Drepper <[email protected]>2005-07-26 05:00:05 +0000
commitb08d5a8fb42f4586d756068065186b5af7e48dad (patch)
tree9f05f86be7877ed461b4dc05f53b29ea4fc0d2a1 /libebl/eblmachineflagname.c
Adjust for monotone.
Diffstat (limited to 'libebl/eblmachineflagname.c')
-rw-r--r--libebl/eblmachineflagname.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/libebl/eblmachineflagname.c b/libebl/eblmachineflagname.c
new file mode 100644
index 00000000..228a9945
--- /dev/null
+++ b/libebl/eblmachineflagname.c
@@ -0,0 +1,76 @@
+/* Return machine flag names.
+ Copyright (C) 2001, 2002 Red Hat, Inc.
+ Written by Ulrich Drepper <[email protected]>, 2001.
+
+ This program is Open Source software; you can redistribute it and/or
+ modify it under the terms of the Open Software License version 1.0 as
+ published by the Open Source Initiative.
+
+ You should have received a copy of the Open Software License along
+ with this program; if not, you may obtain a copy of the Open Software
+ License version 1.0 from http://www.opensource.org/licenses/osl.php or
+ by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
+ 3001 King Ranch Road, Ukiah, CA 95482. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <libeblP.h>
+
+
+const char *
+ebl_machine_flag_name (ebl, flags, buf, len)
+ Ebl *ebl;
+ Elf64_Word flags;
+ char *buf;
+ size_t len;
+{
+ const char *res;
+
+ if (flags == 0)
+ res = "";
+ else
+ {
+ char *cp = buf;
+ int first = 1;
+ const char *machstr;
+ size_t machstrlen;
+
+ do
+ {
+ if (! first)
+ {
+ if (cp + 1 >= buf + len)
+ break;
+ *cp++ = ',';
+ }
+
+ machstr = ebl != NULL ? ebl->machine_flag_name (&flags) : NULL;
+ if (machstr == NULL)
+ {
+ /* No more known flag. */
+ snprintf (cp, buf + len - cp, "%#x", flags);
+ break;
+ }
+
+ machstrlen = strlen (machstr) + 1;
+ if ((size_t) (buf + len - cp) < machstrlen)
+ {
+ *((char *) mempcpy (cp, machstr, buf + len - cp - 1)) = '\0';
+ break;
+ }
+
+ cp = mempcpy (cp, machstr, machstrlen);
+
+ first = 0;
+ }
+ while (flags != 0);
+
+ res = buf;
+ }
+
+ return res;
+}