[libvirt] PATCH: 10/25: Remove use of strerror()
Jim Meyering
jim at meyering.net
Mon Jan 19 10:40:56 UTC 2009
"Daniel P. Berrange" <berrange at redhat.com> wrote:
> The strerror() method is not guarenteed to be re-entrant, which is
> rather a pain because the strerror_r() method is rather unpleasant
...
Good work.
A couple of small problems and a question:
...
> @@ -614,8 +618,9 @@ int main(int argc, char *argv[])
>
> if (pid > 0) {
> if ((rc = virFileWritePid(LXC_STATE_DIR, name, pid)) != 0) {
> - fprintf(stderr, _("Unable to write pid file: %s\n"),
> - strerror(rc));
> + virReportSystemError(NULL, errno,
> + _("Unable to write pid file '%s/%s.pid'"),
> + LXC_STATE_DIR, name);
> _exit(1);
> }
>
Looks like that should be "rc", not "errno".
...
> @@ -471,9 +474,9 @@ networkAddMasqueradingIptablesRules(virC
> network->def->network,
> network->def->bridge,
> network->def->forwardDev))) {
> - networkReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> - _("failed to add iptables rule to allow forwarding to '%s' : %s\n"),
> - network->def->bridge, strerror(err));
> + virReportSystemError(conn, err,
> + _("failed to add iptables rule to allow forwarding to '%s'"),
> + network->def->bridge);
> goto masqerr2;
> }
>
There's a stray trailing newline, above.
Obviously it was there before your changes, too.
...
> @@ -3455,23 +3452,23 @@ static int qemudDomainSetAutostart(virDo
> int err;
>
> if ((err = virFileMakePath(driver->autostartDir))) {
> - qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
> - _("cannot create autostart directory %s: %s"),
> - driver->autostartDir, strerror(err));
> + virReportSystemError(dom->conn, errno,
> + _("cannot create autostart directory %s"),
> + driver->autostartDir);
I think you want to retain the use of "err", above,
since virFileMakePath maps a missing / to EINVAL.
> diff --git a/src/remote_internal.c b/src/remote_internal.c
> diff --git a/src/storage_conf.c b/src/storage_conf.c
> --- a/src/storage_conf.c
> +++ b/src/storage_conf.c
> @@ -43,6 +43,8 @@
> #include "util.h"
> #include "memory.h"
>
> +#define VIR_FROM_THIS VIR_FROM_STORAGE
> +
> /* Work around broken limits.h on debian etch */
> #if defined __GNUC__ && defined _GCC_LIMITS_H_ && ! defined ULLONG_MAX
> # define ULLONG_MAX ULONG_LONG_MAX
> @@ -1405,9 +1407,9 @@ virStoragePoolObjSaveDef(virConnectPtr c
> char path[PATH_MAX];
>
> if ((err = virFileMakePath(driver->configDir))) {
> - virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR,
> - _("cannot create config directory %s: %s"),
> - driver->configDir, strerror(err));
> + virStorageReportError(conn, errno,
> + _("cannot create config directory %s"),
> + driver->configDir);
Same here.
Incidentally, virFileMakePath will have to go, eventually. Not only
is it recursive in the number of components of the name being created,
but allocating PATH_MAX for each stack frame is very wasteful, and might
make it easy to blow the stack/DoS -- if there's a way to make libvirtd
call it with an abusive argument. Worst still, it creates directories
with mkdir(path, 0777). No virFileMakePath caller is careful to chmod
_all_ of the possibly-just-created directories, and even if they all were,
there'd still be a race.
...
> diff --git a/src/test.c b/src/test.c
...
> @@ -336,7 +339,7 @@ static int testOpenFromFile(virConnectPt
> virDomainObjPtr dom;
> testConnPtr privconn;
> if (VIR_ALLOC(privconn) < 0) {
> - testError(NULL, VIR_ERR_NO_MEMORY, "testConn");
> + virReportOOMError(conn);
I don't remember the rules for NULL vs non-NULL conn.
Is this s/NULL/conn/ transform valid?
I think there's one more like it.
More information about the libvir-list
mailing list