From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 9 Sep 2007 18:20:01 -0000 Subject: [Cluster-devel] conga/ricci/common Makefile sys_util.c sys_util.h Message-ID: <20070909182001.18536.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Changes by: rmccabe at sourceware.org 2007-09-09 18:20:00 Modified files: ricci/common : Makefile Added files: ricci/common : sys_util.c sys_util.h Log message: Some utility functions for use later Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.c.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/sys_util.h.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/Makefile.diff?cvsroot=cluster&r1=1.11&r2=1.12 /cvs/cluster/conga/ricci/common/sys_util.c,v --> standard output revision 1.1 --- conga/ricci/common/sys_util.c +++ - 2007-09-09 18:20:01.099958000 +0000 @@ -0,0 +1,106 @@ +/* +** Copyright (C) Red Hat, Inc. 2007 +** +** This program is free software; you can redistribute it and/or modify it +** under the terms of the GNU General Public License version 2 as published +** by the Free Software Foundation. +** +** This program is distributed in the hope that it will be useful, but +** WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; see the file COPYING. If not, write to the +** Free Software Foundation, Inc., 675 Mass Ave, Cambridge, +** MA 02139, USA. +** +** Author: Ryan McCabe +*/ + +#include +#include +#include +#include +#include +#include +#include + +uint32_t page_size; + +ssize_t read_restart(int fd, void *buf, size_t len) { + void *buf_orig = buf; + + while (len > 0) { + size_t ret = read(fd, buf, len); + if (ret < 0) { + if (errno == EINTR || errno == EAGAIN) + continue; + return -errno; + } + if (ret == 0) + return -EPIPE; + + buf += ret; + len -= (size_t) ret; + } + return (ssize_t) (buf - buf_orig); +} + +ssize_t write_restart(int fd, const void *buf, size_t len) { + const void *buf_orig = buf; + + while (len > 0) { + size_t ret = write(fd, buf, len); + if (ret < 0) { + if (errno == EINTR || errno == EAGAIN) + continue; + return -errno; + } + if (ret == 0) + return -EPIPE; + + buf += ret; + len -= (size_t) ret; + } + return (ssize_t) (buf - buf_orig); +} + +void *mallock(size_t len) { + size_t rounded_len; + + if (!page_size) { + int ret = sysconf(_SC_PAGESIZE); + if (ret <= 0) + return NULL; + page_size = (uint32_t) ret; + } + + /* Round up to the next multiple of the page size */ + rounded_len = (len + (page_size - 1)) & -page_size; + + void *ret = malloc(rounded_len); + if (ret == NULL) + return ret; + + if (mlock(ret, rounded_len) != 0) { + free(ret); + return NULL; + } + + return ret; +} + +int mdallock(void *mem, size_t len) { + int ret; + size_t rounded_len; + + rounded_len = (len + (page_size - 1)) & -page_size; + memset(mem, 0, len); + ret = munlock(mem, rounded_len); + if (ret != 0) + ret = -errno; + + free(mem); + return ret; +} /cvs/cluster/conga/ricci/common/sys_util.h,v --> standard output revision 1.1 --- conga/ricci/common/sys_util.h +++ - 2007-09-09 18:20:01.187476000 +0000 @@ -0,0 +1,30 @@ +/* +** Copyright (C) Red Hat, Inc. 2007 +** +** This program is free software; you can redistribute it and/or modify it +** under the terms of the GNU General Public License version 2 as published +** by the Free Software Foundation. +** +** This program is distributed in the hope that it will be useful, but +** WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; see the file COPYING. If not, write to the +** Free Software Foundation, Inc., 675 Mass Ave, Cambridge, +** MA 02139, USA. +** +** Author: Ryan McCabe +*/ + +#ifndef __CONGA_SYS_UTIL_H +#define __CONGA_SYS_UTIL_H + +ssize_t read_restart(int fd, void *buf, size_t len); +ssize_t write_restart(int fd, const void *buf, size_t len); + +void *mallock(size_t len); +void *mdallock(void *, size_t len); + +#endif --- conga/ricci/common/Makefile 2007/09/07 19:07:21 1.11 +++ conga/ricci/common/Makefile 2007/09/09 18:20:00 1.12 @@ -32,9 +32,10 @@ Logger.o \ Variable.o \ Random.o \ + Module.o \ daemon_init.o \ base64.o \ - Module.o + sys_util.o INCLUDE += CXXFLAGS +=