Blame src/FileGlob.h

Packit Service a2489d
/*
Packit Service a2489d
 * lftp - file transfer program
Packit Service a2489d
 *
Packit Service a2489d
 * Copyright (c) 1996-2017 by Alexander V. Lukyanov (lav@yars.free.net)
Packit Service a2489d
 *
Packit Service a2489d
 * This program is free software; you can redistribute it and/or modify
Packit Service a2489d
 * it under the terms of the GNU General Public License as published by
Packit Service a2489d
 * the Free Software Foundation; either version 3 of the License, or
Packit Service a2489d
 * (at your option) any later version.
Packit Service a2489d
 *
Packit Service a2489d
 * This program is distributed in the hope that it will be useful,
Packit Service a2489d
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service a2489d
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service a2489d
 * GNU General Public License for more details.
Packit Service a2489d
 *
Packit Service a2489d
 * You should have received a copy of the GNU General Public License
Packit Service a2489d
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service a2489d
 */
Packit Service a2489d
Packit Service a2489d
#ifndef GLOB_H
Packit Service a2489d
#define GLOB_H
Packit Service a2489d
Packit Service a2489d
#include "FileAccess.h"
Packit Service a2489d
Packit Service a2489d
class Glob : public FileAccessOperation
Packit Service a2489d
{
Packit Service a2489d
protected:
Packit Service a2489d
   xstring_c pattern;
Packit Service a2489d
   FileSet list;
Packit Service a2489d
   bool	 dirs_only;
Packit Service a2489d
   bool	 files_only;
Packit Service a2489d
   bool	 match_period;
Packit Service a2489d
   bool	 inhibit_tilde;
Packit Service a2489d
   bool	 casefold;
Packit Service a2489d
   void	 add(const FileInfo *info);
Packit Service a2489d
   void	 add_force(const FileInfo *info);
Packit Service a2489d
public:
Packit Service a2489d
   const char *GetPattern() { return pattern; }
Packit Service a2489d
   FileSet *GetResult() { return &list; }
Packit Service a2489d
   Glob(FileAccess *s,const char *p);
Packit Service a2489d
   ~Glob();
Packit Service a2489d
   void DirectoriesOnly() { dirs_only=true; }
Packit Service a2489d
   void FilesOnly() { files_only=true; }
Packit Service a2489d
   void NoMatchPeriod() { match_period=false; }
Packit Service a2489d
   void NoInhibitTilde() { inhibit_tilde=false; }
Packit Service a2489d
   void CaseFold() { casefold=true; }
Packit Service a2489d
Packit Service a2489d
   void MatchPeriod(bool y) { match_period=y; }
Packit Service a2489d
   void InhibitTilde(bool y) { inhibit_tilde=y; }
Packit Service a2489d
   void CaseFold(bool y) { casefold=y; }
Packit Service a2489d
Packit Service a2489d
   static bool HasWildcards(const char *);
Packit Service a2489d
   static void UnquoteWildcards(char *);
Packit Service a2489d
};
Packit Service a2489d
class NoGlob : public Glob
Packit Service a2489d
{
Packit Service a2489d
public:
Packit Service a2489d
   NoGlob(const char *p);
Packit Service a2489d
   const char *Status() { return ""; }
Packit Service a2489d
   int Do();
Packit Service a2489d
};
Packit Service a2489d
class GlobURL
Packit Service a2489d
{
Packit Service a2489d
   const FileAccessRef& orig_session;
Packit Service a2489d
   FileAccessRef my_session;
Packit Service a2489d
   FileAccessRefC session;
Packit Service a2489d
   xstring_c url_prefix;
Packit Service a2489d
   bool nullglob;
Packit Service a2489d
public:
Packit Service a2489d
   SMTaskRef<Glob> glob;
Packit Service a2489d
Packit Service a2489d
   enum type_select
Packit Service a2489d
   {
Packit Service a2489d
      ALL,
Packit Service a2489d
      FILES_ONLY,
Packit Service a2489d
      DIRS_ONLY
Packit Service a2489d
   };
Packit Service a2489d
Packit Service a2489d
   GlobURL(const FileAccessRef& s,const char *p,type_select t=ALL);
Packit Service a2489d
   ~GlobURL();
Packit Service a2489d
   FileSet *GetResult();
Packit Service a2489d
   bool Done()  { return glob->Done(); }
Packit Service a2489d
   bool Error() { return glob->Error(); }
Packit Service a2489d
   const char *ErrorText() { return glob->ErrorText(); }
Packit Service a2489d
   const char *Status() { return glob->Status(); }
Packit Service a2489d
Packit Service a2489d
   void NewGlob(const char *p);
Packit Service a2489d
   const char *GetPattern() { return glob->GetPattern(); }
Packit Service a2489d
Packit Service a2489d
   void NoMatchPeriod()	   { if(glob) glob->NoMatchPeriod(); }
Packit Service a2489d
   void NoInhibitTilde()   { if(glob) glob->NoInhibitTilde(); }
Packit Service a2489d
   void CaseFold()	   { if(glob) glob->CaseFold(); }
Packit Service a2489d
   void NullGlob(bool y=true) { nullglob=y; }
Packit Service a2489d
Packit Service a2489d
private:
Packit Service a2489d
   type_select type;
Packit Service a2489d
};
Packit Service a2489d
Packit Service a2489d
class GenericGlob : public Glob
Packit Service a2489d
{
Packit Service a2489d
   const char *curr_dir;
Packit Service a2489d
   FileSet *dir_list;
Packit Service a2489d
   SMTaskRef<Glob> updir_glob;
Packit Service a2489d
   SMTaskRef<ListInfo> li;
Packit Service a2489d
Packit Service a2489d
public:
Packit Service a2489d
   int	 Do();
Packit Service a2489d
   const char *Status();
Packit Service a2489d
Packit Service a2489d
   GenericGlob(FileAccess *session,const char *n_pattern);
Packit Service a2489d
};
Packit Service a2489d
Packit Service a2489d
#endif