diff -U 3 -r nut-2.6.0.orig/drivers/main.c nut-2.6.0/drivers/main.c --- nut-2.6.0.orig/drivers/main.c 2011-02-08 12:57:11 +0200 +++ nut-2.6.0/drivers/main.c 2011-02-08 13:05:17 +0200 @@ -557,6 +557,19 @@ upsdebugx(1, "debug level is '%d'", nut_debug_level); + upsdrv_initups(); + + /* UPS is detected now, cleanup upon exit */ + atexit(upsdrv_cleanup); + + /* now see if things are very wrong out there */ + if (upsdrv_info.status == DRV_BROKEN) { + fatalx(EXIT_FAILURE, "Fatal error: broken driver. It probably needs to be converted.\n"); + } + + if (do_forceshutdown) + forceshutdown(); + new_uid = get_user_pwent(user); if (chroot_path) @@ -574,19 +587,6 @@ /* clear out callback handler data */ memset(&upsh, '\0', sizeof(upsh)); - upsdrv_initups(); - - /* UPS is detected now, cleanup upon exit */ - atexit(upsdrv_cleanup); - - /* now see if things are very wrong out there */ - if (upsdrv_info.status == DRV_BROKEN) { - fatalx(EXIT_FAILURE, "Fatal error: broken driver. It probably needs to be converted.\n"); - } - - if (do_forceshutdown) - forceshutdown(); - /* note: device.type is set early to be overriden by the driver * when its a pdu! */ dstate_setinfo("device.type", "ups");