blob: 228a99452437712c3432e4babfa861634531c92e [file] [log] [blame]
Ulrich Drepperb08d5a82005-07-26 05:00:05 +00001/* Return machine flag names.
2 Copyright (C) 2001, 2002 Red Hat, Inc.
3 Written by Ulrich Drepper <drepper@redhat.com>, 2001.
4
5 This program is Open Source software; you can redistribute it and/or
6 modify it under the terms of the Open Software License version 1.0 as
7 published by the Open Source Initiative.
8
9 You should have received a copy of the Open Software License along
10 with this program; if not, you may obtain a copy of the Open Software
11 License version 1.0 from http://www.opensource.org/licenses/osl.php or
12 by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
13 3001 King Ranch Road, Ukiah, CA 95482. */
14
15#ifdef HAVE_CONFIG_H
16# include <config.h>
17#endif
18
19#include <stdio.h>
20#include <string.h>
21#include <libeblP.h>
22
23
24const char *
25ebl_machine_flag_name (ebl, flags, buf, len)
26 Ebl *ebl;
27 Elf64_Word flags;
28 char *buf;
29 size_t len;
30{
31 const char *res;
32
33 if (flags == 0)
34 res = "";
35 else
36 {
37 char *cp = buf;
38 int first = 1;
39 const char *machstr;
40 size_t machstrlen;
41
42 do
43 {
44 if (! first)
45 {
46 if (cp + 1 >= buf + len)
47 break;
48 *cp++ = ',';
49 }
50
51 machstr = ebl != NULL ? ebl->machine_flag_name (&flags) : NULL;
52 if (machstr == NULL)
53 {
54 /* No more known flag. */
55 snprintf (cp, buf + len - cp, "%#x", flags);
56 break;
57 }
58
59 machstrlen = strlen (machstr) + 1;
60 if ((size_t) (buf + len - cp) < machstrlen)
61 {
62 *((char *) mempcpy (cp, machstr, buf + len - cp - 1)) = '\0';
63 break;
64 }
65
66 cp = mempcpy (cp, machstr, machstrlen);
67
68 first = 0;
69 }
70 while (flags != 0);
71
72 res = buf;
73 }
74
75 return res;
76}