1/* 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} 77