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

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

?? glob.c

?? UNIX下SH的實現源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#ifdef SHELL
      if (extended_glob)
	flags |= FNM_EXTMATCH;
#endif

      /* Scan the directory, finding all names that match.
	 For each name that matches, allocate a struct globval
	 on the stack and store the name in it.
	 Chain those structs together; lastlink is the front of the chain.  */
      while (1)
	{
#if defined (__DJGPP__)
	  char short_name[13];
#endif
#if defined (SHELL)
	  /* Make globbing interruptible in the shell. */
	  if (interrupt_state)
	    {
	      lose = 1;
	      break;
	    }
#endif /* SHELL */
	  
	  dp = readdir (d);
	  if (dp == NULL)
	    break;

	  /* If this directory entry is not to be used, try again. */
	  if (REAL_DIR_ENTRY (dp) == 0)
	    continue;

	  /* If a leading dot need not be explicitly matched, and the pattern
	     doesn't start with a `.', don't match `.' or `..' */
#define dname dp->d_name
	  if (noglob_dot_filenames == 0 && pat[0] != '.' &&
		(pat[0] != '\\' || pat[1] != '.') &&
		(dname[0] == '.' &&
		  (dname[1] == '\0' || (dname[1] == '.' && dname[2] == '\0'))))
#undef dname
	    continue;

	  /* If a dot must be explicity matched, check to see if they do. */
	  if (noglob_dot_filenames && dp->d_name[0] == '.' && pat[0] != '.' &&
		(pat[0] != '\\' || pat[1] != '.'))
	    continue;

#if defined (__DJGPP__)
         /* Downcase if the short name and long name are equal and
            case is being ignored.  */

         if (glob_ignore_case
             && (strcmp(dp->d_name, _lfn_gen_short_fname (dp->d_name, short_name)) == 0)
/*             && !((use_lfn && strchr(dp->d_name, '.') == NULL) && glob_testdir(dp->d_name) < 0) */
             )
           {
             /* Downcase when the SFN matches the LFN */
             int i;
             char c;
             for (i = 0; dp->d_name[i]; i++)
               {
                 c = dp->d_name[i];
                 dp->d_name[i] = ((c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c);
               }
           }
#endif
	  if (fnmatch (pat, dp->d_name, flags) != FNM_NOMATCH)
	    {
	      nextlink = (struct globval *) alloca (sizeof (struct globval));
	      nextlink->next = lastlink;
	      nextname = (char *) malloc (D_NAMLEN (dp) + 1);
	      if (nextname == NULL)
		{
		  lose = 1;
		  break;
		}
	      lastlink = nextlink;
	      nextlink->name = nextname;
	      bcopy (dp->d_name, nextname, D_NAMLEN (dp) + 1);
	      ++count;
	    }
	}

      (void) closedir (d);
    }

  if (lose == 0)
    {
      name_vector = (char **) malloc ((count + 1) * sizeof (char *));
      lose |= name_vector == NULL;
    }

  /* Have we run out of memory?	 */
  if (lose)
    {
      /* Here free the strings we have got.  */
      while (lastlink)
	{
	  free (lastlink->name);
	  lastlink = lastlink->next;
	}
#if defined (SHELL)
      if (interrupt_state)
	throw_to_top_level ();
#endif /* SHELL */

      return ((char **)NULL);
    }

  /* Copy the name pointers from the linked list into the vector.  */
  for (i = 0; i < count; ++i)
    {
      name_vector[i] = lastlink->name;
      lastlink = lastlink->next;
    }

  name_vector[count] = NULL;
  return (name_vector);
}

/* Return a new array which is the concatenation of each string in ARRAY
   to DIR.  This function expects you to pass in an allocated ARRAY, and
   it takes care of free()ing that array.  Thus, you might think of this
   function as side-effecting ARRAY. */
