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

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

?? getsdir.c

?? linux 下的超級終端 minicom
?? 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.1.1.1 2003/03/30 18:55:51 al-guest 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一区二区三区免费野_久草精品视频
av在线不卡电影| 国产欧美综合在线观看第十页 | 天堂av在线一区| 成人黄色在线网站| 777奇米四色成人影色区| 亚洲激情中文1区| 色综合色综合色综合色综合色综合| 亚洲国产精品av| 国产aⅴ综合色| 国产精品护士白丝一区av| 成人短视频下载| 中文字幕一区二区三区在线播放| 成人av午夜影院| 日韩美女视频19| 99国产精品视频免费观看| 亚洲美女视频一区| 欧美色图第一页| 毛片一区二区三区| 国产亚洲欧美日韩在线一区| 成人激情黄色小说| 亚洲裸体在线观看| 欧美久久一二区| 麻豆精品久久久| 国产校园另类小说区| 91丨porny丨国产| 偷拍亚洲欧洲综合| 精品88久久久久88久久久| 大桥未久av一区二区三区中文| 26uuu久久综合| 久久99久国产精品黄毛片色诱| 国产视频一区二区在线观看| 成人av免费在线| 亚洲一区二区不卡免费| 欧美顶级少妇做爰| 麻豆精品久久精品色综合| 国产亚洲精品bt天堂精选| 色婷婷av一区二区三区gif| 奇米四色…亚洲| 国产三级精品视频| 欧美视频一区二区在线观看| 韩国女主播成人在线观看| 亚洲色图19p| 日韩视频在线一区二区| 成人久久18免费网站麻豆 | 久久久91精品国产一区二区精品| 99精品久久只有精品| 日韩专区欧美专区| 久久精品一区二区三区不卡牛牛| 日本乱码高清不卡字幕| 精品一区二区影视| 亚洲精品成人少妇| 国产视频亚洲色图| 日韩三级视频在线看| 91色婷婷久久久久合中文| 亚洲精品视频在线看| 欧美电视剧免费观看| 日本久久电影网| 国产乱码精品一区二区三区忘忧草 | 一区二区三区四区视频精品免费 | 这里只有精品免费| 成人免费高清视频在线观看| 日产国产欧美视频一区精品 | 亚洲男帅同性gay1069| 精品国产髙清在线看国产毛片 | 综合久久久久久久| 久久综合九色综合欧美98| 欧美欧美欧美欧美首页| av高清久久久| 久久精品国内一区二区三区| 国产精品美女视频| 久久午夜电影网| 欧美一级片在线| 欧美图片一区二区三区| 成人avav影音| 国产馆精品极品| 久久精品72免费观看| 日韩国产欧美一区二区三区| 亚洲一区成人在线| 亚洲三级视频在线观看| 日韩欧美国产wwwww| 欧美日韩国产综合一区二区| 色婷婷久久久综合中文字幕| 99国产精品一区| 成人久久久精品乱码一区二区三区| 国产一区欧美二区| 另类欧美日韩国产在线| 自拍偷拍国产精品| 久久综合资源网| 精品99一区二区| 久久亚洲精精品中文字幕早川悠里 | 伊人婷婷欧美激情| 中文字幕综合网| 亚洲欧美区自拍先锋| 亚洲欧美自拍偷拍色图| 中文字幕日本乱码精品影院| 欧美韩国日本综合| 国产女人18毛片水真多成人如厕| 欧美美女黄视频| 91精品国产综合久久精品| 欧美日韩精品电影| 欧美一区二区三区系列电影| 91精品福利在线一区二区三区| 欧美久久久久久久久久| 日韩欧美一区在线| 欧美一区二区三区免费在线看| 欧美一卡2卡3卡4卡| 精品国产欧美一区二区| 久久综合一区二区| 中文字幕在线免费不卡| 亚洲免费观看在线视频| 亚洲一级电影视频| 一区二区三区免费在线观看| 午夜精品久久久久久久蜜桃app| 日韩中文字幕1| 国产精品影视在线| 91美女在线看| 欧美三片在线视频观看| 欧美一区二区三区四区五区 | 国产精品影视在线| 99精品久久只有精品| av网站免费线看精品| 欧美性生交片4| 日韩欧美aaaaaa| 国产精品成人一区二区三区夜夜夜| 亚洲三级理论片| 蜜桃一区二区三区在线| 国产美女av一区二区三区| 色综合天天视频在线观看| 制服视频三区第一页精品| 国产精品无码永久免费888| 亚洲制服欧美中文字幕中文字幕| 日韩精品久久久久久| 丁香啪啪综合成人亚洲小说| 欧美日韩中文字幕一区二区| 欧美草草影院在线视频| 亚洲小说春色综合另类电影| 成人a级免费电影| 久久女同精品一区二区| 丝袜亚洲另类欧美| 欧洲人成人精品| 亚洲天天做日日做天天谢日日欢 | 欧美福利视频一区| 亚洲精品国产精华液| 成人永久免费视频| 欧美精品一区视频| 美国十次综合导航| 日韩一区二区在线观看视频| 午夜久久久久久| 欧美图区在线视频| 亚洲综合一二三区| 91免费视频观看| 亚洲人快播电影网| 97久久久精品综合88久久| 国产欧美精品一区aⅴ影院| 国产精品综合在线视频| 精品国产乱码久久久久久夜甘婷婷 | 亚洲少妇30p| av激情综合网| 日韩美女久久久| 色偷偷成人一区二区三区91| 综合久久久久综合| 色综合天天做天天爱| 一区二区三区精品久久久| 色婷婷综合久久久| 亚洲福利一区二区三区| 欧美视频在线播放| 午夜久久电影网| 日韩视频不卡中文| 国产一区二区在线视频| 久久久久亚洲蜜桃| 成人综合婷婷国产精品久久蜜臀| 中文字幕va一区二区三区| a在线播放不卡| 亚洲欧美视频一区| 在线视频你懂得一区二区三区| 一区二区三区中文免费| 欧美日韩国产免费| 麻豆freexxxx性91精品| 久久综合九色综合97_久久久| 国产成人丝袜美腿| 亚洲青青青在线视频| 欧美日韩国产精品成人| 毛片一区二区三区| 亚洲国产精品高清| 91麻豆国产自产在线观看| 亚洲国产精品一区二区久久恐怖片| 欧美福利一区二区| 国产不卡视频在线观看| 中文字幕佐山爱一区二区免费| 欧美日韩亚洲国产综合| 久久99精品国产91久久来源| 国产精品久久影院| 欧美日韩免费电影| 国产精品一区二区果冻传媒| 亚洲色图欧美激情| 欧美一二三四区在线| 成人中文字幕合集| 日韩综合小视频| 国产精品久久精品日日| 欧美美女喷水视频|