/* See LICENSE file for copyright and license details. */ #include "../libsyscalls.h" #include #include #include #include #if defined(__clang__) # pragma clang diagnostic ignored "-Wunsafe-buffer-usage" /* clang is just being silly */ #endif int main(int argc, char **argv) { int sign, neg = -1; size_t bits; const char *xval; enum libsyscalls_error err; unsigned long long int value; char *end; if (argc != 4) { usage: fprintf(stderr, "usage error\n"); return 1; } sign = atoi(argv[1]); bits = (unsigned long long int)atoll(argv[2]); xval = argv[3]; errno = 0; value = strtoull(xval, &end, 16); if (errno || *end) goto usage; err = libsyscalls_parse_signed_integer(value, (enum libsyscalls_datatype_sign_representation)sign, bits, &value, &neg); if (err == LIBSYSCALLS_E_INVAL) { printf("inval\n"); goto out; } else if (err) { libsyscalls_perror(NULL, err); return 1; } if (neg != 0 && neg != 1) abort(); printf("%.*s%0*llX\n", neg, "-", (int)strlen(xval), value); out: if (fflush(stdout) || fclose(stdout)) { perror(NULL); return 1; } return 0; }