forked from Bananymous/banan-os
				
			LibC/Kernel: Implement ttyname_r
This commit is contained in:
		
							parent
							
								
									e72e1e4e43
								
							
						
					
					
						commit
						cc04bd0f06
					
				|  | @ -176,7 +176,7 @@ namespace Kernel | ||||||
| 		BAN::ErrorOr<long> sys_smo_delete(SharedMemoryObjectManager::Key); | 		BAN::ErrorOr<long> sys_smo_delete(SharedMemoryObjectManager::Key); | ||||||
| 		BAN::ErrorOr<long> sys_smo_map(SharedMemoryObjectManager::Key); | 		BAN::ErrorOr<long> sys_smo_map(SharedMemoryObjectManager::Key); | ||||||
| 
 | 
 | ||||||
| 		BAN::ErrorOr<long> sys_ttyname(int fildes, char* storage); | 		BAN::ErrorOr<long> sys_ttyname(int fildes, char* name, size_t namesize); | ||||||
| 		BAN::ErrorOr<long> sys_isatty(int fildes); | 		BAN::ErrorOr<long> sys_isatty(int fildes); | ||||||
| 		BAN::ErrorOr<long> sys_posix_openpt(int flags); | 		BAN::ErrorOr<long> sys_posix_openpt(int flags); | ||||||
| 		BAN::ErrorOr<long> sys_ptsname(int fildes, char* buffer, size_t buffer_len); | 		BAN::ErrorOr<long> sys_ptsname(int fildes, char* buffer, size_t buffer_len); | ||||||
|  |  | ||||||
|  | @ -2275,17 +2275,17 @@ namespace Kernel | ||||||
| 		return m_mapped_regions.back()->vaddr(); | 		return m_mapped_regions.back()->vaddr(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	BAN::ErrorOr<long> Process::sys_ttyname(int fildes, char* storage) | 	BAN::ErrorOr<long> Process::sys_ttyname(int fildes, char* name, size_t namesize) | ||||||
| 	{ | 	{ | ||||||
| 		LockGuard _(m_process_lock); | 		LockGuard _(m_process_lock); | ||||||
| 		TRY(validate_pointer_access(storage, TTY_NAME_MAX, true)); | 		TRY(validate_pointer_access(name, namesize, true)); | ||||||
| 		auto inode = TRY(m_open_file_descriptors.inode_of(fildes)); | 		auto inode = TRY(m_open_file_descriptors.inode_of(fildes)); | ||||||
| 		if (!inode->is_tty()) | 		if (!inode->is_tty()) | ||||||
| 			return BAN::Error::from_errno(ENOTTY); | 			return BAN::Error::from_errno(ENOTTY); | ||||||
| 		auto path = TRY(m_open_file_descriptors.path_of(fildes)); | 		auto path = TRY(m_open_file_descriptors.path_of(fildes)); | ||||||
| 		ASSERT(path.size() < TTY_NAME_MAX); | 		if (namesize < path.size() + 1) | ||||||
| 		strncpy(storage, path.data(), path.size()); | 			return BAN::Error::from_errno(ERANGE); | ||||||
| 		storage[path.size()] = '\0'; | 		strcpy(name, path.data()); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -787,12 +787,19 @@ char* getlogin(void) | ||||||
| 
 | 
 | ||||||
| char* ttyname(int fildes) | char* ttyname(int fildes) | ||||||
| { | { | ||||||
| 	static char storage[_POSIX_TTY_NAME_MAX]; | 	static char storage[TTY_NAME_MAX]; | ||||||
| 	if (syscall(SYS_TTYNAME, fildes, storage) == -1) | 	if (ttyname_r(fildes, storage, sizeof(storage)) != 0) | ||||||
| 		return nullptr; | 		return nullptr; | ||||||
| 	return storage; | 	return storage; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | int ttyname_r(int fildes, char* name, size_t namesize) | ||||||
|  | { | ||||||
|  | 	if (syscall(SYS_TTYNAME, fildes, name, namesize)) | ||||||
|  | 		return errno; | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int access(const char* path, int amode) | int access(const char* path, int amode) | ||||||
| { | { | ||||||
| 	return syscall(SYS_ACCESS, path, amode); | 	return syscall(SYS_ACCESS, path, amode); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue