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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? parser.pm

?? wireshark 0.99.7 最新源碼
?? PM
?? 第 1 頁 / 共 5 頁
字號:
#################################################### 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("}");	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜欧美一区二区三区在线播放| 亚洲视频在线一区观看| 欧美无人高清视频在线观看| 风间由美一区二区三区在线观看| 国产麻豆视频精品| 国内精品嫩模私拍在线| 国产精品一区三区| 成人午夜视频在线观看| 94-欧美-setu| 在线观看国产精品网站| 欧美日韩黄色影视| 日韩一级高清毛片| 久久久一区二区| 国产欧美精品一区二区色综合| 中日韩av电影| 一区二区三区日韩在线观看| 亚洲第一福利视频在线| 全国精品久久少妇| 精品在线免费观看| 成人动漫一区二区三区| 色成人在线视频| 91精品国产欧美一区二区成人| 精品电影一区二区三区| 国产午夜精品一区二区三区四区| 亚洲国产成人午夜在线一区| 亚洲人成影院在线观看| 三级欧美韩日大片在线看| 国内成人免费视频| 99久久99久久精品免费观看| 在线不卡免费av| 26uuu国产一区二区三区 | 一区二区日韩电影| 肉肉av福利一精品导航| 成人午夜在线免费| 制服丝袜亚洲色图| 中文字幕一区二区三区蜜月| 婷婷久久综合九色国产成人| 国产高清精品久久久久| 欧美日韩一区高清| 国产精品系列在线| 欧美aaaaaa午夜精品| 91在线视频免费91| 精品播放一区二区| 亚洲chinese男男1069| 风流少妇一区二区| 日韩视频一区二区| 一区二区日韩电影| 成人福利在线看| 精品国产乱码久久久久久久久| 亚洲欧美视频在线观看视频| 韩国三级电影一区二区| 欧美日本韩国一区二区三区视频| 色综合久久中文综合久久97| 2019国产精品| 欧美伦理电影网| 国产精品拍天天在线| 麻豆国产精品官网| 欧美日韩视频一区二区| 亚洲精品一二三区| 成人黄色在线网站| 国产亚洲美州欧州综合国| 男男成人高潮片免费网站| 在线免费观看日本一区| 日本一区二区成人| 国产乱码精品一区二区三区av| 777奇米四色成人影色区| 亚洲图片欧美一区| 在线视频国内自拍亚洲视频| 中文字幕在线一区免费| 成人久久久精品乱码一区二区三区 | 国产精品久久影院| 激情亚洲综合在线| 日韩欧美国产麻豆| 蜜臀精品一区二区三区在线观看| 欧美性一二三区| 午夜精品福利一区二区三区av| 91久久奴性调教| 亚洲免费观看视频| 99久久99久久精品免费观看| 亚洲视频网在线直播| 一本色道**综合亚洲精品蜜桃冫| 亚洲桃色在线一区| 欧美亚洲图片小说| 亚洲一区二区精品视频| 欧美伦理影视网| 久久99精品国产.久久久久| 精品国产sm最大网站| 国产一区二区三区最好精华液| 久久欧美一区二区| 99热精品一区二区| 亚洲午夜私人影院| 日韩你懂的在线观看| 国产成都精品91一区二区三| 综合久久国产九一剧情麻豆| 欧美三级韩国三级日本一级| 免费视频最近日韩| 国产日韩在线不卡| 91官网在线免费观看| 日韩国产一二三区| 欧美国产97人人爽人人喊| 99精品视频在线免费观看| 亚洲综合另类小说| 精品久久久久久久久久久久久久久久久| 国产一区在线视频| 一区二区三区资源| 精品国产精品网麻豆系列| 成人av网在线| 奇米影视一区二区三区| 国产精品免费av| 正在播放一区二区| 不卡一区在线观看| 日韩黄色一级片| 国产精品久久福利| 91精品国产综合久久精品图片| 国产成人aaaa| 免费看黄色91| 亚洲蜜桃精久久久久久久| 欧美成人一区二区三区| 91色乱码一区二区三区| 国产自产视频一区二区三区 | 在线亚洲一区二区| 狠狠色综合日日| 午夜精品成人在线视频| 欧美激情自拍偷拍| 欧美一区二区三区人| 在线这里只有精品| 成人精品小蝌蚪| 国产在线精品视频| 日韩二区在线观看| 一区二区不卡在线播放| 国产精品天干天干在观线| 欧美xxxxx裸体时装秀| 欧美色男人天堂| 色婷婷国产精品综合在线观看| 精品中文字幕一区二区| 日本在线不卡一区| 亚洲一区二区三区中文字幕| 国产精品美女www爽爽爽| 精品成人佐山爱一区二区| 欧美美女bb生活片| 欧美日韩国产成人在线免费| 色综合久久久久久久久久久| bt欧美亚洲午夜电影天堂| 国产精品77777| 国产一区二区三区在线观看免费 | 中文字幕精品一区二区精品绿巨人| 欧美tickling网站挠脚心| 欧美高清视频不卡网| 色8久久精品久久久久久蜜| 99精品国产一区二区三区不卡| 国产东北露脸精品视频| 精品一区二区三区视频| 精品一区二区三区在线播放视频| 视频一区中文字幕国产| 美女看a上一区| 国产最新精品免费| 成人免费黄色大片| eeuss鲁一区二区三区| 99re这里只有精品视频首页| 97成人超碰视| 欧洲另类一二三四区| 欧美日本国产视频| 日韩欧美中文字幕精品| 26uuuu精品一区二区| 欧美国产一区在线| 亚洲图片激情小说| 亚洲1区2区3区视频| 奇米四色…亚洲| 粉嫩欧美一区二区三区高清影视| 国产99久久久国产精品| 色综合中文综合网| ●精品国产综合乱码久久久久| 1024精品合集| 日本伊人精品一区二区三区观看方式 | 91蝌蚪porny成人天涯| 在线免费观看成人短视频| 91麻豆精品国产91久久久资源速度| 日韩一区二区三区av| 中文字幕精品综合| 亚洲一区二区中文在线| 久久精品久久综合| 99免费精品在线观看| 4438x成人网最大色成网站| 26uuu欧美日本| 亚洲一区二区在线免费看| 91免费视频大全| 欧美成人免费网站| 亚洲日本电影在线| 麻豆精品在线看| 色婷婷久久久亚洲一区二区三区| 欧美一区二区在线视频| 日韩一区在线免费观看| 免费看日韩精品| 一本色道久久综合亚洲精品按摩| 91精品久久久久久久久99蜜臂| 国产精品萝li| 久久99精品一区二区三区三区| 91网站黄www| 亚洲精品一区在线观看| 亚洲h在线观看|