root/src/system/kernel/shutdown.cpp
/*
 * Copyright 2009, Olivier Coursière. All rights reserved.
 * Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
 * Distributed under the terms of the MIT License.
 */


#include <kernel.h>
#include <syscalls.h>


status_t
system_shutdown(bool reboot)
{
        int32 cookie = 0;
        team_info info;
        
        gKernelShutdown = true;
        
        // Now shutdown all system services!
        // TODO: Once we are sure we can shutdown the system on all hardware
        // checking reboot may not be necessary anymore.
        if (reboot) {
                while (get_next_team_info(&cookie, &info) == B_OK) {
                        if (info.team == B_SYSTEM_TEAM)
                                continue;
                        kill_team(info.team);
                }
        }
        
        sync();

        return arch_cpu_shutdown(reboot);
}


//      #pragma mark -


status_t
_user_shutdown(bool reboot)
{
        if (geteuid() != 0)
                return B_NOT_ALLOWED;
        return system_shutdown(reboot);
}