} bvfs_handler_type;
typedef enum {
- BVFS_Id = 0,
+ BVFS_Id = 0, /* Could be PathId or FilenameId */
BVFS_Name = 1,
BVFS_JobId = 2,
BVFS_LStat = 3,
- BVFS_FileId = 4, /* Only if File record */
+ /* Only if File record */
+ BVFS_FileId = 4,
+
+ /* Only if File Version record */
+ BVFS_Md5 = 1,
+ BVFS_VolName = 4,
+ BVFS_VolInchanger = 5
} bvfs_row_index;
class Bvfs {
virtual ~Bvfs();
void set_jobid(JobId_t id) {
- Mmsg(jobids, "%lld", (uint64_t)id);
+ Mmsg(jobids.list, "%lld", (uint64_t)id);
}
void set_jobids(char *ids) {
- pm_strcpy(jobids, ids);
+ pm_strcpy(jobids.list, ids);
}
void set_limit(uint32_t max) {
* avoids mistakes with string encoding
*/
void ch_dir(DBId_t pathid) {
+ reset_offset();
pwd_id = pathid;
}
/*
* Returns true if the directory exists
*/
- bool ch_dir(char *path);
+ bool ch_dir(const char *path);
- void ls_files();
- void ls_dirs();
+ bool ls_files(); /* Returns true if we have more files to read */
+ bool ls_dirs(); /* Returns true if we have more dir to read */
void ls_special_dirs(); /* get . and .. */
- void get_all_file_versions(DBId_t pathid, DBId_t fnid, char *client);
+ void get_all_file_versions(DBId_t pathid, DBId_t fnid, const char *client);
void update_cache();
user_data = ctx;
}
+ DBId_t get_pwd() {
+ return pwd_id;
+ }
+
ATTR *get_attr() {
return attr;
}
return jcr;
}
-private:
+ void reset_offset() {
+ offset=0;
+ }
+
+ void next_offset() {
+ offset+=limit;
+ }
+
+ /* for internal use */
+ int _handle_path(void *, int, char **);
+
+private:
+ Bvfs(const Bvfs &); /* prohibit pass by value */
+ Bvfs & operator = (const Bvfs &); /* prohibit class assignment */
+
JCR *jcr;
B_DB *db;
- POOLMEM *jobids;
+ db_list_ctx jobids;
uint32_t limit;
uint32_t offset;
+ uint32_t nb_record; /* number of records of the last query */
POOLMEM *pattern;
- DBId_t pwd_id;
- DBId_t dir_filenameid;
- ATTR *attr;
+ DBId_t pwd_id; /* Current pathid */
+ DBId_t dir_filenameid; /* special FilenameId where Name='' */
+ POOLMEM *prev_dir; /* ls_dirs query returns all versions, take the 1st one */
+ ATTR *attr; /* Can be use by handler to call decode_stat() */
bool see_all_version;
bool see_copies;
DBId_t get_dir_filenameid();
-
+
DB_RESULT_HANDLER *list_entries;
void *user_data;
};
-void bvfs_update_path_hierarchy_cache(JCR *jcr, B_DB *mdb, char *jobids);
+void bvfs_update_path_hierarchy_cache(JCR *jcr, B_DB *mdb, db_list_ctx *jobids);
void bvfs_update_cache(JCR *jcr, B_DB *mdb);
char *bvfs_parent_dir(char *path);