X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=99658f097571f847db178d1402623bd27fd3031e;hp=72b1e2f3c89da92c302b10c6f80e3c5940d42f28;hb=6afc95b73605833e6e966af1c466b5c08feb953f;hpb=0bc8e31b358a872ec2631874bd2109ba4e009ccf diff --git a/src/shared/util.c b/src/shared/util.c index 72b1e2f3c..99658f097 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -58,6 +58,7 @@ #include #include #include +#include #include #undef basename @@ -6192,3 +6193,32 @@ int fd_warn_permissions(const char *path, int fd) { return 0; } + +unsigned long parse_personality(const char *p) { + + /* Parse a personality specifier. We introduce our own + * identifiers that indicate specific ABIs, rather than just + * hints regarding the register size, since we want to keep + * things open for multiple locally supported ABIs for the + * same register size. We try to reuse the ABI identifiers + * used by libseccomp. */ + +#if defined(__x86_64__) + + if (streq(p, "x86")) + return PER_LINUX32; + + if (streq(p, "x86-64")) + return PER_LINUX; + +#elif defined(__i386__) + + if (streq(p, "x86")) + return PER_LINUX; +#endif + + /* personality(7) documents that 0xffffffffUL is used for + * querying the current personality, hence let's use that here + * as error indicator. */ + return 0xffffffffUL; +}