2007-07-19 16:22:40 +00:00
|
|
|
/*
|
|
|
|
* utils.h: common, generic utility functions
|
|
|
|
*
|
|
|
|
* Copyright (C) 2006, 2007 Binary Karma
|
|
|
|
* Copyright (C) 2006 Shuveb Hussain
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library 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
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
* File created Jul 18, 2007 - Shuveb Hussain <shuveb@binarykarma.com>
|
|
|
|
*/
|
|
|
|
|
2007-12-03 14:30:46 +00:00
|
|
|
#ifndef __VIR_UTIL_H__
|
|
|
|
#define __VIR_UTIL_H__
|
|
|
|
|
Move safewrite and saferead to a separate file.
We currently use safewrite from inside libvirt and don't want to publish
any such function name. However, we do want to use it in applications
like virsh, libvirtd and libvirt_proxy that link with libvirt. To that
end, this change moves that function definition (along with the nearly
identical saferead) into a new file, util-lib.c. To avoid maintaining
separate copies of even such small functions, we simply include that new
file from util.c. Then, the separate applications that need to use
safewrite simply compile and link with util-lib.c.
Of course, this does mean that each of those applications will
containing two copies of these functions. However, the functions
are so small that it's not worth worrying about that.
* src/util.c (saferead, safewrite): Move function definitions to
util-lib.c and include that .c file.
* src/util-lib.c (saferead, safewrite): New file. Functions from src/util.c
with slight change (s/int r =/ssize_t r =/) to reflect read/write return type.
* src/util-lib.h: Declare the two moved functions.
* src/util.h: Remove declarations. Include src/util-lib.h.
* proxy/Makefile.am (libvirt_proxy_SOURCES): Add src/util-lib.c.
* qemud/Makefile.am (libvirtd_SOURCES): Likewise.
* src/Makefile.am (virsh_SOURCES): Add util-lib.c. Remove some SP-before-TAB.
2008-02-22 15:53:13 +00:00
|
|
|
#include "util-lib.h"
|
2008-06-24 15:00:15 +00:00
|
|
|
#include "verify.h"
|
2008-08-27 11:42:52 +00:00
|
|
|
#include <sys/select.h>
|
2007-12-03 14:30:46 +00:00
|
|
|
|
2008-08-20 09:24:14 +00:00
|
|
|
enum {
|
|
|
|
VIR_EXEC_NONE = 0,
|
|
|
|
VIR_EXEC_NONBLOCK = (1 << 0),
|
|
|
|
VIR_EXEC_DAEMON = (1 << 1),
|
|
|
|
};
|
|
|
|
|
|
|
|
int virExec(virConnectPtr conn,
|
|
|
|
const char *const*argv,
|
|
|
|
const char *const*envp,
|
2008-08-27 11:42:52 +00:00
|
|
|
const fd_set *keepfd,
|
2008-08-20 09:24:14 +00:00
|
|
|
int *retpid,
|
|
|
|
int infd,
|
|
|
|
int *outfd,
|
|
|
|
int *errfd,
|
|
|
|
int flags);
|
2008-08-08 15:43:38 +00:00
|
|
|
int virRun(virConnectPtr conn, const char *const*argv, int *status);
|
2007-07-19 16:22:40 +00:00
|
|
|
|
2008-09-02 10:29:51 +00:00
|
|
|
int __virFileReadLimFD(int fd, int maxlen, char **buf);
|
|
|
|
#define virFileReadLimFD(fd,m,b) __virFileReadLimFD((fd),(m),(b))
|
|
|
|
|
|
|
|
int __virFileReadAll(const char *path, int maxlen, char **buf);
|
2008-01-21 15:27:14 +00:00
|
|
|
#define virFileReadAll(p,m,b) __virFileReadAll((p),(m),(b))
|
2007-12-03 14:30:46 +00:00
|
|
|
|
|
|
|
int virFileMatchesNameSuffix(const char *file,
|
|
|
|
const char *name,
|
|
|
|
const char *suffix);
|
|
|
|
|
|
|
|
int virFileHasSuffix(const char *str,
|
|
|
|
const char *suffix);
|
|
|
|
|
2008-08-20 19:42:36 +00:00
|
|
|
int virFileStripSuffix(char *str,
|
|
|
|
const char *suffix);
|
|
|
|
|
2007-12-03 14:30:46 +00:00
|
|
|
int virFileLinkPointsTo(const char *checkLink,
|
|
|
|
const char *checkDest);
|
2008-02-26 07:05:18 +00:00
|
|
|
|
|
|
|
int virFileExists(const char *path);
|
|
|
|
|
2007-12-03 14:30:46 +00:00
|
|
|
int virFileMakePath(const char *path);
|
|
|
|
|
|
|
|
int virFileBuildPath(const char *dir,
|
|
|
|
const char *name,
|
|
|
|
const char *ext,
|
|
|
|
char *buf,
|
|
|
|
unsigned int buflen);
|
|
|
|
|
2008-08-13 10:52:15 +00:00
|
|
|
int virFileOpenTty(int *ttymaster,
|
|
|
|
char **ttyName,
|
|
|
|
int rawmode);
|
|
|
|
|
|
|
|
int virFileWritePid(const char *dir,
|
|
|
|
const char *name,
|
|
|
|
pid_t pid);
|
|
|
|
int virFileReadPid(const char *dir,
|
|
|
|
const char *name,
|
|
|
|
pid_t *pid);
|
|
|
|
int virFileDeletePid(const char *dir,
|
|
|
|
const char *name);
|
2007-12-03 14:30:46 +00:00
|
|
|
|
2008-02-08 09:15:16 +00:00
|
|
|
int __virStrToLong_i(char const *s,
|
|
|
|
char **end_ptr,
|
|
|
|
int base,
|
|
|
|
int *result);
|
|
|
|
#define virStrToLong_i(s,e,b,r) __virStrToLong_i((s),(e),(b),(r))
|
|
|
|
|
|
|
|
int virStrToLong_ui(char const *s,
|
|
|
|
char **end_ptr,
|
|
|
|
int base,
|
|
|
|
unsigned int *result);
|
|
|
|
int virStrToLong_ll(char const *s,
|
|
|
|
char **end_ptr,
|
|
|
|
int base,
|
|
|
|
long long *result);
|
2008-02-20 15:29:13 +00:00
|
|
|
int __virStrToLong_ull(char const *s,
|
2008-04-10 16:54:54 +00:00
|
|
|
char **end_ptr,
|
|
|
|
int base,
|
|
|
|
unsigned long long *result);
|
2008-02-20 15:29:13 +00:00
|
|
|
#define virStrToLong_ull(s,e,b,r) __virStrToLong_ull((s),(e),(b),(r))
|
2008-02-08 09:15:16 +00:00
|
|
|
|
2008-02-27 16:14:44 +00:00
|
|
|
int __virMacAddrCompare (const char *mac1, const char *mac2);
|
|
|
|
#define virMacAddrCompare(mac1,mac2) __virMacAddrCompare((mac1),(mac2))
|
|
|
|
|
2008-02-27 04:35:08 +00:00
|
|
|
void virSkipSpaces(const char **str);
|
|
|
|
int virParseNumber(const char **str);
|
|
|
|
|
2008-03-20 11:24:30 +00:00
|
|
|
int virParseMacAddr(const char* str, unsigned char *addr);
|
|
|
|
|
2008-05-09 16:41:19 +00:00
|
|
|
int virDiskNameToIndex(const char* str);
|
|
|
|
|
2008-06-24 15:00:15 +00:00
|
|
|
|
|
|
|
int virEnumFromString(const char *const*types,
|
|
|
|
unsigned int ntypes,
|
|
|
|
const char *type);
|
|
|
|
|
|
|
|
const char *virEnumToString(const char *const*types,
|
|
|
|
unsigned int ntypes,
|
|
|
|
int type);
|
|
|
|
|
|
|
|
#define VIR_ENUM_IMPL(name, lastVal, ...) \
|
|
|
|
static const char const *name ## TypeList[] = { __VA_ARGS__ }; \
|
2008-07-11 16:23:36 +00:00
|
|
|
extern int (* name ## Verify (void)) [verify_true (ARRAY_CARDINALITY(name ## TypeList) == lastVal)]; \
|
2008-06-24 15:00:15 +00:00
|
|
|
const char *name ## TypeToString(int type) { \
|
|
|
|
return virEnumToString(name ## TypeList, \
|
|
|
|
ARRAY_CARDINALITY(name ## TypeList), \
|
|
|
|
type); \
|
|
|
|
} \
|
|
|
|
int name ## TypeFromString(const char *type) { \
|
|
|
|
return virEnumFromString(name ## TypeList, \
|
|
|
|
ARRAY_CARDINALITY(name ## TypeList), \
|
|
|
|
type); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define VIR_ENUM_DECL(name) \
|
|
|
|
const char *name ## TypeToString(int type); \
|
|
|
|
int name ## TypeFromString(const char*type);
|
|
|
|
|
2007-12-03 14:30:46 +00:00
|
|
|
#endif /* __VIR_UTIL_H__ */
|