#ifndef __KERNEL__
+#include <string.h>
#include <libcfs/libcfs.h>
/*
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)
{
/*
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