ÿØÿà JFIF  ` ` ÿþš 403 WEBHELL REBORN
403 WEBHELL REBORN
Server : Apache
System : Linux cloud.heroica.com.br 4.18.0-553.36.1.el8_10.x86_64 #1 SMP Wed Jan 22 03:07:54 EST 2025 x86_64
User : farolpborg ( 1053)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /usr/src/file_protector-1.1-1578/transport/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

Buat Folder Baru:
Buat File Baru:

Current File : //usr/src/file_protector-1.1-1578/transport/ring.h
/**
@file
@brief    'ring' or 'circular' buffer
@details  Copyright (c) 2021 Acronis International GmbH
@author   Mikhail Krivtsov (mikhail.krivtsov@acronis.com)
@since    $Id: $
*/

#pragma once

#include <linux/atomic.h>
#include <linux/types.h>	// bool, [u]int(8|16|32|64)_t, pid_t, size_t
#ifdef KERNEL_MOCK
#include <mock/mock.h>
#endif

typedef struct {
	void *buffer;
	size_t item_size;
	int capacity;
	// 'count' is marked as atomic because it might be called from 'wait_event*' call without taking a spinlock
	atomic_t count;
	int count_max;
	int producer_index;
	int consumer_index;
} ring_t;

static inline
void ring_init(ring_t *ring, void *buffer, size_t buffer_size, size_t item_size)
{
	ring->buffer = buffer;
	ring->item_size = item_size;
	ring->capacity = buffer_size / item_size;
	atomic_set(&ring->count, 0);
	ring->count_max = 0;
	ring->producer_index = 0;
	ring->consumer_index = 0;
}

static inline
void *ring_buffer(ring_t *ring)
{
	return ring->buffer;
}

static inline
int ring_capacity(ring_t *ring)
{
	return ring->capacity;
}

static inline
void ring_producer_index_move(ring_t *ring, int items)
{
	int count;
	ring->producer_index = (ring->producer_index + items) % ring->capacity;
	count = atomic_add_return(items, &ring->count);
	if (ring->count_max < count) {
		ring->count_max = count;
	}
}

static inline
void ring_producer_index_move_one(ring_t *ring)
{
	ring_producer_index_move(ring, 1);
}

static inline
void *ring_producer_ptr(ring_t *ring)
{
	return (void *) (ring->producer_index * ring->item_size + (char *)ring->buffer);
}

static inline
void ring_consumer_index_move(ring_t *ring, int items)
{
	ring->consumer_index = (ring->consumer_index + items) % ring->capacity;
	atomic_sub(items, &ring->count);
}

static inline
void ring_consumer_index_move_one(ring_t *ring)
{
	ring_consumer_index_move(ring, 1);
}

static inline
void *ring_consumer_ptr(ring_t *ring)
{
	return (void *) (ring->consumer_index * ring->item_size + (char *)ring->buffer);
}

static inline
int ring_items_count(ring_t *ring)
{
	return atomic_read(&ring->count);
}

static inline
int ring_items_count_max(ring_t *ring)
{
	return ring->count_max;
}

static inline
bool ring_is_empty(ring_t *ring)
{
	return !ring_items_count(ring);
}

static inline
bool ring_is_full(ring_t *ring)
{
	return ring_items_count(ring) >= ring->capacity;
}

Anon7 - 2021