/* 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]; neg = *xval == '-'; xval = &xval[neg]; errno = 0; value = strtoull(xval, &end, 16); if (errno || *end) goto usage; err = libsyscalls_make_signed_integer(value, neg, (enum libsyscalls_datatype_sign_representation)sign, bits, &value); if (err == LIBSYSCALLS_E_INVAL) { printf("inval\n"); goto out; } else if (err) { fprintf(stderr, "make-signed %s %s %s: ", argv[1], argv[2], argv[3]); libsyscalls_perror(NULL, err); return 1; } printf("%0*llX\n", (int)strlen(xval), value); out: if (fflush(stdout) || fclose(stdout)) { perror(NULL); return 1; } return 0; }