Whamcloud - gitweb
LU-1855 build: fix 'out-of-bounds access' errors
[fs/lustre-release.git] / libcfs / libcfs / user-prim.c
index c02a951..0cc1e3d 100644 (file)
@@ -46,6 +46,7 @@
 
 #ifndef __KERNEL__
 
+#include <string.h>
 #include <libcfs/libcfs.h>
 
 /*
@@ -263,6 +264,49 @@ gid_t cfs_curproc_fsgid(void)
         return getgid();
 }
 
+#ifndef HAVE_STRLCPY /* not in glibc for RHEL 5.x, remove when obsolete */
+size_t strlcpy(char *tgt, const char *src, size_t tgt_len)
+{
+       int src_len = strlen(src);
+
+       strncpy(tgt, src, tgt_len - 1);
+       tgt[tgt_len - 1] = '\0';
+
+       return src_len + 1;
+}
+#endif
+
+#ifndef HAVE_STRLCAT /* not in glibc for RHEL 5.x, remove when obsolete */
+size_t strlcat(char *tgt, const char *src, size_t size)
+{
+       size_t tgt_len = strlen(tgt);
+
+       if (size > tgt_len) {
+               strncat(tgt, src, size - tgt_len - 1);
+               tgt[size - 1] = '\0';
+       }
+
+       return tgt_len + strlen(src);
+}
+#endif
+
+/* Read the environment variable of current process specified by @key. */
+int cfs_get_environ(const char *key, char *value, int *val_len)
+{
+       char *entry;
+       int len;
+
+       entry = getenv(key);
+       if (entry == NULL)
+               return -ENOENT;
+
+       len = strlcpy(value, entry, *val_len);
+       if (len >= *val_len)
+               return -EOVERFLOW;
+
+       return 0;
+}
+
 void cfs_enter_debugger(void)
 {
         /*
@@ -282,26 +326,27 @@ int cfs_daemonize_ctxt(char *str)
 
 cfs_sigset_t cfs_block_allsigs(void)
 {
-        cfs_sigset_t   all;
-        cfs_sigset_t   old;
-        int            rc;
+       cfs_sigset_t   all;
+       cfs_sigset_t   old;
+       int            rc;
 
-        sigfillset(&all);
-        rc = sigprocmask(SIG_SETMASK, &all, &old);
-        LASSERT(rc == 0);
+       sigfillset(&all);
+       rc = sigprocmask(SIG_BLOCK, &all, &old);
+       LASSERT(rc == 0);
 
-        return old;
+       return old;
 }
 
-cfs_sigset_t cfs_block_sigs(cfs_sigset_t blocks)
+cfs_sigset_t cfs_block_sigs(unsigned long sigs)
 {
-        cfs_sigset_t   old;
-        int   rc;
+       cfs_sigset_t   old;
+       cfs_sigset_t   blocks = { { sigs } }; /* kludge */
+       int   rc;
 
-        rc = sigprocmask(SIG_SETMASK, &blocks, &old);
-        LASSERT (rc == 0);
+       rc = sigprocmask(SIG_BLOCK, &blocks, &old);
+       LASSERT (rc == 0);
 
-        return old;
+       return old;
 }
 
 /* Block all signals except for the @sigs. It's only used in