|
Packit |
5e46da |
/*
|
|
Packit |
5e46da |
* This file is part of libbluray
|
|
Packit |
5e46da |
* Copyright (C) 2010 hpi1
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is free software; you can redistribute it and/or
|
|
Packit |
5e46da |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License as published by the Free Software Foundation; either
|
|
Packit |
5e46da |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
5e46da |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
5e46da |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
5e46da |
* Lesser General Public License for more details.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License along with this library. If not, see
|
|
Packit |
5e46da |
* <http://www.gnu.org/licenses/>.
|
|
Packit |
5e46da |
*/
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#if HAVE_CONFIG_H
|
|
Packit |
5e46da |
#include "config.h"
|
|
Packit |
5e46da |
#endif
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include "pes_buffer.h"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include "util/macro.h"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include <stdlib.h>
|
|
Packit |
5e46da |
#include <string.h>
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
PES_BUFFER *pes_buffer_alloc(void)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
PES_BUFFER *p = calloc(1, sizeof(*p));
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
return p;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
void pes_buffer_free(PES_BUFFER **p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
if (p && *p) {
|
|
Packit |
5e46da |
if ((*p)->next) {
|
|
Packit |
5e46da |
pes_buffer_free(&(*p)->next);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
X_FREE ((*p)->buf);
|
|
Packit |
5e46da |
X_FREE (*p);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
void pes_buffer_append(PES_BUFFER **head, PES_BUFFER *buf)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
if (!head) {
|
|
Packit |
5e46da |
return;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (!*head) {
|
|
Packit |
5e46da |
*head = buf;
|
|
Packit |
5e46da |
return;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (buf) {
|
|
Packit |
5e46da |
PES_BUFFER *tail = *head;
|
|
Packit |
5e46da |
for (; tail->next; tail = tail->next) ;
|
|
Packit |
5e46da |
tail->next = buf;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static PES_BUFFER *_prev_buffer(PES_BUFFER *head, PES_BUFFER *buf)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
while (head) {
|
|
Packit |
5e46da |
if (head->next == buf) {
|
|
Packit |
5e46da |
return head;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
head = head->next;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
return NULL;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
void pes_buffer_remove(PES_BUFFER **head, PES_BUFFER *p)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
if (head && *head && p) {
|
|
Packit |
5e46da |
if (*head == p) {
|
|
Packit |
5e46da |
*head = (*head)->next;
|
|
Packit |
5e46da |
p->next = NULL;
|
|
Packit |
5e46da |
pes_buffer_free(&p);
|
|
Packit |
5e46da |
} else {
|
|
Packit |
5e46da |
PES_BUFFER *prev = _prev_buffer(*head, p);
|
|
Packit |
5e46da |
if (prev) {
|
|
Packit |
5e46da |
prev->next = p->next;
|
|
Packit |
5e46da |
p->next = NULL;
|
|
Packit |
5e46da |
pes_buffer_free(&p);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
void pes_buffer_next(PES_BUFFER **head)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
if (head && *head) {
|
|
Packit |
5e46da |
PES_BUFFER *p = *head;
|
|
Packit |
5e46da |
*head = (*head)->next;
|
|
Packit |
5e46da |
p->next = NULL;
|
|
Packit |
5e46da |
pes_buffer_free(&p);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|