From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <3EvMfYQgKDoclmo5w2l3rzzrwp.nzxpwq54tw3-op6pw3z52np7l2p.z2r@flex--abdulras.bounces.google.com> Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by sourceware.org (Postfix) with ESMTPS id 04C2E3858026 for ; Fri, 20 Aug 2021 18:23:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 04C2E3858026 Received: by mail-pf1-x44a.google.com with SMTP id t62-20020a625f410000b029032bc3dda599so5141779pfb.17 for ; Fri, 20 Aug 2021 11:23:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=MQcZUYquUM6lUSrATPJVolkiGL8C7WqYkpO75daIYgA=; b=P34FwHn9NaPpMmzd8hxvJi/ZrbjECUW6/zVXp1E1x1GCgzphPeOaN4zkt1mDlO36oJ 2UFLkIarJCXr0STZyiReDky3vVxerzv2zDrUp0hTGHg3HKqvtqmSUKCcvC8yOsrslhK4 Iw/Gy6zULzEIPcKJfiwS5O+xkJGXAVPID77f/jk61J20gA22suvBs1NDWKE2fr6phIhp pQbnI2L+CSWnOCL2HddfdlpNvXM1zVwALqt2znzgQtKVxp2QH8kwzvVVA72UwJzST2Dr WWuK7hG56R6K2oTSsnBmffUbjJMa2SuLYN3EpDUNEhz3Y7uzj3fLR3xCDPDuavIxg/p6 IE8Q== X-Gm-Message-State: AOAM530FSgCrlcaGXrnZsuAQBrxXacOQCGxgjHeYYdOQN5Zx6u3U+RDC uYtvcHdHUwumRaIPy6fooJIHyuzvf9/f/RDkSIsfABJ+MXSkxh8PGIe5YxQWjshrapLjXisFHzE dq2jeVUs/291nhZXq25SxOrkXoneZNFStJ7mFR9uzUwlgC0Ze6hIwiLLrTfri2/KnudwcRUn5ZG k5 X-Google-Smtp-Source: ABdhPJyGbEmuHpcfkzJbZEDMt9jU2bPP31bkAICjHgz+fFAcMcJ1bg6bjcObqUTlWzj+CwzCgCgz/gZsgeADZg== X-Received: from abdulras-llvm.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:219b]) (user=abdulras job=sendgmr) by 2002:a17:90b:1c92:: with SMTP id oo18mr5961398pjb.56.1629483794978; Fri, 20 Aug 2021 11:23:14 -0700 (PDT) Date: Fri, 20 Aug 2021 18:23:00 +0000 Message-Id: <20210820182300.2842423-1-abdulras@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.33.0.rc2.250.ged5fa647cd-goog Subject: [PATCH] handle libc implemntations which do not provide `error.h` From: Saleem Abdulrasool To: elfutils-devel@sourceware.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-20.5 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Aug 2021 18:23:26 -0000 Introduce a configure time check for the presence of `error.h`. In the case that `error.h` is not available, we can fall back to `err.h`. Although `err.h` is not a C standard header (it is a BSD extension), many libc implementations provide. If there are targets which do not provide an implementation of `err.h`, it would be possible to further extend the implementation to be more portable. This resolves PR21008. Signed-off-by: Saleem Abdulrasool --- configure.ac | 3 +++ lib/system.h | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7caff2c5..177bb1a2 100644 --- a/configure.ac +++ b/configure.ac @@ -431,6 +431,9 @@ AC_CHECK_DECLS([reallocarray],[],[], AC_CHECK_FUNCS([process_vm_readv]) +AC_CHECK_HEADERS([error.h]) +AC_CHECK_HEADERS([err.h]) + old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -D_GNU_SOURCE" AC_FUNC_STRERROR_R() diff --git a/lib/system.h b/lib/system.h index 58d9deee..8adb5848 100644 --- a/lib/system.h +++ b/lib/system.h @@ -29,8 +29,9 @@ #ifndef LIB_SYSTEM_H #define LIB_SYSTEM_H 1 +#include + #include -#include #include #include #include @@ -40,6 +41,26 @@ #include #include +#if defined(HAVE_ERROR_H) +#include +#elif defined(HAVE_ERR_H) +static int error_message_count = 0; + +static inline void error(int status, int errnum, const char *format, ...) { + va_list argp; + + va_start(argp, format); + verr(status, format, argp); + va_end(argp); + + if (status) + exit(status); + ++error_message_count; +} +#else +#error "err.h or error.h must be available" +#endif + #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) # define LE64(n) (n) -- 2.33.0.rc2.250.ged5fa647cd-goog