X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Flibcfs%2Fuser-prim.c;h=2c03cb778fb86e23f65d7bebdc9073b43a401c0b;hb=317ebf88af58e9d9235c90f84b112e931ae69b43;hp=6788b7b8fbfea1373921a8b88e0532acbea33758;hpb=7de9e8dd313557997fb28f3926516b5c26d31c9a;p=fs%2Flustre-release.git diff --git a/libcfs/libcfs/user-prim.c b/libcfs/libcfs/user-prim.c index 6788b7b..2c03cb7 100644 --- a/libcfs/libcfs/user-prim.c +++ b/libcfs/libcfs/user-prim.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -48,6 +46,7 @@ #ifndef __KERNEL__ +#include #include /* @@ -126,7 +125,7 @@ void cfs_waitq_wait(struct cfs_waitlink *link, cfs_task_state_t state) (void)link; /* well, wait for something to happen */ - cfs_call_wait_handler(0); + call_wait_handler(0); } int64_t cfs_waitq_timedwait(struct cfs_waitlink *link, cfs_task_state_t state, @@ -134,7 +133,7 @@ int64_t cfs_waitq_timedwait(struct cfs_waitlink *link, cfs_task_state_t state, { LASSERT(link != NULL); (void)link; - cfs_call_wait_handler(timeout); + call_wait_handler(timeout); return 0; } @@ -265,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) { /* @@ -284,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