On Fri, Feb 13, 2009 at 12:06:12PM +0000, Mark McLoughlin wrote: > Re-factor the code from networkEnableIpForwarding() into a > utility function in preparation for code which writes to > sysfs files. > > Signed-off-by: Mark McLoughlin <markmc@xxxxxxxxxx> > --- > src/libvirt_private.syms | 1 + > src/network_driver.c | 26 ++------------------------ > src/util.c | 24 ++++++++++++++++++++++++ > src/util.h | 2 ++ > 4 files changed, 29 insertions(+), 24 deletions(-) > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 4338da7..9e9b3e5 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -279,6 +279,7 @@ virCondBroadcast; > > # util.h > virFileReadAll; > +virFileWriteStr; > virStrToLong_i; > virStrToLong_ll; > virStrToLong_ull; > diff --git a/src/network_driver.c b/src/network_driver.c > index 4138939..b256e3d 100644 > --- a/src/network_driver.c > +++ b/src/network_driver.c > @@ -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, > diff --git a/src/util.c b/src/util.c > index 01fe37a..990433a 100644 > --- a/src/util.c > +++ b/src/util.c > @@ -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) > diff --git a/src/util.h b/src/util.h > index 4667b92..a79cfa7 100644 > --- a/src/util.h > +++ b/src/util.h > @@ -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); > -- ACK. You might like to make virCgroupSetValueStr() use this new method too, since it has more or less this same exact code. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list