Sindbad~EG File Manager

Current Path : /usr/src/file_protector-1.1-1494/
Upload File :
Current File : //usr/src/file_protector-1.1-1494/task_info_map.h

/**
@file
@brief    Process (aka task) info storage
@details  Copyright (c) 2017-2021 Acronis International GmbH
@author   Ivan Matveev (ivan.matveev@acronis.com)
@since    $Id: $
*/

#pragma once

#include "transport_protocol.h" // task_status_t

#include <linux/path.h>
#include <linux/rbtree.h>
#include <linux/spinlock.h>
#include <linux/types.h>  // bool

typedef struct {
	struct rb_node rb_node;
	pid_t pid;

	atomic_t ref_cnt;
	spinlock_t spinlock;

	task_status_t status;
	struct path exe_path;

	struct list_head exited_list_item;
} task_info_t;

const char *task_status_to_string(task_status_t status);
task_info_t *task_info_ref(task_info_t *info);
void task_info_unref(task_info_t *info);

int task_info_map_init(void);
void task_info_map_down(void);
void task_info_map_clear(void);

// if not found return NULL
task_info_t *task_info_lookup(pid_t pid);
task_info_t *task_info_get(pid_t pid);

// errors:
// 1. ENOMEM - alloc failed
// 2. EINVAL - task_info with sutch pid already exist
// on success return 0
int task_info_map_add(pid_t pid, task_status_t status, struct path exe_path);
// Same as task_info_map_add(), but before call should call 'task_info_map_lock()'
int task_info_map_add_impl(pid_t pid, task_status_t status, struct path exe_path);

int task_info_map_del(pid_t pid);

// =========================  useful wrappers  ========================= //

// if pid not found return TS_UNKNOWN
task_status_t task_info_status_get(pid_t pid);

// create task_info struct if needed
// errors:
// 1. ENOMEM - alloc failed
// 2. ENOENT - no such pid or task_struct without executable file
// 3. EINVAL - task_info with sutch pid already exist - synchronisation broken
int task_info_status_set(pid_t pid, task_status_t status);

void task_info_map_delete_exited(void);
void task_info_map_on_exit_event(pid_t tgid, pid_t pid);

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists