mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 06:35:24 +00:00
e74fa5702a
https://bugs.gentoo.org/show_bug.cgi?id=508336 At wireshark, they have this promise to change public dissector APIs only with minor version number change. Which they did when releasing the version of 1.12. Firstly, they've changed tvb_memdup() in a0c53ffaa1bb46d8c9db2ec739401aa411c9790e so now it takes four arguments instead of three. The new argument is placed at the very beginning of the list of arguments and basically says the scope where we'd like to allocate the memory. According to the documentation NULL should be the default value. Then, the tcp_dissect_pdus() signature changed too. Well, the function that actually dissects reassembled packets as tcp_dissect_pdus() reorder TCP packets into one big chunk and then calls a user function to dissect the PDU at once. The change is dated back to 8081cf1d90397cbbb4404f9720595e1537ed5e14. Then, WS_DLL_PUBLIC_NOEXTERN was replaced with WS_DLL_PUBLIC_DEF in 5d87a8c46171f572568db5a47c093423482e342f. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
206 lines
5.3 KiB
Bash
Executable File
206 lines
5.3 KiB
Bash
Executable File
#! /bin/sh
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# 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 General Public License
|
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Copied from Wireshark(http://www.wireshark.org/)
|
|
|
|
#
|
|
# The first argument is the directory in which the source files live.
|
|
#
|
|
srcdir="$1"
|
|
shift
|
|
|
|
#
|
|
# The second argument is either "plugin" or "dissectors"; if it's
|
|
# "plugin", we build a plugin.c for a plugin, and if it's
|
|
# "dissectors", we build a register.c for libwireshark.
|
|
#
|
|
registertype="$1"
|
|
shift
|
|
if [ "$registertype" = plugin ]
|
|
then
|
|
outfile="plugin.c"
|
|
elif [ "$registertype" = dissectors ]
|
|
then
|
|
outfile="register.c"
|
|
else
|
|
echo "Unknown output type '$registertype'" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# All subsequent arguments are the files to scan.
|
|
#
|
|
rm -f ${outfile}-tmp
|
|
echo '/* Do not modify this file. */' >${outfile}-tmp
|
|
echo '/* It is created automatically by the Makefile. */'>>${outfile}-tmp
|
|
if [ "$registertype" = plugin ]
|
|
then
|
|
cat <<"EOF" >>${outfile}-tmp
|
|
#include "config.h"
|
|
|
|
#include <gmodule.h>
|
|
|
|
/* plugins are DLLs */
|
|
#define WS_BUILD_DLL
|
|
#include "ws_symbol_export.h"
|
|
|
|
/* In 1.12 wireshark WS_DLL_PUBLIC_NOEXTERN was substitued with
|
|
* WS_DLL_PUBLIC_DEF. See wireshark's commit
|
|
* 5d87a8c46171f572568db5a47c093423482e342f for more info. */
|
|
#ifndef WS_DLL_PUBLIC_NOEXTERN
|
|
# define WS_DLL_PUBLIC_NOEXTERN WS_DLL_PUBLIC_DEF
|
|
#endif
|
|
|
|
#ifndef ENABLE_STATIC
|
|
WS_DLL_PUBLIC_NOEXTERN const gchar version[] = VERSION;
|
|
|
|
/* Start the functions we need for the plugin stuff */
|
|
|
|
WS_DLL_PUBLIC_NOEXTERN void
|
|
plugin_register (void)
|
|
{
|
|
EOF
|
|
#
|
|
# Build code to call all the protocol registration routines.
|
|
#
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^void proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
|
|
else
|
|
cat <<"EOF" >>${outfile}-tmp
|
|
#include "register.h"
|
|
void
|
|
register_all_protocols(register_cb cb, gpointer client_data)
|
|
{
|
|
EOF
|
|
#
|
|
# Build code to call all the protocol registration routines.
|
|
#
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (void); if(cb) (*cb)(RA_REGISTER, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^void proto_register_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/ {extern void \1 (void); if(cb) (*cb)(RA_REGISTER, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
|
|
|
|
fi
|
|
echo '}' >>${outfile}-tmp
|
|
|
|
|
|
#
|
|
# Build code to call all the protocol handoff registration routines.
|
|
#
|
|
if [ "$registertype" = plugin ]
|
|
then
|
|
cat <<"EOF" >>${outfile}-tmp
|
|
WS_DLL_PUBLIC_NOEXTERN void
|
|
plugin_reg_handoff(void)
|
|
{
|
|
EOF
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^void proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/ {extern void \1 (void); \1 ();}/' >>${outfile}-tmp
|
|
else
|
|
cat <<"EOF" >>${outfile}-tmp
|
|
void
|
|
register_all_protocol_handoffs(register_cb cb, gpointer client_data)
|
|
{
|
|
EOF
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (void); if(cb) (*cb)(RA_HANDOFF, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
|
|
for f in "$@"
|
|
do
|
|
if [ -f $f ]
|
|
then
|
|
srcfile=$f
|
|
else
|
|
srcfile=$srcdir/$f
|
|
fi
|
|
grep '^void proto_reg_handoff_[a-z_0-9A-Z]* *(' $srcfile 2>/dev/null | grep -v ';'
|
|
done | sed -e 's/^.*://' -e 's/^void \([a-z_0-9A-Z]*\).*/ {extern void \1 (void); if(cb) (*cb)(RA_HANDOFF, \"\1\", client_data); \1 ();}/' >>${outfile}-tmp
|
|
fi
|
|
echo '}' >>${outfile}-tmp
|
|
if [ "$registertype" = plugin ]
|
|
then
|
|
echo '#endif' >>${outfile}-tmp
|
|
else
|
|
cat <<"EOF" >>${outfile}-tmp
|
|
gulong register_count(void)
|
|
{
|
|
EOF
|
|
proto_regs=`grep RA_REGISTER ${outfile}-tmp | wc -l`
|
|
handoff_regs=`grep RA_HANDOFF ${outfile}-tmp | wc -l`
|
|
echo " return $proto_regs + $handoff_regs;" >>${outfile}-tmp
|
|
echo '}' >>${outfile}-tmp
|
|
fi
|
|
|
|
# Only overwrite outfile if it differs from newly generated file
|
|
mv ${outfile}-tmp ${outfile}
|