summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/internal/slibtool_readlink_impl.h24
-rw-r--r--src/logic/slbt_exec_install.c3
2 files changed, 26 insertions, 1 deletions
diff --git a/src/internal/slibtool_readlink_impl.h b/src/internal/slibtool_readlink_impl.h
new file mode 100644
index 0000000..f66e10b
--- /dev/null
+++ b/src/internal/slibtool_readlink_impl.h
@@ -0,0 +1,24 @@
+/*******************************************************************/
+/* slibtool: a skinny libtool implementation, written in C */
+/* Copyright (C) 2016 Z. Gilboa */
+/* Released under the Standard MIT License; see COPYING.SLIBTOOL. */
+/*******************************************************************/
+
+#include <unistd.h>
+
+static inline int slbt_readlink(
+ const char * restrict path,
+ char * restrict buf,
+ ssize_t bufsize)
+{
+ ssize_t ret;
+
+ if ((ret = readlink(path,buf,bufsize)) <= 0)
+ return -1;
+ else if (ret == bufsize)
+ return -1;
+ else {
+ buf[ret] = '\0';
+ return 0;
+ }
+}
diff --git a/src/logic/slbt_exec_install.c b/src/logic/slbt_exec_install.c
index 22d1e22..c2e334a 100644
--- a/src/logic/slbt_exec_install.c
+++ b/src/logic/slbt_exec_install.c
@@ -15,6 +15,7 @@
#include <slibtool/slibtool.h>
#include "slibtool_install_impl.h"
+#include "slibtool_readlink_impl.h"
#include "slibtool_spawn_impl.h"
#include "slibtool_symlink_impl.h"
#include "argv/argv.h"
@@ -168,7 +169,7 @@ static int slbt_exec_install_entry(
base = slnkname;
/* source (build) symlink target */
- if (readlink(slnkname,target,sizeof(target)) <= 0) {
+ if (slbt_readlink(slnkname,target,sizeof(target)) < 0) {
/* -avoid-version? */
if (stat(slnkname,&st))
return -1;