亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? parser.pm

?? wireshark 0.99.7 最新源碼
?? PM
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
#################################################### Samba4 NDR parser generator for IDL structures# Copyright tridge@samba.org 2000-2003# Copyright tpot@samba.org 2001# Copyright jelmer@samba.org 2004-2006# released under the GNU GPLpackage Parse::Pidl::Samba4::NDR::Parser;require Exporter;@ISA = qw(Exporter);@EXPORT_OK = qw(check_null_pointer GenerateFunctionInEnv GenerateFunctionOutEnv EnvSubstituteValue GenerateStructEnv NeededFunction NeededElement NeededType $res NeededInterface TypeFunctionName ParseElementPrint);use strict;use Parse::Pidl::Typelist qw(hasType getType mapTypeName);use Parse::Pidl::Util qw(has_property ParseExpr ParseExprExt print_uuid);use Parse::Pidl::NDR qw(GetPrevLevel GetNextLevel ContainsDeferred);use Parse::Pidl::Samba4 qw(is_intree choose_header);use Parse::Pidl qw(warning);use vars qw($VERSION);$VERSION = '0.01';# list of known typesmy %typefamily;sub new($$) {	my ($class) = @_;	my $self = { res => "", res_hdr => "", deferred => [], tabs => "", defer_tabs => "" };	bless($self, $class);}sub get_typefamily($){	my $n = shift;	return $typefamily{$n};}sub append_prefix($$){	my ($e, $var_name) = @_;	my $pointers = 0;	foreach my $l (@{$e->{LEVELS}}) {		if ($l->{TYPE} eq "POINTER") {			$pointers++;		} elsif ($l->{TYPE} eq "ARRAY") {			if (($pointers == 0) and 			    (not $l->{IS_FIXED}) and			    (not $l->{IS_INLINE})) {				return get_value_of($var_name); 			}		} elsif ($l->{TYPE} eq "DATA") {			if (Parse::Pidl::Typelist::scalar_is_reference($l->{DATA_TYPE})) {				return get_value_of($var_name) unless ($pointers);			}		}	}		return $var_name;}sub has_fast_array($$){	my ($e,$l) = @_;	return 0 if ($l->{TYPE} ne "ARRAY");	my $nl = GetNextLevel($e,$l);	return 0 unless ($nl->{TYPE} eq "DATA");	return 0 unless (hasType($nl->{DATA_TYPE}));	my $t = getType($nl->{DATA_TYPE});	# Only uint8 and string have fast array functions at the moment	return ($t->{NAME} eq "uint8") or ($t->{NAME} eq "string");}sub is_charset_array($$){	my ($e,$l) = @_;	return 0 if ($l->{TYPE} ne "ARRAY");	my $nl = GetNextLevel($e,$l);	return 0 unless ($nl->{TYPE} eq "DATA");	return has_property($e, "charset");}sub get_pointer_to($){	my $var_name = shift;		if ($var_name =~ /^\*(.*)$/) {		return $1;	} elsif ($var_name =~ /^\&(.*)$/) {		return "&($var_name)";	} else {		return "&$var_name";	}}sub get_value_of($){	my $var_name = shift;	if ($var_name =~ /^\&(.*)$/) {		return $1;	} else {		return "*$var_name";	}}##################################### pidl() is our basic output routinesub pidl($$){	my ($self, $d) = @_;	if ($d) {		$self->{res} .= $self->{tabs};		$self->{res} .= $d;	}	$self->{res} .="\n";}sub pidl_hdr($$) { my ($self, $d) = @_; $self->{res_hdr} .= "$d\n"; }##################################### defer() is like pidl(), but adds to # a deferred buffer which is then added to the # output buffer at the end of the structure/union/function# This is needed to cope with code that must be pushed back# to the end of a block of elementssub defer_indent($) { my ($self) = @_; $self->{defer_tabs}.="\t"; }sub defer_deindent($) { my ($self) = @_; $self->{defer_tabs}=substr($self->{defer_tabs}, 0, -1); }sub defer($$){	my ($self, $d) = @_;	if ($d) {		push(@{$self->{deferred}}, $self->{defer_tabs}.$d);	}}######################################### add the deferred content to the current# outputsub add_deferred($){	my ($self) = @_;	$self->pidl($_) foreach (@{$self->{deferred}});	$self->{deferred} = [];	$self->{defer_tabs} = "";}sub indent($){	my ($self) = @_;	$self->{tabs} .= "\t";}sub deindent($){	my ($self) = @_;	$self->{tabs} = substr($self->{tabs}, 0, -1);}###################################################################### declare a function public or static, depending on its attributessub fn_declare($$$$){	my ($self,$type,$fn,$decl) = @_;	if (has_property($fn, "no$type")) {		$self->pidl_hdr("$decl;");		return 0;	}	if (has_property($fn, "public")) {		$self->pidl_hdr("$decl;");		$self->pidl("_PUBLIC_ $decl");	} else {		$self->pidl("static $decl");	}	return 1;}#################################################################### setup any special flags for an element or structuresub start_flags($$){	my ($self, $e) = @_;	my $flags = has_property($e, "flag");	if (defined $flags) {		$self->pidl("{");		$self->indent;		$self->pidl("uint32_t _flags_save_$e->{TYPE} = ndr->flags;");		$self->pidl("ndr_set_flags(&ndr->flags, $flags);");	}}#################################################################### end any special flags for an element or structuresub end_flags($$){	my ($self, $e) = @_;	my $flags = has_property($e, "flag");	if (defined $flags) {		$self->pidl("ndr->flags = _flags_save_$e->{TYPE};");		$self->deindent;		$self->pidl("}");	}}sub GenerateStructEnv($$){	my ($x, $v) = @_;	my %env;	foreach my $e (@{$x->{ELEMENTS}}) {		$env{$e->{NAME}} = "$v->$e->{NAME}";	}	$env{"this"} = $v;	return \%env;}sub EnvSubstituteValue($$){	my ($env,$s) = @_;	# Substitute the value() values in the env	foreach my $e (@{$s->{ELEMENTS}}) {		next unless (defined(my $v = has_property($e, "value")));				$env->{$e->{NAME}} = ParseExpr($v, $env, $e);	}	return $env;}sub GenerateFunctionInEnv($;$){	my ($fn, $base) = @_;	my %env;	$base = "r->" unless defined($base);	foreach my $e (@{$fn->{ELEMENTS}}) {		if (grep (/in/, @{$e->{DIRECTION}})) {			$env{$e->{NAME}} = $base."in.$e->{NAME}";		}	}	return \%env;}sub GenerateFunctionOutEnv($;$){	my ($fn, $base) = @_;	my %env;	$base = "r->" unless defined($base);	foreach my $e (@{$fn->{ELEMENTS}}) {		if (grep (/out/, @{$e->{DIRECTION}})) {			$env{$e->{NAME}} = $base."out.$e->{NAME}";		} elsif (grep (/in/, @{$e->{DIRECTION}})) {			$env{$e->{NAME}} = $base."in.$e->{NAME}";		}	}	return \%env;}###################################################################### parse the data of an array - push sidesub ParseArrayPushHeader($$$$$$){	my ($self,$e,$l,$ndr,$var_name,$env) = @_;	my $size;	my $length;	if ($l->{IS_ZERO_TERMINATED}) {		if (has_property($e, "charset")) {			$size = $length = "ndr_charset_length($var_name, CH_$e->{PROPERTIES}->{charset})";		} else {			$size = $length = "ndr_string_length($var_name, sizeof(*$var_name))";		}	} else {		$size = ParseExpr($l->{SIZE_IS}, $env, $e);		$length = ParseExpr($l->{LENGTH_IS}, $env, $e);	}	if ((!$l->{IS_SURROUNDING}) and $l->{IS_CONFORMANT}) {		$self->pidl("NDR_CHECK(ndr_push_uint32($ndr, NDR_SCALARS, $size));");	}		if ($l->{IS_VARYING}) {		$self->pidl("NDR_CHECK(ndr_push_uint32($ndr, NDR_SCALARS, 0));");  # array offset		$self->pidl("NDR_CHECK(ndr_push_uint32($ndr, NDR_SCALARS, $length));");	} 	return $length;}sub check_fully_dereferenced($$){	my ($element, $env) = @_;	return sub ($) {		my $origvar = shift;		my $check = 0;		# Figure out the number of pointers in $ptr		my $expandedvar = $origvar;		$expandedvar =~ s/^(\**)//;		my $ptr = $1;		my $var = undef;		foreach (keys %$env) {			if ($env->{$_} eq $expandedvar) {				$var = $_;				last;			}		}				return($origvar) unless (defined($var));		my $e;		foreach (@{$element->{PARENT}->{ELEMENTS}}) {			if ($_->{NAME} eq $var) {				$e = $_;				last;			}		}		$e or die("Environment doesn't match siblings");		# See if pointer at pointer level $level		# needs to be checked.		my $nump = 0;		foreach (@{$e->{LEVELS}}) {			if ($_->{TYPE} eq "POINTER") {				$nump = $_->{POINTER_INDEX}+1;			}		}		warning($element->{ORIGINAL}, "Got pointer for `$e->{NAME}', expected fully derefenced variable") if ($nump > length($ptr));		return ($origvar);	}}	sub check_null_pointer($$$$){	my ($element, $env, $print_fn, $return) = @_;	return sub ($) {		my $expandedvar = shift;		my $check = 0;		# Figure out the number of pointers in $ptr		$expandedvar =~ s/^(\**)//;		my $ptr = $1;		my $var = undef;		foreach (keys %$env) {			if ($env->{$_} eq $expandedvar) {				$var = $_;				last;			}		}				if (defined($var)) {			my $e;			# lookup ptr in $e			foreach (@{$element->{PARENT}->{ELEMENTS}}) {				if ($_->{NAME} eq $var) {					$e = $_;					last;				}			}			$e or die("Environment doesn't match siblings");			# See if pointer at pointer level $level			# needs to be checked.			foreach my $l (@{$e->{LEVELS}}) {				if ($l->{TYPE} eq "POINTER" and 					$l->{POINTER_INDEX} == length($ptr)) {					# No need to check ref pointers					$check = ($l->{POINTER_TYPE} ne "ref");					last;				}				if ($l->{TYPE} eq "DATA") {					warning($element, "too much dereferences for `$var'");				}			}		} else {			warning($element, "unknown dereferenced expression `$expandedvar'");			$check = 1;		}				$print_fn->("if ($ptr$expandedvar == NULL) $return") if $check;	}}###################################################################### parse an array - pull sidesub ParseArrayPullHeader($$$$$$){	my ($self,$e,$l,$ndr,$var_name,$env) = @_;	my $length;	my $size;	if ($l->{IS_CONFORMANT}) {		$length = $size = "ndr_get_array_size($ndr, " . get_pointer_to($var_name) . ")";	} elsif ($l->{IS_ZERO_TERMINATED}) { # Noheader arrays		$length = $size = "ndr_get_string_size($ndr, sizeof(*$var_name))";	} else {		$length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},			check_null_pointer($e, $env, sub { $self->pidl(shift); },					   "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),			check_fully_dereferenced($e, $env));	}	if ((!$l->{IS_SURROUNDING}) and $l->{IS_CONFORMANT}) {		$self->pidl("NDR_CHECK(ndr_pull_array_size(ndr, " . get_pointer_to($var_name) . "));");	}	if ($l->{IS_VARYING}) {		$self->pidl("NDR_CHECK(ndr_pull_array_length($ndr, " . get_pointer_to($var_name) . "));");		$length = "ndr_get_array_length($ndr, " . get_pointer_to($var_name) .")";	}	if ($length ne $size) {		$self->pidl("if ($length > $size) {");		$self->indent;		$self->pidl("return ndr_pull_error($ndr, NDR_ERR_ARRAY_SIZE, \"Bad array size %u should exceed array length %u\", $size, $length);");		$self->deindent;		$self->pidl("}");	}	if ($l->{IS_CONFORMANT} and not $l->{IS_ZERO_TERMINATED}) {		$self->defer("if ($var_name) {");		$self->defer_indent;		my $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL},			check_null_pointer($e, $env, sub { $self->defer(shift); },					   "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for size_is()\");"),			check_fully_dereferenced($e, $env));		$self->defer("NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));");		$self->defer_deindent;		$self->defer("}");	}	if ($l->{IS_VARYING} and not $l->{IS_ZERO_TERMINATED}) {		$self->defer("if ($var_name) {");		$self->defer_indent;		my $length = ParseExprExt($l->{LENGTH_IS}, $env, $e->{ORIGINAL}, 			check_null_pointer($e, $env, sub { $self->defer(shift); },					   "return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, \"NULL Pointer for length_is()\");"),			check_fully_dereferenced($e, $env));		$self->defer("NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));");		$self->defer_deindent;		$self->defer("}");	}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利一区二区三区视频 | 国产精品久久久久久久久久久免费看| 成人丝袜18视频在线观看| 亚洲一区在线观看视频| 日韩精品一区二| 欧美自拍偷拍午夜视频| 韩国欧美国产一区| 亚洲午夜在线观看视频在线| 中文子幕无线码一区tr| 91精品在线观看入口| 色婷婷综合久色| 国产精品一二三在| 日本不卡中文字幕| 亚洲欧美日韩电影| 久久亚洲捆绑美女| 91超碰这里只有精品国产| 99精品视频一区二区三区| 国产风韵犹存在线视精品| 午夜电影一区二区三区| 亚洲精品国久久99热| 欧美精彩视频一区二区三区| 日韩一级欧美一级| 日韩欧美三级在线| 欧美午夜精品久久久| 成人午夜在线播放| 国产精品一区二区免费不卡| 日韩精品一区第一页| 亚洲欧美激情在线| 中文字幕在线一区免费| 国产亚洲精品精华液| 精品99一区二区三区| 制服丝袜av成人在线看| 欧美天天综合网| 欧美午夜不卡视频| 一本久道久久综合中文字幕| 99国产精品久久久| 99久久综合精品| caoporn国产一区二区| 国产裸体歌舞团一区二区| 久久不见久久见免费视频7| 丝袜亚洲另类欧美| 日韩av电影天堂| 天堂成人国产精品一区| 亚洲bt欧美bt精品| 婷婷丁香激情综合| 日本美女一区二区三区| 日韩黄色小视频| 久热成人在线视频| 黑人精品欧美一区二区蜜桃| 狠狠狠色丁香婷婷综合激情| 国产乱色国产精品免费视频| 国产精品 欧美精品| 国产超碰在线一区| 99精品视频在线免费观看| 色综合久久综合中文综合网| 在线欧美小视频| 欧美日韩第一区日日骚| 欧美一区二区三区婷婷月色| 欧美电影免费提供在线观看| 精品91自产拍在线观看一区| 欧美国产成人在线| 亚洲日本成人在线观看| 香蕉久久一区二区不卡无毒影院| 亚洲第一在线综合网站| 免费日韩伦理电影| 国产成人精品aa毛片| av在线这里只有精品| 在线免费精品视频| 3d成人动漫网站| 久久先锋资源网| 中文字幕一区二区不卡| 性欧美大战久久久久久久久| 久久精品理论片| 91久久精品网| 日韩一级完整毛片| 国产精品女同一区二区三区| 亚洲狼人国产精品| 秋霞电影网一区二区| 国产精品一区二区91| 一本久久综合亚洲鲁鲁五月天| 91麻豆精品国产91久久久久| 久久久综合网站| 一区二区视频在线| 久久精品国产77777蜜臀| 99国产精品国产精品久久| 欧美日韩一区 二区 三区 久久精品| 91精品国产福利在线观看| 国产欧美1区2区3区| 亚洲成人动漫一区| 成人黄色大片在线观看| 制服视频三区第一页精品| 欧美高清一级片在线观看| 亚洲va国产va欧美va观看| 岛国av在线一区| 欧美一区二区三区免费观看视频| 中文字幕一区二区三区在线不卡| 日韩电影在线一区二区三区| 99国产一区二区三精品乱码| 日韩欧美一级精品久久| 亚洲理论在线观看| 国产999精品久久久久久| 欧美一区二区视频免费观看| 成人欧美一区二区三区小说| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日韩国产一二三| 中文字幕精品一区二区三区精品| 亚洲1区2区3区4区| aa级大片欧美| 久久久综合网站| 日韩—二三区免费观看av| 日本伦理一区二区| 欧美国产欧美综合| 麻豆精品一二三| 欧美日韩国产经典色站一区二区三区| 欧美国产国产综合| 精品系列免费在线观看| 欧美日本精品一区二区三区| 国产精品国产三级国产普通话三级| 麻豆极品一区二区三区| 欧美日韩国产系列| 一区二区三区四区乱视频| 成人18精品视频| 国产午夜精品在线观看| 精品在线播放免费| 欧美一区二区三区视频在线| 亚洲一级电影视频| 色欧美日韩亚洲| |精品福利一区二区三区| 国产 欧美在线| 久久久久久久国产精品影院| 美女网站一区二区| 欧美草草影院在线视频| 日本三级亚洲精品| 日韩三级视频在线看| 免费成人深夜小野草| 欧美一区国产二区| 欧美aⅴ一区二区三区视频| 欧美日韩一区在线观看| 一区二区三区精品在线观看| 91麻豆文化传媒在线观看| 中文字幕在线不卡视频| 91亚洲永久精品| 亚洲一区欧美一区| 欧美日韩精品欧美日韩精品 | 狠狠色丁香婷综合久久| 欧美电影免费观看高清完整版在线 | 蓝色福利精品导航| 欧美一区二区播放| 蜜臀久久久久久久| 精品久久久久久久久久久久包黑料| 蓝色福利精品导航| www国产精品av| 懂色av一区二区在线播放| 亚洲欧洲av色图| 欧洲亚洲精品在线| 日韩国产欧美一区二区三区| 精品欧美一区二区久久| 国产不卡免费视频| 亚洲精品日日夜夜| 欧美精选一区二区| 国内不卡的二区三区中文字幕| 国产午夜久久久久| 91精品1区2区| 日韩高清一区在线| 国产亚洲欧洲997久久综合 | 色综合激情五月| 亚洲成在人线在线播放| 欧美电影免费观看高清完整版在线 | 成人精品免费看| 一区二区三区高清在线| 91精品国产综合久久蜜臀| 韩国av一区二区三区在线观看| 亚洲国产精品精华液2区45| 色激情天天射综合网| 麻豆成人在线观看| 中文字幕一区二区三区视频| 欧美三级视频在线| 国产一区二区网址| 亚洲日本中文字幕区| 欧美一区二区三区在线观看| 国产福利91精品一区二区三区| 亚洲欧美色一区| 欧美mv日韩mv| 91亚洲精品久久久蜜桃| 蜜乳av一区二区三区| 中文字幕日韩欧美一区二区三区| 欧美日韩亚洲综合一区二区三区| 精品一区二区久久久| 亚洲精品免费在线观看| 精品国产免费久久 | 精品美女在线观看| 91同城在线观看| 韩国av一区二区三区| 亚洲另类中文字| 久久人人超碰精品| 欧美日韩精品系列| caoporm超碰国产精品| 久久国产福利国产秒拍| 亚洲六月丁香色婷婷综合久久| ww久久中文字幕|