CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
libcvmfs.h
Go to the documentation of this file.
1 
15 #ifndef CVMFS_LIBCVMFS_H_
16 #define CVMFS_LIBCVMFS_H_
17 
18 #define LIBCVMFS_VERSION 2
19 #define LIBCVMFS_VERSION_MAJOR LIBCVMFS_VERSION
20 #define LIBCVMFS_VERSION_MINOR 12
21 // Revision Changelog
22 // 13: revision introduced
23 // 14: fix expand_path for absolute paths, add mountpoint to cvmfs_context
24 // 15: remove counting of open file descriptors
25 // 16: remove unnecessary free
26 // 17: apply new classes around the cache manager
27 // 18: add cvmfs_pread and support for chunked files
28 // 19: CernVM-FS 2.2.0
29 // 20: fix reading of chunked files
30 // 21: CernVM-FS 2.2.3
31 // 22: CernVM-FS 2.3.0
32 // 23: update initialization code
33 // 24: add LIBCVMFS_ERR_REVISION_BLACKLISTED
34 // 25: CernVM-FS 2.4.0
35 // 26: CernVM-FS 2.5.0
36 // 27: Add cvmfs_options_init_v2
37 // 28: CernVM-FS 2.6.0
38 // 29: CernVM-FS 2.8
39 // * Add cvmfs_options_parse_default
40 // * Add cvmfs_listdir_stat
41 // * Add catalog counters to struct cvmfs_nc_attr
42 // 30: CernVM-FS 2.8
43 // * Implement cvmfs_remount()
44 // * Add cvmfs_get_revision()
45 // 31: CernVM-FS 2.11
46 // * Move from static libcvmfs.a to shared libcvmfs_client.so
47 #define LIBCVMFS_REVISION 31
48 
49 #include <stdint.h>
50 #include <sys/stat.h>
51 #include <unistd.h>
52 
53 // Legacy error codes
54 #define LIBCVMFS_FAIL_OK 0
55 #define LIBCVMFS_FAIL_NOFILES -1
56 #define LIBCVMFS_FAIL_MKCACHE -2
57 #define LIBCVMFS_FAIL_OPENCACHE -3
58 #define LIBCVMFS_FAIL_LOCKFILE -4
59 #define LIBCVMFS_FAIL_INITCACHE -5
60 #define LIBCVMFS_FAIL_INITQUOTA -6
61 #define LIBCVMFS_FAIL_BADOPT -7
62 
63 
64 #ifdef __cplusplus
65 extern "C" {
66 // Map C++ classes to their C interface names
67 typedef class LibContext cvmfs_context;
68 typedef class SimpleOptionsParser cvmfs_option_map;
69 #else
70 typedef struct LibContext cvmfs_context;
71 typedef struct OptionsManager cvmfs_option_map;
72 #endif
73 
78 typedef enum {
83  LIBCVMFS_ERR_MOUNT, // unused in the library
84  LIBCVMFS_ERR_LOADER_TALK, // unused in the library
85  LIBCVMFS_ERR_FUSE_LOOP, // unused in the library
86  LIBCVMFS_ERR_LOAD_LIBRARY, // unused in the library
89  LIBCVMFS_ERR_PEERS, // unused
92  LIBCVMFS_ERR_MONITOR, // unused in the library
93  LIBCVMFS_ERR_TALK, // unused in the library
96  LIBCVMFS_ERR_MAINTENANCE_MODE, // unused in the library
97  LIBCVMFS_ERR_SAVE_STATE, // unused in the library
98  LIBCVMFS_ERR_RESTORE_STATE, // unused in the library
99  LIBCVMFS_ERR_OTHER_MOUNT, // unused in the library
100  LIBCVMFS_ERR_DOUBLE_MOUNT, // unused in the library
105 } cvmfs_errors;
106 
117  char *mountpoint;
118  char *hash;
119  uint64_t size;
120 
121  // Catalog counters
122  uint64_t ctr_regular;
123  uint64_t ctr_symlink;
124  uint64_t ctr_special;
125  uint64_t ctr_dir;
126  uint64_t ctr_nested;
127  uint64_t ctr_chunked;
128  uint64_t ctr_chunks;
129  uint64_t ctr_file_size;
131  uint64_t ctr_xattr;
132  uint64_t ctr_external;
134 };
135 
142 
148 void cvmfs_nc_attr_free(struct cvmfs_nc_attr *nc_attr);
149 
150 struct cvmfs_attr {
151  /* Struct definition information */
152  unsigned version;
153  uint64_t size;
154 
155  /* Contents of stat, mapped from DirectoryEntry */
156  dev_t st_dev;
157  ino_t st_ino;
158  mode_t st_mode;
159  nlink_t st_nlink;
160  uid_t st_uid;
161  gid_t st_gid;
162  dev_t st_rdev;
163  off_t st_size;
164  time_t mtime;
165 
166  /* CVMFS related content */
169  /* This information is allocated and should be freed */
170  // For chunked files without bulk hash: hash of chunk hashes
171  char * cvm_checksum;
172  char * cvm_symlink;
173  char * cvm_parent;
174  char * cvm_name;
175  void * cvm_xattrs;
176 };
177 
178 
182 struct cvmfs_stat_t {
183  // name of the object, owned by the struct (needs to be freed)
184  char * name;
185  struct stat info;
186 };
187 
193 struct cvmfs_attr* cvmfs_attr_init();
194 
200 void cvmfs_attr_free(struct cvmfs_attr *attr);
201 
207 void cvmfs_set_log_fn( void (*log_fn)(const char *msg) );
208 
215 char *cvmfs_statistics_format(cvmfs_context *ctx);
216 
220 cvmfs_option_map *cvmfs_options_init();
225 cvmfs_option_map *cvmfs_options_init_v2(int taint_environ);
226 
227 
228 void cvmfs_enable_threaded(cvmfs_context *ctx);
229 
235 cvmfs_option_map *cvmfs_options_init_legacy(const char *legacy_options);
241 cvmfs_option_map *cvmfs_options_clone(cvmfs_option_map *opts);
248 cvmfs_option_map *cvmfs_options_clone_legacy(cvmfs_option_map *opts,
249  const char *legacy_options);
254 void cvmfs_options_fini(cvmfs_option_map *opts);
259 void cvmfs_options_set(cvmfs_option_map *opts,
260  const char *key, const char *value);
265 int cvmfs_options_parse(cvmfs_option_map *opts, const char *path);
270 void cvmfs_options_parse_default(cvmfs_option_map *opts, const char *fqrn);
275 void cvmfs_options_unset(cvmfs_option_map *opts, const char *key);
280 char *cvmfs_options_get(cvmfs_option_map *opts, const char *key);
285 char *cvmfs_options_dump(cvmfs_option_map *opts);
289 void cvmfs_options_free(char *value);
290 
291 
299 int cvmfs_init(char const *options);
300 
301 
306 cvmfs_errors cvmfs_init_v2(cvmfs_option_map *opts);
307 
308 
314 void cvmfs_fini();
315 
322 cvmfs_context* cvmfs_attach_repo(char const *options);
323 
333 cvmfs_errors cvmfs_attach_repo_v2(const char *fqrn, cvmfs_option_map *opts,
334  cvmfs_context **ctx);
335 
340 void cvmfs_adopt_options(cvmfs_context *ctx, cvmfs_option_map *opts);
341 
342 
347 void cvmfs_detach_repo(cvmfs_context *ctx);
348 
349 
354 int cvmfs_remount(cvmfs_context *ctx);
355 
356 
363 int cvmfs_open(cvmfs_context *ctx, const char *path);
364 
365 
370 ssize_t cvmfs_pread(cvmfs_context *ctx,
371  int fd, void *buf, size_t size, off_t off);
372 
379 int cvmfs_close(cvmfs_context *ctx, int fd);
380 
392 int cvmfs_readlink(cvmfs_context *ctx,
393  const char *path,
394  char *buf,
395  size_t size);
396 
405 int cvmfs_stat(cvmfs_context *ctx, const char *path, struct stat *st);
406 
415 int cvmfs_lstat(cvmfs_context *ctx, const char *path, struct stat *st);
416 
425 int cvmfs_stat_attr(
426  cvmfs_context *ctx,
427  const char *path,
428  struct cvmfs_attr *attr);
429 
444 int cvmfs_listdir(
445  cvmfs_context *ctx,
446  const char *path,
447  char ***buf,
448  size_t *buflen);
449 
464  cvmfs_context *ctx,
465  const char *path,
466  char ***buf,
467  size_t *listlen,
468  size_t *buflen);
469 
487  cvmfs_context *ctx,
488  const char *path,
489  struct cvmfs_stat_t **buf,
490  size_t *listlen,
491  size_t *buflen);
492 
503 int cvmfs_stat_nc(
504  cvmfs_context *ctx,
505  const char *path,
506  struct cvmfs_nc_attr *ncst);
507 
525 int cvmfs_list_nc(
526  cvmfs_context *ctx,
527  const char *path,
528  char ***buf,
529  size_t *buflen);
530 
531 
536 void cvmfs_list_free(char **buf);
537 
541 uint64_t cvmfs_get_revision(cvmfs_context *ctx);
542 
543 #ifdef __cplusplus
544 }
545 #endif
546 
547 #endif // CVMFS_LIBCVMFS_H_
int cvmfs_options_parse(cvmfs_option_map *opts, const char *path)
nlink_t st_nlink
Definition: libcvmfs.h:159
char * cvm_symlink
Definition: libcvmfs.h:172
int cvmfs_list_nc(LibContext *ctx, const char *path, char ***buf, size_t *buflen)
Definition: libcvmfs.cc:446
void cvmfs_options_parse_default(cvmfs_option_map *opts, const char *fqrn)
struct cvmcache_context * ctx
void cvmfs_detach_repo(LibContext *ctx)
Definition: libcvmfs.cc:514
uint64_t ctr_external_file_size
Definition: libcvmfs.h:133
char * cvm_name
Definition: libcvmfs.h:174
char * mountpoint
Definition: libcvmfs.h:117
int cvmfs_listdir_contents(LibContext *ctx, const char *path, char ***buf, size_t *listlen, size_t *buflen)
Definition: libcvmfs.cc:376
void cvmfs_fini()
Definition: libcvmfs.cc:531
void cvmfs_attr_free(struct cvmfs_attr *attr)
Definition: libcvmfs.cc:53
struct cvmfs_nc_attr * cvmfs_nc_attr_init()
Definition: libcvmfs.cc:66
cvmfs_context * cvmfs_attach_repo(char const *options)
cvmfs_errors cvmfs_init_v2(SimpleOptionsParser *opts)
Definition: libcvmfs.cc:519
cvmfs_option_map * cvmfs_options_clone(cvmfs_option_map *opts)
int cvmfs_stat_attr(LibContext *ctx, const char *path, struct cvmfs_attr *attr)
Definition: libcvmfs.cc:331
dev_t st_dev
Definition: libcvmfs.h:156
cvmfs_option_map * cvmfs_options_init()
uint64_t ctr_external
Definition: libcvmfs.h:132
int cvmfs_stat_nc(LibContext *ctx, const char *path, struct cvmfs_nc_attr *nc_attr)
Definition: libcvmfs.cc:424
char * cvm_parent
Definition: libcvmfs.h:173
void cvmfs_options_set(cvmfs_option_map *opts, const char *key, const char *value)
uint64_t ctr_xattr
Definition: libcvmfs.h:131
char * cvmfs_statistics_format(cvmfs_context *ctx)
Definition: libcvmfs.cc:561
static void cvmfs_init(void *userdata, struct fuse_conn_info *conn)
Definition: cvmfs.cc:2003
uint64_t cvmfs_get_revision(LibContext *ctx)
Definition: libcvmfs.cc:575
char * cvm_checksum
Definition: libcvmfs.h:171
char * hash
Definition: libcvmfs.h:118
uint64_t ctr_regular
Definition: libcvmfs.h:122
void cvmfs_list_free(char **buf)
Definition: libcvmfs.cc:469
int cvmfs_listdir_stat(LibContext *ctx, const char *path, struct cvmfs_stat_t **buf, size_t *listlen, size_t *buflen)
Definition: libcvmfs.cc:399
void cvmfs_enable_threaded(LibContext *ctx)
Definition: libcvmfs.cc:483
void cvmfs_options_fini(cvmfs_option_map *opts)
void * cvm_xattrs
Definition: libcvmfs.h:175
int cvmfs_stat(LibContext *ctx, const char *path, struct stat *st)
Definition: libcvmfs.cc:295
cvmfs_errors cvmfs_attach_repo_v2(const char *fqrn, SimpleOptionsParser *opts, LibContext **ctx)
Definition: libcvmfs.cc:489
time_t mtime
Definition: libcvmfs.h:164
gid_t st_gid
Definition: libcvmfs.h:161
char * cvmfs_options_get(cvmfs_option_map *opts, const char *key)
static void cvmfs_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)
Definition: cvmfs.cc:1119
uint64_t ctr_chunked_size
Definition: libcvmfs.h:130
int cvmfs_lstat(LibContext *ctx, const char *path, struct stat *st)
Definition: libcvmfs.cc:313
off_t st_size
Definition: libcvmfs.h:163
int cvm_is_hash_artificial
Definition: libcvmfs.h:168
int cvmfs_listdir(LibContext *ctx, const char *path, char ***buf, size_t *buflen)
Definition: libcvmfs.cc:353
char * name
Definition: libcvmfs.h:184
char * cvmfs_options_dump(cvmfs_option_map *opts)
cvmfs_option_map * cvmfs_options_init_legacy(const char *legacy_options)
void cvmfs_nc_attr_free(struct cvmfs_nc_attr *nc_attr)
Definition: libcvmfs.cc:73
cvmfs_option_map * cvmfs_options_init_v2(int taint_environ)
static void cvmfs_readlink(fuse_req_t req, fuse_ino_t ino)
Definition: cvmfs.cc:826
uint64_t ctr_chunked
Definition: libcvmfs.h:127
void cvmfs_options_free(char *value)
void cvmfs_options_unset(cvmfs_option_map *opts, const char *key)
cvmfs_option_map * cvmfs_options_clone_legacy(cvmfs_option_map *opts, const char *legacy_options)
ssize_t cvmfs_pread(LibContext *ctx, int fd, void *buf, size_t size, off_t off)
Definition: libcvmfs.cc:245
ino_t st_ino
Definition: libcvmfs.h:157
uint64_t ctr_symlink
Definition: libcvmfs.h:123
uint64_t size
Definition: libcvmfs.h:119
uint64_t ctr_chunks
Definition: libcvmfs.h:128
unsigned version
Definition: libcvmfs.h:152
uint64_t ctr_file_size
Definition: libcvmfs.h:129
uint64_t size
Definition: libcvmfs.h:153
uid_t st_uid
Definition: libcvmfs.h:160
uint64_t ctr_dir
Definition: libcvmfs.h:125
struct stat info
Definition: libcvmfs.h:185
dev_t st_rdev
Definition: libcvmfs.h:162
int cvmfs_close(LibContext *ctx, int fd)
Definition: libcvmfs.cc:261
int cvm_nchunks
Definition: libcvmfs.h:167
uint64_t ctr_special
Definition: libcvmfs.h:124
int cvmfs_remount(LibContext *ctx)
Definition: libcvmfs.cc:569
static void size_t size
Definition: smalloc.h:54
struct cvmfs_attr * cvmfs_attr_init()
Definition: libcvmfs.cc:39
void cvmfs_set_log_fn(void(*log_fn)(const char *msg))
Definition: libcvmfs.cc:550
void cvmfs_adopt_options(cvmfs_context *ctx, SimpleOptionsParser *opts)
Definition: libcvmfs.cc:509
mode_t st_mode
Definition: libcvmfs.h:158
cvmfs_errors
Definition: libcvmfs.h:78
uint64_t ctr_nested
Definition: libcvmfs.h:126