static char **
glob_dir_to_array (dir, array)
     char *dir, **array;
{
  register unsigned int i, l;
  int add_slash;
  char **result;

  l = strlen (dir);
  if (l == 0)
    return (array);

#if defined (HAVE_DOS_STYLE_FILE_SYSTEM)
  add_slash = dir[l - 1] != '/' && dir[l - 1] != ':';
#else
  add_slash = dir[l - 1] != '/';
#endif

  i = 0;
  while (array[i] != NULL)
    ++i;

  result = (char **) malloc ((i + 1) * sizeof (char *));
  if (result == NULL)
    return (NULL);

  for (i = 0; array[i] != NULL; i++)
    {
      result[i] = (char *) malloc (l + (add_slash ? 1 : 0)
				   + strlen (array[i]) + 1);
      if (result[i] == NULL)
	return (NULL);
#if 1
      strcpy (result[i], dir);
      if (add_slash)
        result[i][l] = '/';
      strcpy (result[i] + l + add_slash, array[i]);
#else
      (void)sprintf (result[i], "%s%s%s", dir, add_slash ? "/" : "", array[i]);
#endif
    }
  result[i] = NULL;

  /* Free the input array.  */
  for (i = 0; array[i] != NULL; i++)
    free (array[i]);
  free ((char *) array);

  return (result);
}

/* Do globbing on PATHNAME.  Return an array of pathnames that match,
   marking the end of the array with a null-pointer as an element.
   If no pathnames match, then the array is empty (first element is null).
   If there isn't enough memory, then return NULL.
   If a file system error occurs, return -1; `errno' has the error code.  */
char **
glob_filename (pathname)
     char *pathname;
{
  char **result;
  unsigned int result_size;
  char *directory_name, *filename;
  unsigned int directory_len;

  result = (char **) malloc (sizeof (char *));
  result_size = 1;
  if (result == NULL)
    return (NULL);

  result[0] = NULL;

  /* Find the filename.  */
  filename = strrchr (pathname, '/');
#if defined (HAVE_DOS_STYLE_FILE_SYSTEM)
  /* take drive name */
  if (filename == NULL && isalpha (pathname[0]) && pathname[1] == ':')
    filename = pathname + 1;
#endif
  if (filename == NULL)
    {
      filename = pathname;
      directory_name = "";
      directory_len = 0;
    }
  else
    {
      directory_len = (filename - pathname) + 1;
      directory_name = (char *) alloca (directory_len + 1);

      bcopy (pathname, directory_name, directory_len);
      directory_name[directory_len] = '\0';
      ++filename;
    }

  /* If directory_name contains globbing characters, then we
     have to expand the previous levels.  Just recurse. */
  if (glob_pattern_p (directory_name))
    {
      char **directories;
      register unsigned int i;

      if (directory_name[directory_len - 1] == '/')
	directory_name[directory_len - 1] = '\0';

      directories = glob_filename (directory_name);

      if (directories == NULL)
	goto memory_error;
      else if (directories == (char **)&glob_error_return)
	{
	  free ((char *) result);
	  return ((char **) &glob_error_return);
	}
      else if (*directories == NULL)
	{
	  free ((char *) directories);
	  free ((char *) result);
	  return ((char **) &glob_error_return);
	}

      /* We have successfully globbed the preceding directory name.
	 For each name in DIRECTORIES, call glob_vector on it and
	 FILENAME.  Concatenate the results together.  */
      for (i = 0; directories[i] != NULL; ++i)
	{
	  char **temp_results;

	  /* Scan directory even on a NULL pathname.  That way, `*h/'
	     returns only directories ending in `h', instead of all
	     files ending in `h' with a `/' appended. */
	  temp_results = glob_vector (filename, directories[i]);

	  /* Handle error cases. */
	  if (temp_results == NULL)
	    goto memory_error;
	  else if (temp_results == (char **)&glob_error_return)
	    /* This filename is probably not a directory.  Ignore it.  */
	    ;
	  else
	    {
	      char **array;
	      register unsigned int l;

	      array = glob_dir_to_array (directories[i], temp_results);
	      l = 0;
	      while (array[l] != NULL)
		++l;

	      result =
		(char **)realloc (result, (result_size + l) * sizeof (char *));

	      if (result == NULL)
		goto memory_error;

	      for (l = 0; array[l] != NULL; ++l)
		result[result_size++ - 1] = array[l];

	      result[result_size - 1] = NULL;

	      /* Note that the elements of ARRAY are not freed.  */
	      free ((char *) array);
	    }
	}
      /* Free the directories.  */
      for (i = 0; directories[i]; i++)
	free (directories[i]);

      free ((char *) directories);

      return (result);
    }

  /* If there is only a directory name, return it. */
  if (*filename == '\0')
    {
      result = (char **) realloc ((char *) result, 2 * sizeof (char *));
      if (result == NULL)
	return (NULL);
      result[0] = (char *) malloc (directory_len + 1);
      if (result[0] == NULL)
	goto memory_error;
      bcopy (directory_name, result[0], directory_len + 1);
      result[1] = NULL;
      return (result);
    }
  else
    {
      char **temp_results;

      /* There are no unquoted globbing characters in DIRECTORY_NAME.
	 Dequote it before we try to open the directory since there may
	 be quoted globbing characters which should be treated verbatim. */
      if (directory_len > 0)
	dequote_pathname (directory_name);

      /* We allocated a small array called RESULT, which we won't be using.
	 Free that memory now. */
      free (result);

      /* Just return what glob_vector () returns appended to the
	 directory name. */
#if defined(__DJGPP__)
      __opendir_flags = __OPENDIR_PRESERVE_CASE;
#endif
      temp_results =
	glob_vector (filename, (directory_len == 0 ? "." : directory_name));
#if defined (__DJGPP__)
      __opendir_flags = 0;
#endif

      if (temp_results == NULL || temp_results == (char **)&glob_error_return)
	return (temp_results);

      return (glob_dir_to_array (directory_name, temp_results));
    }

  /* We get to memory_error if the program has run out of memory, or
     if this is the shell, and we have been interrupted. */
 memory_error:
  if (result != NULL)
    {
      register unsigned int i;
      for (i = 0; result[i] != NULL; ++i)
	free (result[i]);
      free ((char *) result);
    }
#if defined (SHELL)
  if (interrupt_state)
    throw_to_top_level ();
#endif /* SHELL */
  return (NULL);
}

