aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/bison/lib/xreadlink.c
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2024-07-08 15:54:05 +0000
committerAlexander Smirnov <alex@ydb.tech>2024-07-08 15:54:05 +0000
commitfc7be18c76af2e700641f3598c4856baeef1428e (patch)
tree11dbca45eb321c3a4dd08b12152acc6ef5dd3fa9 /contrib/tools/bison/lib/xreadlink.c
parentec0e7ed6da6fb317741fd8468602949a1362eca5 (diff)
parentc92cb9d3a19331916f0c274d80e67f02a62caa9b (diff)
downloadydb-fc7be18c76af2e700641f3598c4856baeef1428e.tar.gz
Merge branch 'rightlib' into mergelibs-240708-1553
Diffstat (limited to 'contrib/tools/bison/lib/xreadlink.c')
-rw-r--r--contrib/tools/bison/lib/xreadlink.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/contrib/tools/bison/lib/xreadlink.c b/contrib/tools/bison/lib/xreadlink.c
new file mode 100644
index 0000000000..59cfde91b9
--- /dev/null
+++ b/contrib/tools/bison/lib/xreadlink.c
@@ -0,0 +1,44 @@
+/* xreadlink.c -- readlink wrapper to return the link name in malloc'd storage
+
+ Copyright (C) 2001, 2003-2007, 2009-2019 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering <jim@meyering.net>
+ and Bruno Haible <bruno@clisp.org>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "xreadlink.h"
+
+#include <errno.h>
+
+#include "areadlink.h"
+#include "xalloc.h"
+
+/* Call readlink to get the symbolic link value of FILENAME.
+ Return a pointer to that NUL-terminated string in malloc'd storage.
+ If readlink fails, return NULL and set errno.
+ If realloc fails, or if the link value is longer than SIZE_MAX :-),
+ give a diagnostic and exit. */
+
+char *
+xreadlink (char const *filename)
+{
+ char *result = areadlink (filename);
+ if (result == NULL && errno == ENOMEM)
+ xalloc_die ();
+ return result;
+}