public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Adhemerval Zanella <azanella@sourceware.org>
To: glibc-cvs@sourceware.org
Subject: [glibc] linux: Consolidate dl-origin.c
Date: Wed,  7 Dec 2022 19:14:38 +0000 (GMT)	[thread overview]
Message-ID: <20221207191438.E876E392B108@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b14e1f9fcd3ca4dd86d0637f6e32e7bf642394da

commit b14e1f9fcd3ca4dd86d0637f6e32e7bf642394da
Author: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
Date:   Wed Oct 19 19:14:05 2022 -0300

    linux: Consolidate dl-origin.c
    
    Use the generic implementation as the default, since the syscall
    is supported by all architectures.
    
    Also cleanup some headers and remove the INTERNAL_SYSCALL_ERROR_P
    usage (the INTERNAL_SYSCALL_CALL macro already returns an negative
    value if an error occurs).

Diff:
---
 sysdeps/unix/sysv/linux/dl-origin.c         | 14 ++---
 sysdeps/unix/sysv/linux/generic/dl-origin.c | 79 -----------------------------
 2 files changed, 5 insertions(+), 88 deletions(-)

diff --git a/sysdeps/unix/sysv/linux/dl-origin.c b/sysdeps/unix/sysv/linux/dl-origin.c
index 9a76c78648..2fd1e5f400 100644
--- a/sysdeps/unix/sysv/linux/dl-origin.c
+++ b/sysdeps/unix/sysv/linux/dl-origin.c
@@ -17,15 +17,11 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
+#include <dl-dst.h>
+#include <fcntl.h>
 #include <ldsodefs.h>
 #include <sysdep.h>
 
-#include <dl-dst.h>
-
 /* On Linux >= 2.1 systems which have the dcache implementation we can get
    the path of the application from the /proc/self/exe symlink.  Try this
    first and fall back on the generic method if necessary.  */
@@ -37,9 +33,9 @@ _dl_get_origin (void)
   char *result;
   int len;
 
-  len = INTERNAL_SYSCALL_CALL (readlink, "/proc/self/exe", linkval,
-			       sizeof (linkval));
-  if (! INTERNAL_SYSCALL_ERROR_P (len) && len > 0 && linkval[0] != '[')
+  len = INTERNAL_SYSCALL_CALL (readlinkat, AT_FDCWD, "/proc/self/exe",
+			       linkval, sizeof (linkval));
+  if (len > 0 && linkval[0] != '[')
     {
       /* We can use this value.  */
       assert (linkval[0] == '/');
diff --git a/sysdeps/unix/sysv/linux/generic/dl-origin.c b/sysdeps/unix/sysv/linux/generic/dl-origin.c
deleted file mode 100644
index ed3ac3570c..0000000000
--- a/sysdeps/unix/sysv/linux/generic/dl-origin.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Find path of executable.
-   Copyright (C) 1998-2022 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/param.h>
-#include <ldsodefs.h>
-#include <sysdep.h>
-
-#include <dl-dst.h>
-
-/* On Linux >= 2.1 systems which have the dcache implementation we can get
-   the path of the application from the /proc/self/exe symlink.  Try this
-   first and fall back on the generic method if necessary.  */
-
-const char *
-_dl_get_origin (void)
-{
-  char linkval[PATH_MAX];
-  char *result;
-  int len;
-
-  len = INTERNAL_SYSCALL_CALL (readlinkat, AT_FDCWD, "/proc/self/exe",
-			       linkval, sizeof (linkval));
-  if (! INTERNAL_SYSCALL_ERROR_P (len) && len > 0 && linkval[0] != '[')
-    {
-      /* We can use this value.  */
-      assert (linkval[0] == '/');
-      while (len > 1 && linkval[len - 1] != '/')
-	--len;
-      result = (char *) malloc (len + 1);
-      if (result == NULL)
-	result = (char *) -1;
-      else if (len == 1)
-	memcpy (result, "/", 2);
-      else
-	*((char *) __mempcpy (result, linkval, len - 1)) = '\0';
-    }
-  else
-    {
-      result = (char *) -1;
-      /* We use the environment variable LD_ORIGIN_PATH.  If it is set make
-	 a copy and strip out trailing slashes.  */
-      if (GLRO(dl_origin_path) != NULL)
-	{
-	  size_t len = strlen (GLRO(dl_origin_path));
-	  result = (char *) malloc (len + 1);
-	  if (result == NULL)
-	    result = (char *) -1;
-	  else
-	    {
-	      char *cp = __mempcpy (result, GLRO(dl_origin_path), len);
-	      while (cp > result + 1 && cp[-1] == '/')
-		--cp;
-	      *cp = '\0';
-	    }
-	}
-    }
-
-  return result;
-}

                 reply	other threads:[~2022-12-07 19:14 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221207191438.E876E392B108@sourceware.org \
    --to=azanella@sourceware.org \
    --cc=glibc-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).