Document return values
[ACE_TAO.git] / ACE / ace / Process.inl
blob4b742af07e495e121899e1a375600a76ac6be7e8
1 // -*- C++ -*-
2 #include "ace/ACE.h"
3 #include "ace/OS_NS_sys_wait.h"
4 #include "ace/OS_NS_signal.h"
5 #include "ace/OS_NS_pwd.h"
6 #include "ace/OS_NS_string.h"
8 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
10 ACE_INLINE void
11 ACE_Process_Options::enable_unicode_environment ()
13   this->use_unicode_environment_ = true;
16 ACE_INLINE void
17 ACE_Process_Options::disable_unicode_environment ()
19   this->use_unicode_environment_ = false;
22 ACE_INLINE bool
23 ACE_Process_Options::use_unicode_environment () const
25   return this->use_unicode_environment_;
28 #if defined (ACE_WIN32)
30 ACE_INLINE PROCESS_INFORMATION
31 ACE_Process::process_info ()
33   return process_info_;
35 #endif /* ACE_WIN32 */
37 ACE_INLINE ACE_HANDLE
38 ACE_Process::gethandle () const
40 #if defined (ACE_WIN32)
41   return process_info_.hProcess;
42 #else
43   return ACE_HANDLE (child_id_);
44 #endif /* ACE_WIN32 */
47 ACE_INLINE pid_t
48 ACE_Process::getpid () const
50 #if defined (ACE_WIN32)
51   return process_info_.dwProcessId;
52 #else /* ACE_WIN32 */
53   return child_id_;
54 #endif /* ACE_WIN32 */
57 ACE_INLINE pid_t
58 ACE_Process::wait (ACE_exitcode *status,
59                    int wait_options)
61   pid_t retv =
62     ACE_OS::wait (this->getpid (),
63                   &this->exit_code_,
64                   wait_options
65 #if defined (ACE_WIN32)
66                   , process_info_.hProcess
67 #endif /* ACE_WIN32 */
68                   );
69   if (status != 0)
70     *status = this->exit_code_;
72   return retv;
75 ACE_INLINE int
76 ACE_Process::kill (int signum)
78   if (this->getpid () != -1)
79     return ACE_OS::kill (this->getpid (), signum);
80   else
81     return -1;
84 ACE_INLINE int
85 ACE_Process::terminate ()
87   if (this->getpid () != -1)
88     return ACE::terminate_process (this->getpid ());
89   else
90     return -1;
93 ACE_INLINE int
94 ACE_Process::return_value () const
96 #if defined (ACE_WIN32)
97   return this->exit_code_;
98 #else
99   return WEXITSTATUS (this->exit_code_);
100 #endif /* ACE_WIN32 */
103 ACE_INLINE ACE_exitcode
104 ACE_Process::exit_code () const
106   return this->exit_code_;
109 ACE_INLINE void
110 ACE_Process::exit_code (ACE_exitcode code)
112   this->exit_code_ = code;
115 ACE_INLINE u_long
116 ACE_Process_Options::creation_flags () const
118 #if defined (ACE_USES_WCHAR) && defined (ACE_WIN32)
119   return creation_flags_ | CREATE_UNICODE_ENVIRONMENT;
120 #else
121   return creation_flags_;
122 #endif /* ACE_USES_WCHAR */
125 ACE_INLINE void
126 ACE_Process_Options::creation_flags (u_long cf)
128   creation_flags_ = cf;
131 ACE_INLINE pid_t
132 ACE_Process_Options::getgroup () const
134   return process_group_;
137 ACE_INLINE pid_t
138 ACE_Process_Options::setgroup (pid_t pgrp)
140   pid_t old = process_group_;
141   process_group_ = pgrp;
142   return old;
145 ACE_INLINE int
146 ACE_Process_Options::handle_inheritance ()
148   return handle_inheritance_;
151 ACE_INLINE void
152 ACE_Process_Options::handle_inheritance (int hi)
154   handle_inheritance_ = hi;
157 ACE_INLINE int
158 ACE_Process_Options::avoid_zombies ()
160   return avoid_zombies_;
162 ACE_INLINE void
163 ACE_Process_Options::avoid_zombies (int avoid_zombies)
165   avoid_zombies_ = avoid_zombies;
168 #if defined (ACE_WIN32)
170 ACE_INLINE ACE_TEXT_STARTUPINFO *
171 ACE_Process_Options::startup_info ()
173   return &startup_info_;
176 ACE_INLINE LPSECURITY_ATTRIBUTES
177 ACE_Process_Options::get_process_attributes () const
179   return process_attributes_;
182 ACE_INLINE LPSECURITY_ATTRIBUTES
183 ACE_Process_Options::set_process_attributes ()
185   process_attributes_ = &security_buf1_;
186   return process_attributes_;
189 ACE_INLINE LPSECURITY_ATTRIBUTES
190 ACE_Process_Options::get_thread_attributes () const
192   return thread_attributes_;
195 ACE_INLINE LPSECURITY_ATTRIBUTES
196 ACE_Process_Options::set_thread_attributes ()
198   thread_attributes_ = &security_buf2_;
199   return thread_attributes_;
202 ACE_INLINE HANDLE ACE_Process_Options::get_user_token () const
204   return user_token_;
207 #else /* !defined (ACE_WIN32) */
209 ACE_INLINE ACE_HANDLE
210 ACE_Process_Options::get_stdin () const
212   return stdin_;
215 ACE_INLINE ACE_HANDLE
216 ACE_Process_Options::get_stdout () const
218   return stdout_;
221 ACE_INLINE ACE_HANDLE
222 ACE_Process_Options::get_stderr () const
224   return stderr_;
227 ACE_INLINE bool
228 ACE_Process_Options::inherit_environment () const
230   return inherit_environment_;
233 ACE_INLINE void
234 ACE_Process_Options::inherit_environment (bool nv)
236   inherit_environment_ = nv;
239 ACE_INLINE int
240 ACE_Process_Options::setreugid (const ACE_TCHAR* user)
242 #if !defined (ACE_LACKS_PWD_FUNCTIONS)
243   struct passwd *ent = ACE_OS::getpwnam (ACE_TEXT_ALWAYS_CHAR (user));
245   if (ent != 0)
246     {
247       this->euid_ = ent->pw_uid;
248       this->ruid_ = ent->pw_uid;
249       this->egid_ = ent->pw_gid;
250       this->rgid_ = ent->pw_gid;
251       return 0;
252     }
253   else
254     return -1;
255 #else
256   ACE_UNUSED_ARG (user);
257   ACE_NOTSUP_RETURN (-1);
258 #endif /* ACE_LACKS_PWD_FUNCTIONS */
261 ACE_INLINE void
262 ACE_Process_Options::setruid (uid_t id)
264   this->ruid_ = id;
267 ACE_INLINE void
268 ACE_Process_Options::seteuid (uid_t id)
270   this->euid_ = id;
273 ACE_INLINE void
274 ACE_Process_Options::setrgid (gid_t id)
276   this->rgid_ = id;
279 ACE_INLINE void
280 ACE_Process_Options::setegid (gid_t id)
282   this->egid_ = id;
285 ACE_INLINE uid_t
286 ACE_Process_Options::getruid () const
288   return this->ruid_;
291 ACE_INLINE uid_t
292 ACE_Process_Options::geteuid () const
294   return this->euid_;
297 ACE_INLINE gid_t
298 ACE_Process_Options::getrgid () const
300   return this->rgid_;
303 ACE_INLINE gid_t
304 ACE_Process_Options::getegid () const
306   return this->egid_;
308 #endif /* ACE_WIN32 */
310 ACE_INLINE ACE_TCHAR *
311 ACE_Process_Options::command_line_buf (size_t *max_lenp)
313   if (max_lenp != 0)
314     *max_lenp = this->command_line_buf_len_;
315   return this->command_line_buf_;
318 ACE_INLINE ACE_TCHAR *
319 ACE_Process_Options::working_directory ()
321   if (working_directory_[0] == '\0')
322     return 0;
323   else
324     return working_directory_;
327 ACE_INLINE void
328 ACE_Process_Options::working_directory (const char *wd)
330   ACE_OS::strcpy (working_directory_, ACE_TEXT_CHAR_TO_TCHAR (wd));
333 #if defined (ACE_HAS_WCHAR)
334 ACE_INLINE void
335 ACE_Process_Options::working_directory (const wchar_t *wd)
337   ACE_OS::strcpy (working_directory_, ACE_TEXT_WCHAR_TO_TCHAR (wd));
339 #endif /* ACE_HAS_WCHAR */
341 ACE_INLINE void
342 ACE_Process_Options::process_name (const ACE_TCHAR *p)
344   ACE_OS::strcpy (this->process_name_, p);
347 ACE_INLINE const ACE_TCHAR *
348 ACE_Process_Options::process_name ()
350   if (process_name_[0] == '\0')
351     this->process_name (this->command_line_argv ()[0]);
353   return this->process_name_;
356 ACE_END_VERSIONED_NAMESPACE_DECL