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

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

?? getsdir.c

?? minicom2.0源代碼
?? C
字號:
/* * getsdir.c * *	Get and return a sorted directory listing * *	Copyright (c) 1998 by James S. Seymour (jseymour@jimsun.LinxNet.com) * *	This code 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. * *	Note: this code uses "wildmat.c", which has different copyright *	and licensing conditions.  See the source, Luke. */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "rcsid.h"RCSID("$Id: getsdir.c,v 1.4 2000/03/16 17:59:38 walker Exp $")#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include "port.h"	/* from minicom: for needed for _PROTO macro only */#include "getsdir.h"#include "intl.h"_PROTO(extern int wildmat, (char *, char *));	/* pattern matcher *//* locally defined constants */ #define MAX_CNT 100		/* number of entries to hold in holding buf */typedef struct dat_buf {		/* structure of input buffers */    struct dat_buf *nxt;		/* pointer to next buffer */    unsigned cnt;			/* data count in present buffer */    GETSDIR_ENTRY data[MAX_CNT];	/* data in present buffer */} DAT_BUF;static DAT_BUF *datb_frst;		/* pointer to first data buffer */static DAT_BUF *datb_cur;		/* pointer to current data buffer */static int g_sortflags;			/* sort flags *//* sort compare routines */_PROTO(static int namecmpr, (GETSDIR_ENTRY *d1, GETSDIR_ENTRY *d2));_PROTO(static int timecmpr, (GETSDIR_ENTRY *d1, GETSDIR_ENTRY *d2));_PROTO(static void free_up, (void));		/* free-up used memory *//* * name:	getsdir * * purpose:	To return a directory listing - possibly sorted * * synopsis:	#include <dirent.h> * *		int getsdir(dirpath, pattern, sortflags, modemask, datptr, len) *		char *dirpath; *		char *pattern; *		int sortflags; *		mode_t modemask; *		GETSDIR_ENTRY **datptr; *		int *len; * * input:	 *dirpath - pointer to path to directory to get list of *			    files from *		 *pattern - pointer to optional wildmat pattern *		sortflags - specification flags of how to sort the *			    resulting list.  See descriptions below. *		 modemask - caller-supplied mode mask.  Bits in this will *			    be ANDed against directory entries to determine *			    whether to return them.  Ignored if 0. *		 **datptr - pointer to a destination pointer variable. *			    getsdir will allocate the required amount *			    of memory for the results and will return a *			    pointer to the returned data in this variable. * *			    The data will be in the form: *				typedef struct dirEntry { *				    char fname[MAXNAMLEN + 1]; *				    time_t time; *				    mode_t mode; *				} GETSDIR_ENTRY; *		     *len - pointer to int to contain length of longest *			    string in returned array. * * process:	For each 0..MAX_CNT values read from specified directory, *		allocates a temporary buffer to store the entries into. *		When end of directory is detected, merges the buffers into *		a single array of data and sorts into order based on key. * * output:	Count of number of data items pointed to by datptr or *		-1 if error.  errno may or may not be valid, based on *		type of error encountered. * * notes:	If there is any error, -1 is returned. * *		It is the caller's responsibility to free the memory *		block pointed to by datptr on return when done with the *		data, except in case of error return. * *		See also: opendir(3C), readdir(3C), closedir(3C), qsort(3C) * *		The pattern parameter is optional and may be 0-length or *		a NULL pointer. * *		The sort flags affect the output as follows: * *		    GETSDIR_PARNT - include parent dir (..) *		    GETSDIR_NSORT - sort by name *		    GETSDIR_TSORT - sort by time (NSORT wins if both) * *		    The following are only meaningful if GETSDIR_NSORT or *		    GETSDIR_TSORT are specified: * *			GETSDIR_DIRSF - dirs first *			GETSDIR_DIRSL - dirs last *			GETSDIR_RSORT - reverse sort (does not affect *					GETSDIR_DIRSF/GETSDIR_DIRSL) * *		So-called "hidden" files (those beginning with a ".") are *		not returned unless a pattern like ".*" is specified. * *		The present directory (".") is never returned. */intgetsdir(dirpath, pattern, sortflags, modemask, datptr, len)char *dirpath;char *pattern;int sortflags;mode_t modemask;GETSDIR_ENTRY **datptr;int *len;{    unsigned cnt;		/* data count */    DIR *dirp;			/* point to open dir */    struct dirent *dp;		/* structure of dir as per system */    struct stat statbuf;	/* structure of file stat as per system */    char fpath[BUFSIZ];		/* filename with dir path prepended */    int indx;			/* g-p array indexer */    int cmprstat;    DAT_BUF *datb_sav;		/* pointer to previous data buffer */    g_sortflags = sortflags;		/* for sort funcs */    *len = 0;				/* longest name */    datb_frst = (DAT_BUF *) NULL;	/* init pointers to first data buff */    datb_cur  = (DAT_BUF *) NULL;    /* open the specified directory */    if ((dirp = opendir(dirpath)) == NULL)	        return(-1);    /* discard current, and possibly parent, dir entries */    if(readdir(dirp) == NULL || 	(!(sortflags & GETSDIR_PARNT) && readdir(dirp) == NULL))    {	fprintf(stderr, _("DBUG: initial readdir() failed (errno == %d)\n"),	    errno);	perror("readdir");	fflush(stderr);    }    for(cnt = 1;; ++cnt)	/* for buffer count 1 to whatever... */    {	datb_sav = datb_cur;	/* save pointer to previous buffer */	/* get a new buffer */        if((datb_cur = (DAT_BUF*)calloc(1,sizeof(DAT_BUF))) == (DAT_BUF*)NULL)	{	    closedir(dirp);            return(-1);	}	/* init new buffer link pointer */	datb_cur->nxt = (DAT_BUF *) NULL;	if(datb_frst == (DAT_BUF *) NULL)	/* if first buff... */            datb_frst = datb_cur;		/* ...init first buff pointer */	else					/* else... */	    datb_sav->nxt = datb_cur;		/* ...link to new */	/* while the current buffer is not full, get directory entries */        for(datb_cur->cnt = 0; datb_cur->cnt < MAX_CNT; )            if((dp = readdir(dirp)) != NULL)	/* get next directory entry */	    {		if((sortflags & GETSDIR_PARNT) &&		   strcmp(dp->d_name, "..") == 0)		{		    cmprstat = 1;		}		else if(pattern && strlen(pattern))		    cmprstat = wildmat(dp->d_name, pattern);		else		    cmprstat = 1;		if(cmprstat)	/* matching name? */		{		    int l;		    /* copy the filename */		    strncpy(datb_cur->data[datb_cur->cnt].fname,			    dp->d_name,			    MAXNAMLEN);	            /* get information about the directory entry */	            snprintf(fpath, sizeof(fpath), "%s/%s", dirpath, dp->d_name);                    if(stat(fpath, &statbuf))	/* if error getting stat... */		    {#if 0			free_up();		/* free-up used memory */		        closedir(dirp);		/* close file pointer */		        return(-1);		/* nobody home */#endif			continue;		    }		    if(modemask && !(S_IFMT & modemask & statbuf.st_mode))			continue;		    if((l = strlen(dp->d_name)) > *len)			*len = l;		    datb_cur->data[datb_cur->cnt].time = statbuf.st_mtime;		    datb_cur->data[datb_cur->cnt].mode = statbuf.st_mode;		    ++datb_cur->cnt;	/* bump array index / data count */		}	    }	    else	        break;			/* at end of directory */	if(datb_cur->cnt < MAX_CNT)	/* if less than full buffer... */	    break;			/* ...all done */    }        closedir(dirp);		/* close file pointer */    /* get memory for single array */    if((*datptr = (GETSDIR_ENTRY *) calloc(cnt, sizeof(datb_cur->data)))	== NULL)    {	/* couldn't get space, clear everything up */	free_up();		/* free-up used memory */        return(-1);		/* error */    }    /* copy/concatenate the data */    cnt = indx = 0;			/* init final count and dest index */    do    {	datb_cur = datb_frst;	/* copy data in one swell foop */	memcpy(*datptr+indx*MAX_CNT, datb_cur->data, sizeof(datb_cur->data));	cnt += datb_cur->cnt;	/* adjust data count */	++indx;			/* bump destination index */	datb_frst = datb_cur->nxt;	free(datb_cur);		/* free no longer needed buffer */    } while (datb_frst);  /* while more to go */    free_up();	/* free-up used memory */    /* post-process array by option */    if(cnt && sortflags) {	if(sortflags & GETSDIR_NSORT)	    qsort(*datptr, cnt, sizeof(GETSDIR_ENTRY),		  (int (*)(const void *, const void *))namecmpr);	else if(sortflags & GETSDIR_TSORT)	    qsort(*datptr, cnt, sizeof(GETSDIR_ENTRY),		  (int (*)(const void *, const void *))timecmpr);    }    return(cnt);} /* getsdir *//* * name:	free_up * * purpose:	free up memory allocated for temporary buffers * * synopsis:	static void freeup() * * input:	none * * process:	as under purpose * * output:	none * * notes:	none */static voidfree_up(){    if((datb_cur = datb_frst) != (DAT_BUF *) NULL)	/* start with first */	do				/* and free 'em all */	{	    datb_frst = datb_cur->nxt;	    free(datb_cur);	} while ((datb_cur = datb_frst));} /* free_up *//* * name:	namecmpr * * purpose:	return stat to qsort on comparison between name fields in *		directory entry. * * synopsis:	static in namecmpr(d1, d2) *		GETSDIR_ENTRY *d1; *		GETSDIR_ENTRY *d2; * * input:	See explanation of qsort * * process:	See explanation of qsort * * output:	See explanation of qsort * * notes:	See explanation of qsort */static intnamecmpr(d1, d2)GETSDIR_ENTRY *d1, *d2;{    if(g_sortflags & (GETSDIR_DIRSF | GETSDIR_DIRSL)) {	if(S_ISDIR((d1->mode)) && ! S_ISDIR((d2->mode)))	    return((g_sortflags & GETSDIR_DIRSF)? -1 : 1);	else if(S_ISDIR((d2->mode)) && ! S_ISDIR((d1->mode)))	    return((g_sortflags & GETSDIR_DIRSF)? 1 : -1);    }    return((g_sortflags & GETSDIR_RSORT)?	strcmp(d2->fname, d1->fname) : strcmp(d1->fname, d2->fname));} /* namecmpr *//* * name:	timecmpr * * purpose:	return stat to qsort on comparison between time fields in *		directory entry. * * synopsis:	static in timecmpr(d1, d2) *		GETSDIR_ENTRY *d1; *		GETSDIR_ENTRY *d2; * * input:	See explanation of qsort * * process:	See explanation of qsort * * output:	See explanation of qsort * * notes:	See explanation of qsort */static inttimecmpr(d1, d2)GETSDIR_ENTRY *d1, *d2;{    if(g_sortflags & (GETSDIR_DIRSF | GETSDIR_DIRSL)) {	if(S_ISDIR((d1->mode)) && ! S_ISDIR((d2->mode)))	    return((g_sortflags & GETSDIR_DIRSF)? -1 : 1);	else if(S_ISDIR((d2->mode)) && ! S_ISDIR((d1->mode)))	    return((g_sortflags & GETSDIR_DIRSF)? 1 : -1);    }    return((g_sortflags & GETSDIR_RSORT)?	(d2->time - d1->time) : (d1->time - d2->time));} /* timecmpr */#ifdef GETSDIR_STANDALONE_TEST/* * debug for getsdir() * * usage: getsdir <dirpath> * */extern char *ctime();voidmain(argc, argv)int argc;char *argv[];{    GETSDIR_ENTRY *dirdat;    int cnt, index;    int sortflags = 0;    mode_t modemask = (mode_t) 0;    int len;    if(argc != 4)    {      fprintf(stderr,"usage: %s <dirpath> <pattern> <sortflags>\n", argv[0]);      exit(1);    }    switch(argv[3][0]) {	case 'n': sortflags = GETSDIR_NSORT;		  break;	case 't': sortflags = GETSDIR_TSORT;		  break;    }/*    sortflags |= GETSDIR_DIRSL | GETSDIR_RSORT; */    sortflags |= GETSDIR_DIRSF;/*    sortflags |= GETSDIR_PARNT; *//*    modemask = S_IFDIR | S_IFREG; */    printf("modemask==%x\n", modemask);    if((cnt = getsdir(argv[1], argv[2], sortflags, modemask, &dirdat, &len)) == -1)    {	fprintf(stderr, "%s: error getting directory\n", argv[0]);	exit(1);    }    printf(_("%d files:\n"), cnt);    for(index = 1; index <= cnt; ++index, ++dirdat)        printf("%2d: %-20s%s",	    index, dirdat->fname, ctime(&dirdat->time));    free(dirdat);    exit(0);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品麻豆| 欧美日韩国产免费一区二区| 美洲天堂一区二卡三卡四卡视频 | 884aa四虎影成人精品一区| 成人短视频下载 | 欧美午夜影院一区| av中文字幕在线不卡| 国产一区二区三区精品欧美日韩一区二区三区 | 99热这里都是精品| 国产精品 欧美精品| 国产做a爰片久久毛片| 久久精工是国产品牌吗| 免费观看在线综合| 三级久久三级久久| 亚洲第一综合色| 亚洲国产欧美在线| 一区二区三区日韩欧美| 视频一区免费在线观看| 日韩精品五月天| 免费看日韩a级影片| 久久国产精品免费| 蜜臀av一区二区在线免费观看 | 91丨porny丨蝌蚪视频| 成人av集中营| 99久久久精品免费观看国产蜜| 国产91富婆露脸刺激对白| 国产丶欧美丶日本不卡视频| 国产精品一二三区| 国产成人aaa| 成人免费高清在线| 成人av手机在线观看| 国产精品一品二品| 成人精品小蝌蚪| 成年人网站91| 成人免费视频视频在线观看免费| 国产乱淫av一区二区三区| 国产精品一区一区三区| 国产99久久久国产精品| 99精品欧美一区二区三区综合在线| 色综合久久久久综合体| 欧美午夜影院一区| 精品美女一区二区三区| 国产色产综合产在线视频| 国产精品你懂的| 亚洲日本va午夜在线影院| 亚洲精品亚洲人成人网| 日日夜夜精品视频天天综合网| 看电视剧不卡顿的网站| 国产高清一区日本| 一本到不卡精品视频在线观看| 欧美日韩激情一区二区三区| 精品免费日韩av| 亚洲欧美另类小说视频| 午夜私人影院久久久久| 国产一区二区三区在线看麻豆| 日本vs亚洲vs韩国一区三区二区| 韩国欧美国产一区| 在线观看欧美精品| 精品国产一区二区三区久久影院 | 欧美日韩一区不卡| 国产亚洲视频系列| 亚洲伦理在线免费看| 日韩av网站免费在线| 国产不卡高清在线观看视频| 精品视频一区二区三区免费| 久久亚洲私人国产精品va媚药| 亚洲欧美经典视频| 久久国产成人午夜av影院| 不卡欧美aaaaa| 欧美一区二区三区在线观看| 中文字幕免费不卡| 不卡电影一区二区三区| 欧美精品一卡两卡| 国产精品久久久久久久久搜平片 | 看国产成人h片视频| 91麻豆国产在线观看| 日韩亚洲欧美高清| 一区二区三区四区蜜桃| 激情成人综合网| 日本精品一区二区三区高清| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲欧美日韩人成在线播放| 国内不卡的二区三区中文字幕| 在线观看日韩精品| 欧美激情一二三区| 精品在线播放午夜| 欧美撒尿777hd撒尿| 国产精品全国免费观看高清| 欧美a级一区二区| 日本高清不卡在线观看| 国产香蕉久久精品综合网| 日韩精品一二三区| 91麻豆国产自产在线观看| 日韩女优毛片在线| 丝袜国产日韩另类美女| aa级大片欧美| 精品久久国产字幕高潮| 亚洲123区在线观看| 色八戒一区二区三区| 中文字幕欧美日韩一区| 国产在线视频一区二区| 日韩视频在线你懂得| 香蕉加勒比综合久久| 欧美在线观看视频一区二区| 综合激情成人伊人| 国产一区二区三区久久久| 欧美老肥妇做.爰bbww视频| 亚洲色图制服丝袜| 成人国产亚洲欧美成人综合网| 2014亚洲片线观看视频免费| 奇米影视在线99精品| 欧美日韩久久不卡| 午夜精品久久久久久久久久| 欧美三级日韩三级| 亚洲成人高清在线| 欧美亚洲国产一区二区三区va | 精品日韩在线一区| 视频一区二区不卡| 欧美一区二区三区四区五区| 亚洲综合在线电影| 色婷婷综合在线| 国产精品福利一区| thepron国产精品| 日韩伦理免费电影| 国产精品一区二区你懂的| 26uuu精品一区二区| 国产精品自在欧美一区| 国产午夜精品久久久久久免费视| 国产在线播放一区| 欧美激情在线观看视频免费| 国产成人在线视频网站| 中文av一区二区| av在线不卡电影| 一二三四社区欧美黄| 精品视频资源站| 日韩高清不卡一区| 欧美成人r级一区二区三区| 精品在线免费观看| 国产精品视频一二三区| 91色视频在线| 亚洲国产精品欧美一二99| 欧美精品自拍偷拍动漫精品| 蜜臀av性久久久久av蜜臀妖精 | 欧美日本韩国一区二区三区视频| 日韩高清不卡一区| 久久影院午夜片一区| 成av人片一区二区| 亚洲一区成人在线| 日韩一区二区精品在线观看| 国产一区二区三区在线观看免费视频 | 欧美日韩三级在线| 日产国产高清一区二区三区| 精品国产电影一区二区| 高清不卡一二三区| 亚洲男人天堂一区| 欧美一级免费观看| 高清不卡一二三区| 亚洲同性gay激情无套| 日本道色综合久久| 亚洲国产精品欧美一二99| 精品日本一线二线三线不卡| av欧美精品.com| 无码av免费一区二区三区试看| 欧美变态tickle挠乳网站| 99久久免费视频.com| 首页国产欧美日韩丝袜| 国产日韩亚洲欧美综合| 欧美日韩免费一区二区三区| 国产麻豆成人传媒免费观看| 亚洲中国最大av网站| 久久久午夜精品理论片中文字幕| 国产成人精品免费一区二区| 国产日韩欧美电影| 欧美裸体bbwbbwbbw| 99久久精品费精品国产一区二区| 六月丁香综合在线视频| 亚洲综合色婷婷| 国产精品国产精品国产专区不蜜 | 一本到高清视频免费精品| 国产成人午夜视频| 免费成人结看片| 亚洲一区欧美一区| 中文字幕av一区二区三区高| 日韩美女在线视频| 欧美日本精品一区二区三区| 色综合中文字幕国产| 国产成人精品免费视频网站| 日韩电影在线观看一区| 香蕉加勒比综合久久| 一级精品视频在线观看宜春院| 亚洲天天做日日做天天谢日日欢| 久久精品人人爽人人爽| 精品国产乱码久久久久久牛牛| 欧美日韩电影在线| 欧美午夜宅男影院| 91高清视频免费看| 色中色一区二区| 91亚洲国产成人精品一区二三| 懂色一区二区三区免费观看 | 欧美一级片在线|