Serenity Operating System
at master 55 lines 1.4 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/Types.h> 8#include <Kernel/Process.h> 9 10namespace Kernel { 11 12ErrorOr<FlatPtr> Process::sys$getpid() 13{ 14 VERIFY_NO_PROCESS_BIG_LOCK(this); 15 TRY(require_promise(Pledge::stdio)); 16 return pid().value(); 17} 18 19ErrorOr<FlatPtr> Process::sys$getppid() 20{ 21 VERIFY_NO_PROCESS_BIG_LOCK(this); 22 TRY(require_promise(Pledge::stdio)); 23 return ppid().value(); 24} 25 26ErrorOr<FlatPtr> Process::sys$get_process_name(Userspace<char*> buffer, size_t buffer_size) 27{ 28 VERIFY_NO_PROCESS_BIG_LOCK(this); 29 TRY(require_promise(Pledge::stdio)); 30 31 TRY(m_name.with([&buffer, buffer_size](auto& name) -> ErrorOr<void> { 32 if (name->length() + 1 > buffer_size) 33 return ENAMETOOLONG; 34 35 return copy_to_user(buffer, name->characters(), name->length() + 1); 36 })); 37 38 return 0; 39} 40 41ErrorOr<FlatPtr> Process::sys$set_process_name(Userspace<char const*> user_name, size_t user_name_length) 42{ 43 VERIFY_NO_PROCESS_BIG_LOCK(this); 44 TRY(require_promise(Pledge::proc)); 45 if (user_name_length > 256) 46 return ENAMETOOLONG; 47 auto name = TRY(try_copy_kstring_from_user(user_name, user_name_length)); 48 // Empty and whitespace-only names only exist to confuse users. 49 if (name->view().is_whitespace()) 50 return EINVAL; 51 set_name(move(name)); 52 return 0; 53} 54 55}