Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-1.1
Commits
6d6fcaba
Commit
6d6fcaba
authored
Jan 06, 2010
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vlc_tdestroy: safe replacement for GNU tdestroy()
parent
812f6667
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
126 additions
and
1 deletion
+126
-1
configure.ac
configure.ac
+1
-1
include/vlc_common.h
include/vlc_common.h
+2
-0
include/vlc_fixups.h
include/vlc_fixups.h
+4
-0
src/Makefile.am
src/Makefile.am
+1
-0
src/extras/tdestroy.c
src/extras/tdestroy.c
+117
-0
src/libvlccore.sym
src/libvlccore.sym
+1
-0
No files found.
configure.ac
View file @
6d6fcaba
...
...
@@ -568,7 +568,7 @@ dnl Check for system libs needed
need_libc=false
dnl Check for usual libc functions
AC_CHECK_FUNCS([gettimeofday isatty getpwuid_r memalign posix_memalign getenv putenv setenv ctime_r daemon fork lstat posix_fadvise posix_madvise uselocale])
AC_CHECK_FUNCS([gettimeofday isatty getpwuid_r memalign posix_memalign getenv putenv setenv ctime_r daemon fork lstat posix_fadvise posix_madvise uselocale
tdestroy
])
AC_CHECK_FUNCS(fcntl)
AC_REPLACE_FUNCS([asprintf atof atoll getcwd getpid gmtime_r lldiv localtime_r rewind strcasecmp strcasestr strdup strlcpy strncasecmp strndup strnlen strsep strtof strtok_r strtoll vasprintf swab])
AC_CHECK_FUNCS([stricmp strnicmp])
...
...
include/vlc_common.h
View file @
6d6fcaba
...
...
@@ -818,6 +818,8 @@ VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char *const
/* dir wrappers (defined in src/extras/libc.c) */
VLC_EXPORT
(
int
,
vlc_wclosedir
,
(
void
*
_p_dir
));
VLC_EXPORT
(
void
,
vlc_tdestroy
,
(
void
*
,
void
(
*
)(
void
*
)
)
);
/* Fast large memory copy and memory set */
VLC_EXPORT
(
void
*
,
vlc_memcpy
,
(
void
*
,
const
void
*
,
size_t
)
);
VLC_EXPORT
(
void
*
,
vlc_memset
,
(
void
*
,
int
,
size_t
)
);
...
...
include/vlc_fixups.h
View file @
6d6fcaba
...
...
@@ -234,4 +234,8 @@ struct pollfd
# define poll(a, b, c) vlc_poll(a, b, c)
#endif
#ifndef HAVE_TDESTROY
# define tdestroy vlc_tdestroy
#endif
#endif
/* !LIBVLC_FIXUPS_H */
src/Makefile.am
View file @
6d6fcaba
...
...
@@ -441,6 +441,7 @@ SOURCES_libvlc_common = \
misc/update_crypto.c
\
misc/xml.c
\
extras/libc.c
\
extras/tdestroy.c
\
misc/filter.c
\
misc/filter_chain.c
\
misc/http_auth.c
\
...
...
src/extras/tdestroy.c
0 → 100644
View file @
6d6fcaba
/**
* @file tdestroy.c
* @brief replacement for GNU tdestroy()
*/
/*****************************************************************************
* Copyright (C) 2009 Rémi Denis-Courmont
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <assert.h>
#include <vlc_common.h>
#ifdef HAVE_TDESTROY
void
vlc_tdestroy
(
void
*
root
,
void
(
*
freenode
)
(
void
*
))
{
(
void
)
root
;
assert
(
freenode
!=
NULL
);
abort
();
}
#else
#include <search.h>
static
struct
{
const
void
**
tab
;
size_t
count
;
vlc_mutex_t
lock
;
}
list
=
{
NULL
,
0
,
VLC_STATIC_MUTEX
};
static
void
list_nodes
(
const
void
*
node
,
const
VISIT
which
,
const
int
depth
)
{
(
void
)
depth
;
if
(
which
!=
postorder
&&
which
!=
leaf
)
return
;
const
void
**
tab
=
realloc
(
list
.
tab
,
sizeof
(
*
tab
)
*
(
list
.
count
+
1
));
if
(
unlikely
(
tab
==
NULL
))
abort
();
tab
[
list
.
count
]
=
*
(
const
void
**
)
node
;
list
.
tab
=
tab
;
list
.
count
++
;
}
static
struct
{
const
void
*
node
;
vlc_mutex_t
lock
;
}
smallest
=
{
NULL
,
VLC_STATIC_MUTEX
};
static
int
cmp_smallest
(
const
void
*
a
,
const
void
*
b
)
{
if
(
a
==
b
)
return
0
;
if
(
a
==
smallest
.
node
)
return
-
1
;
if
(
likely
(
b
==
smallest
.
node
))
return
+
1
;
abort
();
}
void
vlc_tdestroy
(
void
*
root
,
void
(
*
freenode
)
(
void
*
))
{
const
void
**
tab
;
size_t
count
;
assert
(
freenode
!=
NULL
);
/* Enumerate nodes in order */
vlc_mutex_lock
(
&
list
.
lock
);
assert
(
list
.
count
==
0
);
twalk
(
root
,
list_nodes
);
tab
=
list
.
tab
;
count
=
list
.
count
;
list
.
tab
=
NULL
;
list
.
count
=
0
;
vlc_mutex_unlock
(
&
list
.
lock
);
/* Destroy the tree */
vlc_mutex_lock
(
&
smallest
.
lock
);
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
smallest
.
node
=
tab
[
i
];
if
(
tdelete
(
smallest
.
node
,
&
root
,
cmp_smallest
)
==
NULL
)
abort
();
}
vlc_mutex_unlock
(
&
smallest
.
lock
);
assert
(
root
==
NULL
);
/* Destroy the nodes */
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
freenode
((
void
*
)(
tab
[
i
]));
free
(
tab
);
}
#endif
src/libvlccore.sym
View file @
6d6fcaba
...
...
@@ -528,6 +528,7 @@ __vlc_object_set_destructor
vlc_object_get_name
vlc_plugin_set
vlc_poll
vlc_tdestroy
vlc_rand_bytes
vlc_release
vlc_restorecancel
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment