提交 0bb6f816 编写于 作者: M Mark McLoughlin

Add virFileWriteStr()

Re-factor the code from networkEnableIpForwarding() into a
utility function in preparation for code which writes to
sysfs files.
上级 f6a5e8f7
Fri Feb 13 19:04:57 IST 2009 Mark McLoughlin <markmc@redhat.com>
* src/libvirt_private.syms, src/util.[ch]: add
virFileWriteStr()
* src/network_driver.c: use it here
Fri Feb 13 19:04:45 IST 2009 Mark McLoughlin <markmc@redhat.com>
* src/xml.c: fix some error strings
......
......@@ -279,6 +279,7 @@ virCondBroadcast;
# util.h
virFileReadAll;
virFileWriteStr;
virStrToLong_i;
virStrToLong_ll;
virStrToLong_ull;
......
......@@ -794,33 +794,11 @@ networkRemoveIptablesRules(struct network_driver *driver,
iptablesSaveRules(driver->iptables);
}
/* Enable IP Forwarding.
Return 0 for success, nonzero for failure.
Be careful to preserve any errno value upon failure. */
/* Enable IP Forwarding. Return 0 for success, nonzero for failure. */
static int
networkEnableIpForwarding(void)
{
#define PROC_IP_FORWARD "/proc/sys/net/ipv4/ip_forward"
int fd;
if ((fd = open(PROC_IP_FORWARD, O_WRONLY|O_TRUNC)) == -1)
return 0;
if (safewrite(fd, "1\n", 2) < 0) {
int saved_errno = errno;
close (fd);
errno = saved_errno;
return 0;
}
/* Use errno from failed close only if there was no write error. */
if (close (fd) != 0)
return 0;
return 1;
#undef PROC_IP_FORWARD
return virFileWriteStr("/proc/sys/net/ipv4/ip_forward", "1\n");
}
static int networkStartNetworkDaemon(virConnectPtr conn,
......
......@@ -774,6 +774,30 @@ int virFileReadAll(const char *path, int maxlen, char **buf)
return len;
}
/* Truncate @path and write @str to it.
Return 0 for success, nonzero for failure.
Be careful to preserve any errno value upon failure. */
int virFileWriteStr(const char *path, const char *str)
{
int fd;
if ((fd = open(path, O_WRONLY|O_TRUNC)) == -1)
return -1;
if (safewrite(fd, str, strlen(str)) < 0) {
int saved_errno = errno;
close (fd);
errno = saved_errno;
return -1;
}
/* Use errno from failed close only if there was no write error. */
if (close (fd) != 0)
return -1;
return 0;
}
int virFileMatchesNameSuffix(const char *file,
const char *name,
const char *suffix)
......
......@@ -56,6 +56,8 @@ int virFileReadLimFD(int fd, int maxlen, char **buf);
int virFileReadAll(const char *path, int maxlen, char **buf);
int virFileWriteStr(const char *path, const char *str);
int virFileMatchesNameSuffix(const char *file,
const char *name,
const char *suffix);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册