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

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

?? hush.c

?? 手機嵌入式Linux下可用的busybox源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
					export_me=1;				}				free(name);				p = insert_var_value(child->argv[i]);				set_local_var(p, export_me);				if (p != child->argv[i]) free(p);			}			return EXIT_SUCCESS;   /* don't worry about errors in set_local_var() yet */		}		for (i = 0; is_assignment(child->argv[i]); i++) {			p = insert_var_value(child->argv[i]);			putenv(strdup(p));			if (p != child->argv[i]) {				child->sp--;				free(p);			}		}		if (child->sp) {			char * str = NULL;						str = make_string((child->argv + i));			parse_string_outer(str, FLAG_EXIT_FROM_LOOP | FLAG_REPARSING);			free(str);			return last_return_code;		}		for (x = bltins; x->cmd; x++) {			if (strcmp(child->argv[i], x->cmd) == 0 ) {				int squirrel[] = {-1, -1, -1};				int rcode;				if (x->function == builtin_exec && child->argv[i+1]==NULL) {					debug_printf("magic exec\n");					setup_redirects(child,NULL);					return EXIT_SUCCESS;				}				debug_printf("builtin inline %s\n", child->argv[0]);				/* XXX setup_redirects acts on file descriptors, not FILEs.				 * This is perfect for work that comes after exec().				 * Is it really safe for inline use?  Experimentally,				 * things seem to work with glibc. */				setup_redirects(child, squirrel);				child->argv+=i;  /* XXX horrible hack */				rcode = x->function(child);				child->argv-=i;  /* XXX restore hack so free() can work right */				restore_redirects(squirrel);				return rcode;			}		}	}	for (i = 0; i < pi->num_progs; i++) {		child = & (pi->progs[i]);		/* pipes are inserted between pairs of commands */		if ((i + 1) < pi->num_progs) {			if (pipe(pipefds)<0) perror_msg_and_die("pipe");			nextout = pipefds[1];		} else {			nextout=1;			pipefds[0] = -1;		}		/* XXX test for failed fork()? */		if (!(child->pid = fork()))		{			/* Set the handling for job control signals back to the default.  */			signal(SIGINT, SIG_DFL);			signal(SIGQUIT, SIG_DFL);			signal(SIGTERM, SIG_DFL);			signal(SIGTSTP, SIG_DFL);			signal(SIGTTIN, SIG_DFL);			signal(SIGTTOU, SIG_DFL);			signal(SIGCHLD, SIG_DFL);						close_all();			if (nextin != 0) {				dup2(nextin, 0);				close(nextin);			}			if (nextout != 1) {				dup2(nextout, 1);				close(nextout);			}			if (pipefds[0]!=-1) {				close(pipefds[0]);  /* opposite end of our output pipe */			}			/* Like bash, explicit redirects override pipes,			 * and the pipe fd is available for dup'ing. */			setup_redirects(child,NULL);			if (interactive && pi->followup!=PIPE_BG) {				/* If we (the child) win the race, put ourselves in the process				 * group whose leader is the first process in this pipe. */				if (pi->pgrp < 0) {					pi->pgrp = getpid();				}				if (setpgid(0, pi->pgrp) == 0) {					tcsetpgrp(2, pi->pgrp);				}			}			pseudo_exec(child);		}				/* put our child in the process group whose leader is the		   first process in this pipe */		if (pi->pgrp < 0) {			pi->pgrp = child->pid;		}		/* Don't check for errors.  The child may be dead already,		 * in which case setpgid returns error code EACCES. */		setpgid(child->pid, pi->pgrp);		if (nextin != 0)			close(nextin);		if (nextout != 1)			close(nextout);		/* If there isn't another process, nextin is garbage 		   but it doesn't matter */		nextin = pipefds[0];	}	return -1;}static int run_list_real(struct pipe *pi){	char *save_name = NULL;	char **list = NULL;	char **save_list = NULL;	struct pipe *rpipe;	int flag_rep = 0;	int save_num_progs;	int rcode=0, flag_skip=1;	int flag_restore = 0;	int if_code=0, next_if_code=0;  /* need double-buffer to handle elif */	reserved_style rmode, skip_more_in_this_rmode=RES_XXXX;	/* check syntax for "for" */	for (rpipe = pi; rpipe; rpipe = rpipe->next) {		if ((rpipe->r_mode == RES_IN ||		    rpipe->r_mode == RES_FOR) &&		    (rpipe->next == NULL)) {				syntax();				return 1;		}				if ((rpipe->r_mode == RES_IN && 			(rpipe->next->r_mode == RES_IN && 			rpipe->next->progs->argv != NULL))||			(rpipe->r_mode == RES_FOR &&			rpipe->next->r_mode != RES_IN)) { 				syntax();				return 1;		}	}	for (; pi; pi = (flag_restore != 0) ? rpipe : pi->next) {		if (pi->r_mode == RES_WHILE || pi->r_mode == RES_UNTIL ||			pi->r_mode == RES_FOR) {				flag_restore = 0;				if (!rpipe) {					flag_rep = 0;					rpipe = pi;				}		}		rmode = pi->r_mode;		debug_printf("rmode=%d  if_code=%d  next_if_code=%d skip_more=%d\n", rmode, if_code, next_if_code, skip_more_in_this_rmode);		if (rmode == skip_more_in_this_rmode && flag_skip) {			if (pi->followup == PIPE_SEQ) flag_skip=0;			continue;		}		flag_skip = 1;		skip_more_in_this_rmode = RES_XXXX;		if (rmode == RES_THEN || rmode == RES_ELSE) if_code = next_if_code;		if (rmode == RES_THEN &&  if_code) continue;		if (rmode == RES_ELSE && !if_code) continue;		if (rmode == RES_ELIF && !if_code) continue;		if (rmode == RES_FOR && pi->num_progs) {			if (!list) {				/* if no variable values after "in" we skip "for" */						if (!pi->next->progs->argv) continue;				/* create list of variable values */				list = make_list_in(pi->next->progs->argv,					pi->progs->argv[0]);				save_list = list;				save_name = pi->progs->argv[0];				pi->progs->argv[0] = NULL;				flag_rep = 1;			}				if (!(*list)) {				free(pi->progs->argv[0]);				free(save_list);				list = NULL;				flag_rep = 0;				pi->progs->argv[0] = save_name;				pi->progs->glob_result.gl_pathv[0] =					pi->progs->argv[0];				continue;			} else {							/* insert new value from list for variable */				if (pi->progs->argv[0]) 					free(pi->progs->argv[0]);				pi->progs->argv[0] = *list++;				pi->progs->glob_result.gl_pathv[0] =					pi->progs->argv[0];			}		}				if (rmode == RES_IN) continue;		if (rmode == RES_DO) {			if (!flag_rep) continue;		}	    		if ((rmode == RES_DONE)) {			if (flag_rep) {				flag_restore = 1;			} else {				rpipe = NULL;			}		}				if (pi->num_progs == 0) continue;		save_num_progs = pi->num_progs; /* save number of programs */		rcode = run_pipe_real(pi);		debug_printf("run_pipe_real returned %d\n",rcode);		if (rcode!=-1) {			/* We only ran a builtin: rcode was set by the return value			 * of run_pipe_real(), and we don't need to wait for anything. */		} else if (pi->followup==PIPE_BG) {			/* XXX check bash's behavior with nontrivial pipes */			/* XXX compute jobid */			/* XXX what does bash do with attempts to background builtins? */			insert_bg_job(pi);			rcode = EXIT_SUCCESS;		} else {			if (interactive) {				/* move the new process group into the foreground */				if (tcsetpgrp(shell_terminal, pi->pgrp) && errno != ENOTTY)					perror_msg("tcsetpgrp-3");				rcode = checkjobs(pi);				/* move the shell to the foreground */				if (tcsetpgrp(shell_terminal, getpgid(0)) && errno != ENOTTY)					perror_msg("tcsetpgrp-4");			} else {				rcode = checkjobs(pi);			}			debug_printf("checkjobs returned %d\n",rcode);		}		last_return_code=rcode;		pi->num_progs = save_num_progs; /* restore number of programs */		if ( rmode == RES_IF || rmode == RES_ELIF )			next_if_code=rcode;  /* can be overwritten a number of times */		if (rmode == RES_WHILE) 			flag_rep = !last_return_code;		if (rmode == RES_UNTIL) 			flag_rep = last_return_code;		if ( (rcode==EXIT_SUCCESS && pi->followup==PIPE_OR) ||		     (rcode!=EXIT_SUCCESS && pi->followup==PIPE_AND) )			skip_more_in_this_rmode=rmode;		checkjobs(NULL);	}	return rcode;}/* broken, of course, but OK for testing */static char *indenter(int i){	static char blanks[]="                                    ";	return &blanks[sizeof(blanks)-i-1];}/* return code is the exit status of the pipe */static int free_pipe(struct pipe *pi, int indent){	char **p;	struct child_prog *child;	struct redir_struct *r, *rnext;	int a, i, ret_code=0;	char *ind = indenter(indent);	if (pi->stopped_progs > 0)		return ret_code;	final_printf("%s run pipe: (pid %d)\n",ind,getpid());	for (i=0; i<pi->num_progs; i++) {		child = &pi->progs[i];		final_printf("%s  command %d:\n",ind,i);		if (child->argv) {			for (a=0,p=child->argv; *p; a++,p++) {				final_printf("%s   argv[%d] = %s\n",ind,a,*p);			}			globfree(&child->glob_result);			child->argv=NULL;		} else if (child->group) {			final_printf("%s   begin group (subshell:%d)\n",ind, child->subshell);			ret_code = free_pipe_list(child->group,indent+3);			final_printf("%s   end group\n",ind);		} else {			final_printf("%s   (nil)\n",ind);		}		for (r=child->redirects; r; r=rnext) {			final_printf("%s   redirect %d%s", ind, r->fd, redir_table[r->type].descrip);			if (r->dup == -1) {				/* guard against the case >$FOO, where foo is unset or blank */				if (r->word.gl_pathv) {					final_printf(" %s\n", *r->word.gl_pathv);					globfree(&r->word);				}			} else {				final_printf("&%d\n", r->dup);			}			rnext=r->next;			free(r);		}		child->redirects=NULL;	}	free(pi->progs);   /* children are an array, they get freed all at once */	pi->progs=NULL;	return ret_code;}static int free_pipe_list(struct pipe *head, int indent){	int rcode=0;   /* if list has no members */	struct pipe *pi, *next;	char *ind = indenter(indent);	for (pi=head; pi; pi=next) {		final_printf("%s pipe reserved mode %d\n", ind, pi->r_mode);		rcode = free_pipe(pi, indent);		final_printf("%s pipe followup code %d\n", ind, pi->followup);		next=pi->next;		pi->next=NULL;		free(pi);	}	return rcode;	}/* Select which version we will use */static int run_list(struct pipe *pi){	int rcode=0;	if (fake_mode==0) {		rcode = run_list_real(pi);	} 	/* free_pipe_list has the side effect of clearing memory	 * In the long run that function can be merged with run_list_real,	 * but doing that now would hobble the debugging effort. */	free_pipe_list(pi,0);	return rcode;}/* The API for glob is arguably broken.  This routine pushes a non-matching * string into the output structure, removing non-backslashed backslashes. * If someone can prove me wrong, by performing this function within the * original glob(3) api, feel free to rewrite this routine into oblivion. * Return code (0 vs. GLOB_NOSPACE) matches glob(3). * XXX broken if the last character is '\\', check that before calling. */static int globhack(const char *src, int flags, glob_t *pglob){	int cnt=0, pathc;	const char *s;	char *dest;	for (cnt=1, s=src; s && *s; s++) {		if (*s == '\\') s++;		cnt++;	}	dest = malloc(cnt);	if (!dest) return GLOB_NOSPACE;	if (!(flags & GLOB_APPEND)) {		pglob->gl_pathv=NULL;		pglob->gl_pathc=0;		pglob->gl_offs=0;		pglob->gl_offs=0;	}	pathc = ++pglob->gl_pathc;	pglob->gl_pathv = realloc(pglob->gl_pathv, (pathc+1)*sizeof(*pglob->gl_pathv));	if (pglob->gl_pathv == NULL) return GLOB_NOSPACE;	pglob->gl_pathv[pathc-1]=dest;	pglob->gl_pathv[pathc]=NULL;	for (s=src; s && *s; s++, dest++) {		if (*s == '\\') s++;		*dest = *s;	}	*dest='\0';	return 0;}/* XXX broken if the last character is '\\', check that before calling */static int glob_needed(const char *s){	for (; *s; s++) {		if (*s == '\\') s++;		if (strchr("*[?",*s)) return 1;	}	return 0;}#if 0static void globprint(glob_t *pglob){	int i;	debug_printf("glob_t at %p:\n", pglob);	debug_printf("  gl_pathc=%d  gl_pathv=%p  gl_offs=%d  gl_flags=%d\n",		pglob->gl_pathc, pglob->gl_pathv, pglob->gl_offs, pglob->gl_flags);	for (i=0; i<pglob->gl_pathc; i++)		debug_printf("pglob->gl_pathv[%d] = %p = %s\n", i,			pglob->gl_pathv[i], pglob->gl_pathv[i]);}#endifstatic int xglob(o_string *dest, int flags, glob_t *pglob){	int gr; 	/* short-circuit for null word */	/* we can code this better when the debug_printf's are gone */ 	if (dest->length == 0) { 		if (dest->nonnull) { 			/* bash man page calls this an "explicit" null */ 			gr = globhack(dest->data, flags, pglob); 			debug_printf("globhack returned %d\n",gr); 		} else {			return 0;		} 	} else if (glob_needed(dest->data)) {		gr = glob(dest->data, flags, NULL, pglob);		debug_printf("glob returned %d\n",gr);		if (gr == GLOB_NOMATCH) {			/* quote removal, or more accurately, backslash removal */			gr = globhack(dest->data, flags, pglob);			debug_printf("globhack returned %d\n",gr);		}	} else {		gr = globhack(dest->data, flags, pglob);		debug_printf("globhack returned %d\n",gr);	}	if (gr == GLOB_NOSPACE)		error_msg_and_die("out of memory during glob");	if (gr != 0) { /* GLOB_ABORTED ? */		error_msg("glob(3) error %d",gr);	}	/* globprint(glob_target); */	return gr;}/* This is used to get/check local shell variables */static char *get_local_var(const char *s){	struct variables *cur;	if (!s)		return NULL;	for (cur = top_vars; cur; cur=cur->next)		if(strcmp(cur->name, s)==0)			return cur->value;	return NULL;}/* This is used to set local shell variables   flg_export==0 if only local (not exporting) variable   flg_export==1 if "new" exporting environ   flg_export>1  if current startup environ (not call putenv()) */static int set_local_var(const char *s, int flg_export){	char *name, *value;	int result=0;	struct variables *cur;	name=strdup(s);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久精品一品道一区| 国产亚洲人成网站| 99精品视频在线观看免费| 精品一区二区影视| 精品亚洲国产成人av制服丝袜| 偷拍日韩校园综合在线| 五月综合激情网| 午夜精品久久久久久| 日本女人一区二区三区| 天天影视网天天综合色在线播放| 亚洲国产欧美在线| 日韩在线观看一区二区| 久久精品国产999大香线蕉| 久久精品久久综合| 国产在线国偷精品免费看| 国产精品69毛片高清亚洲| av一区二区三区在线| 欧美日本一区二区| 精品电影一区二区三区| 国产午夜亚洲精品理论片色戒 | 亚洲一区在线视频观看| 亚洲成人综合视频| 国内精品国产三级国产a久久| 国产999精品久久久久久绿帽| 色综合欧美在线视频区| 欧美一级午夜免费电影| 久久综合国产精品| 亚洲精品免费在线播放| 日本美女视频一区二区| 成人福利视频在线看| 欧美日韩情趣电影| 久久久久久免费毛片精品| 成人免费在线视频| 久久精品国产一区二区三区免费看| 国产乱码字幕精品高清av| 91久色porny | 国产精品一卡二| 91丨九色丨蝌蚪富婆spa| 91福利在线免费观看| 精品国产一区二区三区四区四| 中文字幕一区二区三区乱码在线| 日韩在线a电影| 99久久国产综合精品女不卡| 欧美一区二区三区四区高清 | 色婷婷亚洲精品| 91麻豆精品国产91久久久更新时间 | 欧美狂野另类xxxxoooo| 欧美国产在线观看| 九九精品一区二区| 欧美日韩在线播放| 1区2区3区精品视频| 黄色日韩三级电影| 欧美精品色一区二区三区| 日韩码欧中文字| 国产一本一道久久香蕉| 日韩一级高清毛片| 亚洲一区二区三区美女| 91亚洲国产成人精品一区二三| 精品国产在天天线2019| 日韩1区2区3区| 欧美日本视频在线| 一区二区日韩电影| 91电影在线观看| 亚洲精品写真福利| 91香蕉视频mp4| 国产精品毛片a∨一区二区三区| 国产一区二区三区av电影| 欧美va亚洲va香蕉在线| 麻豆一区二区99久久久久| 欧美日韩亚州综合| 日韩精品一卡二卡三卡四卡无卡| 欧美网站一区二区| 亚洲一二三四区不卡| 91国内精品野花午夜精品 | 精品视频一区三区九区| 亚洲精品伦理在线| 欧美午夜影院一区| 亚洲一区在线视频| 欧美美女激情18p| 亚洲成人一区二区| 欧美性猛交xxxx乱大交退制版 | 国产xxx精品视频大全| 久久久精品国产免费观看同学| 国产在线精品一区二区| 国产日韩欧美高清在线| 夫妻av一区二区| 亚洲人成在线观看一区二区| 色婷婷综合中文久久一本| 一区二区三区成人| 7777精品久久久大香线蕉| 日本女人一区二区三区| 久久免费视频一区| 99久久婷婷国产综合精品| 亚洲夂夂婷婷色拍ww47| 日韩一级大片在线观看| 国产精品香蕉一区二区三区| 综合分类小说区另类春色亚洲小说欧美| 成人免费av在线| 亚洲福利一区二区| 久久综合av免费| 成人黄色电影在线| 午夜视频一区在线观看| www久久精品| 91丨porny丨国产入口| 午夜成人免费电影| 亚洲国产精品ⅴa在线观看| 91福利国产成人精品照片| 九九热在线视频观看这里只有精品| 国产精品天干天干在线综合| 欧美日韩激情在线| 国产一区视频导航| 亚洲国产wwwccc36天堂| 久久久精品免费网站| 欧美性一级生活| 麻豆一区二区99久久久久| 亚洲欧美日韩国产另类专区| 日韩小视频在线观看专区| 99久久国产免费看| 国产一区二区剧情av在线| 亚洲在线免费播放| 中文字幕电影一区| 精品国产91洋老外米糕| 一本大道久久a久久综合婷婷 | 国产精品乱码一区二区三区软件 | 国产成人午夜99999| 日韩黄色免费网站| 国产精品久久夜| 欧美精品一区二区久久久| 精品视频1区2区| 99久久久久久| 国产精品一级在线| 久久99精品国产麻豆婷婷洗澡| 夜夜精品视频一区二区| 中文字幕亚洲精品在线观看| 国产午夜精品一区二区三区四区| 91精品婷婷国产综合久久竹菊| 91丝袜国产在线播放| 成人永久aaa| 国产成人一区二区精品非洲| 美女诱惑一区二区| 蜜桃一区二区三区在线| 亚洲一二三四区| 亚洲蜜臀av乱码久久精品 | 亚洲一卡二卡三卡四卡无卡久久| 久久久激情视频| 久久久五月婷婷| 欧美刺激脚交jootjob| 欧美一区二区三区视频| 欧美日韩国产免费| 欧美久久久久久蜜桃| 欧美日韩在线一区二区| 欧美视频在线观看一区| 欧美性感一类影片在线播放| 一本久久精品一区二区| 欧洲国内综合视频| 欧美日韩第一区日日骚| 欧美色国产精品| 91精品国产综合久久福利软件| 欧美日韩和欧美的一区二区| 欧美日韩国产一二三| 欧美一区二区三区四区五区| 欧美成va人片在线观看| 日韩精品一区二区三区在线| 久久综合给合久久狠狠狠97色69| 久久久久久亚洲综合| 中文字幕日本乱码精品影院| 亚洲视频资源在线| 亚洲国产精品一区二区久久 | 久久网站热最新地址| 国产调教视频一区| 亚洲毛片av在线| 性欧美疯狂xxxxbbbb| 另类成人小视频在线| 国产a区久久久| 一本色道久久综合狠狠躁的推荐| 欧美最新大片在线看| 日韩一区二区精品| 亚洲国产精品v| 亚洲va欧美va人人爽| 日本欧美一区二区在线观看| 精品午夜一区二区三区在线观看| 国产白丝精品91爽爽久久| 日本高清不卡aⅴ免费网站| 欧美一级一区二区| 国产精品久久综合| 喷白浆一区二区| 99精品一区二区| 日韩欧美在线观看一区二区三区| 国产欧美日韩视频在线观看| 亚洲精品国产视频| 一道本成人在线| 666欧美在线视频| 日韩理论片网站| 蜜桃在线一区二区三区| 一本色道久久加勒比精品| 26uuu色噜噜精品一区二区| 亚洲综合丁香婷婷六月香| 国产自产高清不卡| 欧美日韩精品是欧美日韩精品| 中文乱码免费一区二区|