Disk ARchive  2.4.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
line_tools.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2052 Denis Corbin
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 //
19 // to contact the author : http://dar.linux.free.fr/email.html
20 /*********************************************************************/
21 // $Id: line_tools.hpp,v 1.12 2011/01/09 17:25:58 edrusb Rel $
22 //
23 /*********************************************************************/
24 
25 
29 
30 #ifndef LINE_TOOLS_HPP
31 #define LINE_TOOLS_HPP
32 
33 #include "../my_config.h"
34 
35 #include <string>
36 #include "infinint.hpp"
37 #include "tlv_list.hpp"
38 #include "integers.hpp"
39 
40 using namespace libdar;
41 
44 
45 class argc_argv
46 {
47 public:
48  argc_argv(S_I size = 0);
49  argc_argv(const argc_argv & ref) { throw Efeature("argc_argv"); };
50  const argc_argv & operator = (const argc_argv & ref) { throw Efeature("argc_argv"); };
51  ~argc_argv();
52 
53  void resize(S_I size);
54  void set_arg(const std::string & arg, S_I index);
55  void set_arg(generic_file & f, U_I size, S_I index);
56 
57  S_I argc() const { return x_argc; };
58  char* const * argv() const { return x_argv; }; // well the const method is a bit silly, as the call has the possibility to modify what is pointed to by the returned value...
59 
60 private:
61  S_I x_argc;
62  char **x_argv;
63 };
64 
65 extern void line_tools_slice_ownership(const std::string & cmd, std::string & slice_permission, std::string & slice_user_ownership, std::string & slice_group_ownership);
66 extern void line_tools_repeat_param(const std::string & cmd, infinint & repeat_count, infinint & repeat_byte);
67 extern void line_tools_tlv_list2argv(user_interaction & dialog, const tlv_list & list, argc_argv & arg);
68 
70 extern S_I line_tools_reset_getopt();
71 
72 
73 std::string::const_iterator line_tools_find_first_char_out_of_parenth(const std::string & argument, unsigned char to_find);
74 std::string::const_iterator line_tools_find_last_char_out_of_parenth(const std::string & argument, unsigned char to_find);
75 
76 std::string line_tools_expand_user_comment(const std::string & user_comment, S_I argc, char *const argv[]);
77 
79 std::vector<std::string> line_tools_explode_PATH(const char *the_path);
80 
82 std::string line_tools_get_full_path_from_PATH(const std::vector<std::string> & the_path, const char * filename);
83 
85 void line_tools_split_at_first_space(const char *field, std::string & before_space, std::string & after_space);
86 
87 void line_tools_get_min_digits(std::string arg, infinint & num, infinint & ref_num, infinint & aux_num);
88 
90 
91 #endif