mpd/src/daemon.h
Michal Nazarewicz bfed1c04cc daemon: daemonize_close_stdin() optimised.
Changed function to first close standard input (this may
fail but we don't care) and then try to open /dev/null (this
may fail but it shouldn't on Unix platforms plus we don't
know what to do in such case anyways).  Since standard input
has the "zeroth" descriptor number next "open" will use it.

Since there is no "/dev/null" on Windows (It's not even
a valid path!) the second step is skipped if WIN32 is
defined.

As a final touch, since the function consists of merely two
function calls it has been moved to header file and declared
static inline.

[mk: un-inline daemonize_close_stdin()]
2009-07-22 13:43:21 +02:00

89 lines
1.9 KiB
C

/*
* Copyright (C) 2003-2009 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef DAEMON_H
#define DAEMON_H
#include <stdbool.h>
#ifndef WIN32
void
daemonize_init(const char *user, const char *group, const char *pidfile);
#else
static inline void
daemonize_init(const char *user, const char *group, const char *pidfile)
{ (void)user; (void)group; (void)pidfile; }
#endif
#ifndef WIN32
void
daemonize_finish(void);
#else
static inline void
daemonize_finish(void)
{ /* nop */ }
#endif
/**
* Kill the MPD which is currently running, pid determined from the
* pid file.
*/
#ifndef WIN32
void
daemonize_kill(void);
#else
static inline void
daemonize_kill(void)
{ g_error("--kill is not available on WIN32"); }
#endif
/**
* Close stdin (fd 0) and re-open it as /dev/null.
*/
#ifndef WIN32
void
daemonize_close_stdin(void);
#else
static inline void
daemonize_close_stdin(void) {}
#endif
/**
* Change to the configured Unix user.
*/
#ifndef WIN32
void
daemonize_set_user(void);
#else
static inline void
daemonize_set_user(void)
{ /* nop */ }
#endif
#ifndef WIN32
void
daemonize(bool detach);
#else
static inline void
daemonize(bool detach)
{ (void)detach; }
#endif
#endif