#if defined (TEST)

main (argc, argv)
     int argc;
     char **argv;
{
  unsigned int i;

  for (i = 1; i < argc; ++i)
    {
      char **value = glob_filename (argv[i]);
      if (value == NULL)
	puts ("Out of memory.");
      else if (value == &glob_error_return)
	perror (argv[i]);
      else
	for (i = 0; value[i] != NULL; i++)
	  puts (value[i]);
    }

  exit (0);
}
#endif	/* TEST.  */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费在线观看| 亚洲午夜久久久久中文字幕久| 97国产一区二区| 日韩不卡一区二区| 亚洲男同1069视频| 久久久精品一品道一区| 欧美日韩精品二区第二页| 成人免费观看男女羞羞视频| 日本亚洲天堂网| 亚洲区小说区图片区qvod| 久久亚洲影视婷婷| 91精品蜜臀在线一区尤物| 99re在线视频这里只有精品| 久久精品国产99国产| 亚洲国产日韩a在线播放| 日韩一区中文字幕| 精品国产精品网麻豆系列| 欧美日韩一区二区三区高清 | 亚洲女女做受ⅹxx高潮| 欧美草草影院在线视频| 欧美日本精品一区二区三区| 色综合久久久久久久久久久| 国产成人自拍高清视频在线免费播放| 午夜国产不卡在线观看视频| 亚洲欧洲精品一区二区精品久久久| 日韩欧美亚洲国产另类| 欧美亚洲国产怡红院影院| 99久久亚洲一区二区三区青草| 国产乱码精品1区2区3区| 免费观看一级特黄欧美大片| 亚洲成a人片在线不卡一二三区| 亚洲精品国产a久久久久久 | 午夜伊人狠狠久久| 亚洲综合一区二区三区| 一区二区三区四区在线播放| 成人欧美一区二区三区视频网页 | 成人免费一区二区三区在线观看| 国产亚洲综合在线| 国产欧美视频在线观看| 日本一区二区免费在线观看视频| 久久精品一区二区三区不卡| 久久免费视频色| 国产亚洲精品超碰| 国产精品情趣视频| 国产精品麻豆欧美日韩ww| 中文字幕日本乱码精品影院| 国产精品嫩草影院com| 国产精品美女久久久久高潮| 国产精品国产精品国产专区不片| 日韩美女精品在线| 一区二区三区丝袜| 亚洲v日本v欧美v久久精品| 偷拍自拍另类欧美| 久久精品国产亚洲aⅴ| 久久9热精品视频| 国产美女精品在线| 成人h动漫精品| 欧美性极品少妇| 欧美一区二区久久| 久久亚洲一区二区三区明星换脸| 国产色一区二区| 亚洲欧美综合色| 亚洲午夜久久久久久久久电影院| 日韩经典一区二区| 精品一区二区av| 大胆欧美人体老妇| 欧美性欧美巨大黑白大战| 欧美一区二区日韩| 国产精品久久一级| 丝瓜av网站精品一区二区| 久久国产精品99久久久久久老狼 | 欧美xxxx老人做受| 日本一区二区三区久久久久久久久不| 日韩一区在线免费观看| 亚洲不卡一区二区三区| 国产综合久久久久久久久久久久| 91在线观看地址| 偷拍一区二区三区| 国产真实乱对白精彩久久| 色综合久久六月婷婷中文字幕| 欧美日韩在线观看一区二区| 日韩免费看的电影| 日韩理论在线观看| 捆绑变态av一区二区三区| jiyouzz国产精品久久| 欧美浪妇xxxx高跟鞋交| 国产日本欧洲亚洲| 亚洲妇熟xx妇色黄| 成人app网站| 日韩欧美一区二区三区在线| 中文字幕一区二区三区在线播放 | 一本大道久久a久久精二百| 日韩精品一区二区三区视频播放| 国产精品久久久久久妇女6080| 亚洲国产另类av| 成人免费视频网站在线观看| 91精品在线观看入口| 中文字幕中文字幕一区二区 | 91在线观看美女| 欧美精品一区二区三区久久久| 亚洲精品写真福利| 国产乱理伦片在线观看夜一区| 欧美日韩亚洲综合| 7777精品伊人久久久大香线蕉的| 欧美日韩中文国产| 国产精品理伦片| 日日夜夜精品免费视频| 成人在线视频首页| 欧美精品一区二区三区久久久| 久久久久久99久久久精品网站| 亚洲精品一卡二卡| 成人一级视频在线观看| 午夜精品一区二区三区免费视频| 奇米色一区二区| 成人午夜免费视频| 欧美日韩一级视频| 久久精品国产精品亚洲综合| 亚洲午夜私人影院| 偷窥国产亚洲免费视频| 婷婷亚洲久悠悠色悠在线播放| 亚洲电影视频在线| 五月婷婷另类国产| 男人的天堂久久精品| 久久er精品视频| 国产成人免费视频| 不卡一区二区三区四区| 91麻豆精东视频| 精品视频一区二区不卡| 欧美精品丝袜久久久中文字幕| 91精品国产色综合久久不卡蜜臀 | 久久在线免费观看| 国产欧美一区二区三区网站| 国产精品美女一区二区| 亚洲女子a中天字幕| 亚洲自拍偷拍综合| 美腿丝袜一区二区三区| 韩国中文字幕2020精品| 成人免费观看视频| 欧美三级在线看| 日韩精品一区二区三区视频 | 国产在线乱码一区二区三区| 成人av在线一区二区| 在线影视一区二区三区| 日韩欧美国产午夜精品| 国产三区在线成人av| 亚洲视频每日更新| 日本特黄久久久高潮| 成人久久18免费网站麻豆| 欧美亚日韩国产aⅴ精品中极品| 欧美一区二区高清| 国产精品蜜臀av| 日韩精品一级中文字幕精品视频免费观看 | 国产精品二三区| 亚洲综合男人的天堂| 久久精品国产在热久久| 99免费精品视频| 欧美一级久久久| 亚洲色图欧美偷拍| 久久精品国产精品亚洲红杏| 91啦中文在线观看| 精品国产一二三| 亚洲r级在线视频| 懂色av一区二区在线播放| 欧美日韩午夜精品| 欧美国产精品一区二区| 人人爽香蕉精品| 欧美中文字幕一区二区三区| 久久久亚洲欧洲日产国码αv| 亚洲一区免费视频| 国产91高潮流白浆在线麻豆| 欧美精品粉嫩高潮一区二区| 国产精品每日更新在线播放网址| 日韩电影在线看| 色综合久久久网| 亚洲国产高清不卡| 精品亚洲porn| 国产一区二区三区精品视频| 久久一区二区三区四区| 国产高清无密码一区二区三区| 久久青草国产手机看片福利盒子| 国产一区欧美一区| 国产女同性恋一区二区| 99久久久精品| 亚洲午夜免费福利视频| 欧美一级黄色录像| 国产乱子伦一区二区三区国色天香| 久久午夜国产精品| proumb性欧美在线观看| 亚洲激情网站免费观看| 欧美久久久久久蜜桃| 精品一区二区免费| 中文字幕五月欧美| 欧美日韩国产免费一区二区| 麻豆精品一区二区av白丝在线| 久久久久一区二区三区四区| 波多野结衣欧美| 亚洲一卡二卡三卡四卡五卡| 日韩你懂的在线观看| 国产精品亚洲成人| 一区二区在线电影|