This source file includes following definitions.
- vfs_path_element_valid
- vfs_path_get_last_path_str
- vfs_path_get_last_path_vfs
- vfs_path_as_str
1 #ifndef MC__VFS_PATH_H
2 #define MC__VFS_PATH_H
3
4
5
6 #define VFS_PATH_URL_DELIMITER "://"
7
8
9
10 typedef enum
11 {
12 VPF_NONE = 0,
13 VPF_NO_CANON = 1 << 0,
14 VPF_USE_DEPRECATED_PARSER = 1 << 1,
15 VPF_RECODE = 1 << 2,
16 VPF_STRIP_HOME = 1 << 3,
17 VPF_STRIP_PASSWORD = 1 << 4,
18 VPF_HIDE_CHARSET = 1 << 5
19 } vfs_path_flag_t;
20
21
22
23 struct vfs_class;
24 struct vfs_url_struct;
25
26 typedef struct
27 {
28 gboolean relative;
29 GArray *path;
30 char *str;
31 } vfs_path_t;
32
33 typedef struct
34 {
35 char *user;
36 char *password;
37 char *host;
38 gboolean ipv6;
39 int port;
40 char *path;
41 struct vfs_class *class;
42 char *encoding;
43 char *vfs_prefix;
44
45 struct
46 {
47 GIConv converter;
48 DIR *info;
49 } dir;
50 } vfs_path_element_t;
51
52
53
54
55
56 vfs_path_t *vfs_path_new (gboolean relative);
57 vfs_path_t *vfs_path_clone (const vfs_path_t *vpath);
58 void vfs_path_remove_element_by_index (vfs_path_t *vpath, int element_index);
59 char *vfs_path_free (vfs_path_t *path, gboolean free_str);
60 int vfs_path_elements_count (const vfs_path_t *path);
61
62 char *vfs_path_to_str_elements_count (const vfs_path_t *path, int elements_count);
63 char *vfs_path_to_str_flags (const vfs_path_t *vpath, int elements_count, vfs_path_flag_t flags);
64 vfs_path_t *vfs_path_from_str (const char *path_str);
65 vfs_path_t *vfs_path_from_str_flags (const char *path_str, vfs_path_flag_t flags);
66 vfs_path_t *vfs_path_build_filename (const char *first_element, ...);
67 vfs_path_t *vfs_path_append_new (const vfs_path_t *vpath, const char *first_element, ...);
68 vfs_path_t *vfs_path_append_vpath_new (const vfs_path_t *first_vpath, ...);
69 size_t vfs_path_tokens_count (const vfs_path_t *vpath);
70 char *vfs_path_tokens_get (const vfs_path_t *vpath, ssize_t start_position, ssize_t length);
71 vfs_path_t *vfs_path_vtokens_get (const vfs_path_t *vpath, ssize_t start_position, ssize_t length);
72
73 void vfs_path_add_element (vfs_path_t *vpath, const vfs_path_element_t *path_element);
74 const vfs_path_element_t *vfs_path_get_by_index (const vfs_path_t *path, int element_index);
75 vfs_path_element_t *vfs_path_element_clone (const vfs_path_element_t *element);
76 void vfs_path_element_free (vfs_path_element_t *element);
77
78 struct vfs_class *vfs_prefix_to_class (const char *prefix);
79
80 char *vfs_get_encoding (const char *path, ssize_t len);
81 gboolean vfs_path_element_need_cleanup_converter (const vfs_path_element_t *element);
82 vfs_path_t *vfs_path_change_encoding (vfs_path_t *vpath, const char *encoding);
83
84 char *vfs_path_serialize (const vfs_path_t *vpath, GError **error);
85 vfs_path_t *vfs_path_deserialize (const char *data, GError **error);
86
87 GString *vfs_path_build_url_params_str (const vfs_path_element_t *element, gboolean keep_password);
88 GString *vfs_path_element_build_pretty_path_str (const vfs_path_element_t *element);
89
90 size_t vfs_path_len (const vfs_path_t *vpath);
91 gboolean vfs_path_equal (const vfs_path_t *vpath1, const vfs_path_t *vpath2);
92 gboolean vfs_path_equal_len (const vfs_path_t *vpath1, const vfs_path_t *vpath2, size_t len);
93 vfs_path_t *vfs_path_to_absolute (const vfs_path_t *vpath);
94
95
96
97 static inline gboolean
98 vfs_path_element_valid (const vfs_path_element_t *element)
99 {
100 return (element != NULL && element->class != NULL);
101 }
102
103
104
105 static inline const char *
106 vfs_path_get_last_path_str (const vfs_path_t *vpath)
107 {
108 const vfs_path_element_t *element;
109
110 if (vpath == NULL)
111 return NULL;
112 element = vfs_path_get_by_index (vpath, -1);
113 return (element != NULL) ? element->path : NULL;
114 }
115
116
117
118 static inline const struct vfs_class *
119 vfs_path_get_last_path_vfs (const vfs_path_t *vpath)
120 {
121 const vfs_path_element_t *element;
122
123 if (vpath == NULL)
124 return NULL;
125 element = vfs_path_get_by_index (vpath, -1);
126 return (element != NULL) ? element->class : NULL;
127 }
128
129
130
131
132
133
134
135
136
137
138 static inline const char *
139 vfs_path_as_str (const vfs_path_t *vpath)
140 {
141 return (vpath == NULL ? NULL : vpath->str);
142 }
143
144
145
146 #endif