summaryrefslogtreecommitdiff
path: root/corebinutils/sh/compat.c
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:29:19 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:29:19 +0300
commit85f60af1bb558bc7248fb64528c5bba92e504adf (patch)
treeddb4ab72a5ca33b668b34ecdb09fe284c5644677 /corebinutils/sh/compat.c
parent96be0a182e0b889a9daf43c04a0b835aa604d280 (diff)
parent126b33a9db9b44a56f2c62d18346746ec1330766 (diff)
downloadProject-Tick-85f60af1bb558bc7248fb64528c5bba92e504adf.tar.gz
Project-Tick-85f60af1bb558bc7248fb64528c5bba92e504adf.zip
Add 'corebinutils/sh/' from commit '126b33a9db9b44a56f2c62d18346746ec1330766'
git-subtree-dir: corebinutils/sh git-subtree-mainline: 96be0a182e0b889a9daf43c04a0b835aa604d280 git-subtree-split: 126b33a9db9b44a56f2c62d18346746ec1330766
Diffstat (limited to 'corebinutils/sh/compat.c')
-rw-r--r--corebinutils/sh/compat.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/corebinutils/sh/compat.c b/corebinutils/sh/compat.c
new file mode 100644
index 0000000000..d51a613f81
--- /dev/null
+++ b/corebinutils/sh/compat.c
@@ -0,0 +1,75 @@
+/*
+
+SPDX-License-Identifier: BSD-3-Clause
+
+Copyright (c) 2026
+ Project Tick. All rights reserved.
+
+This code is derived from software contributed to Berkeley by
+the Institute of Electrical and Electronics Engineers, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+*/
+
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#if defined(__linux__)
+#include <sys/auxv.h>
+#endif
+
+#include "compat.h"
+
+int
+sh_issetugid(void)
+{
+#if defined(__linux__) && defined(AT_SECURE)
+ errno = 0;
+ if (getauxval(AT_SECURE) != 0)
+ return (1);
+ if (errno == 0)
+ return (0);
+#endif
+ return (getuid() != geteuid() || getgid() != getegid());
+}
+
+size_t
+sh_strlcpy(char *dst, const char *src, size_t dstsize)
+{
+ size_t srclen;
+
+ srclen = strlen(src);
+ if (dstsize != 0) {
+ size_t copylen;
+
+ copylen = srclen >= dstsize ? dstsize - 1 : srclen;
+ memcpy(dst, src, copylen);
+ dst[copylen] = '\0';
+ }
+ return (srclen);
+}