Add virFileWriteStr()

Re-factor the code from networkEnableIpForwarding() into a
utility function in preparation for code which writes to
sysfs files.
This commit is contained in:
Mark McLoughlin 2009-02-13 19:13:06 +00:00
parent f6a5e8f785
commit 0bb6f816e3
5 changed files with 36 additions and 24 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -279,6 +279,7 @@ virCondBroadcast;
# util.h
virFileReadAll;
virFileWriteStr;
virStrToLong_i;
virStrToLong_ll;
virStrToLong_ull;

View File

@ -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,

View File

@ -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)

View File

@ -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);