]> arthur.barton.de Git - netatalk.git/blob - include/atalk/cnid.h
file mac_chinese_simp.c was added on branch branch-netatalk-2-0 on 2009-01-13 01...
[netatalk.git] / include / atalk / cnid.h
1 /* 
2  * $Id: cnid.h,v 1.9.6.6.2.2 2005-09-27 10:40:41 didg Exp $
3  *
4  * Copyright (c) 2003 the Netatalk Team
5  * Copyright (c) 2003 Rafal Lewczuk <rlewczuk@pronet.pl>
6  * 
7  * This program is free software; you can redistribute and/or modify
8  * it under the terms of the GNU General Public License as published
9  * by the Free Software Foundation version 2 of the License or later
10  * version if explicitly stated by any of above copyright holders.
11  *
12  */
13
14 /* 
15  * This file contains all generic CNID related stuff 
16  * declarations. Included:
17  * - CNID factory, which retrieves (eventually instantiates) 
18  *   CNID objects on demand
19  * - selection of CNID backends (default, detected by volume)
20  * - full set of CNID operations needed by server core.
21  */
22
23 #ifndef _ATALK_CNID__H
24 #define _ATALK_CNID__H 1
25
26 #include <atalk/adouble.h>
27 #include <atalk/list.h>
28
29 /* CNID object flags */
30 #define CNID_FLAG_PERSISTENT   0x01      /* This backend implements DID persistence */
31 #define CNID_FLAG_MANGLING     0x02      /* This backend has name mangling feature. */
32 #define CNID_FLAG_SETUID       0x04      /* Set db owner to parent folder owner. */
33 #define CNID_FLAG_BLOCK        0x08      /* block signals in update. */
34 #define CNID_FLAG_NODEV        0x10      /* don't use device number only inode */
35
36 #define CNID_INVALID   0
37
38 #define CNID_ERR_PARAM 0x80000001
39 #define CNID_ERR_PATH  0x80000002
40 #define CNID_ERR_DB    0x80000003
41 #define CNID_ERR_CLOSE 0x80000004   /* the db was not open */
42 #define CNID_ERR_MAX   0x80000005
43
44 /*
45  * This is instance of CNID database object.
46  */
47 struct _cnid_db {
48         
49         u_int32_t flags;             /* Flags describing some CNID backend aspects. */
50         char *volpath;               /* Volume path this particular CNID db refers to. */
51         void *_private;              /* back-end speficic data */
52
53         cnid_t (*cnid_add)(struct _cnid_db *cdb, const struct stat *st, const cnid_t did, 
54                         char *name, const size_t, cnid_t hint);
55         int (*cnid_delete)(struct _cnid_db *cdb, cnid_t id);
56         cnid_t (*cnid_get)(struct _cnid_db *cdb, const cnid_t did, char *name, const  size_t);
57         cnid_t (*cnid_lookup)(struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
58                         char *name, const size_t);
59         cnid_t (*cnid_nextid)(struct _cnid_db *cdb);
60         char *(*cnid_resolve)(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len);
61         int (*cnid_update)(struct _cnid_db *cdb, const cnid_t id, const struct stat *st, 
62                         const cnid_t did, char *name, const size_t len);        
63         void (*cnid_close)(struct _cnid_db *cdb);
64         int  (*cnid_getstamp)(struct _cnid_db *cdb, void *buffer, const size_t len);
65 };
66 typedef struct _cnid_db cnid_db;
67
68 /*
69  * CNID module - represents particular CNID implementation
70  */
71 struct _cnid_module {
72         char *name;
73         struct list_head db_list;   /* CNID modules are also stored on a bidirectional list. */
74         struct _cnid_db *(*cnid_open)(const char *dir, mode_t mask);
75         u_int32_t flags;            /* Flags describing some CNID backend aspects. */
76
77 };
78 typedef struct _cnid_module cnid_module;
79
80 /* Inititalize the CNID backends */
81 void cnid_init();
82
83 /* Registers new CNID backend module */
84 void cnid_register(struct _cnid_module *module);
85
86 /* This function opens a CNID database for selected volume. */
87 struct _cnid_db *cnid_open(const char *volpath, mode_t mask, char *type, int flags);
88
89 cnid_t cnid_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did, 
90                         char *name, const size_t len, cnid_t hint);
91
92 int    cnid_delete(struct _cnid_db *cdb, cnid_t id);
93
94 cnid_t cnid_get   (struct _cnid_db *cdb, const cnid_t did, char *name,const size_t len);
95
96 int    cnid_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len);
97
98 cnid_t cnid_lookup(struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
99                         char *name, const size_t len);
100
101 char *cnid_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t len);
102
103 int cnid_update   (struct _cnid_db *cdb, const cnid_t id, const struct stat *st, 
104                         const cnid_t did, char *name, const size_t len);
105
106 cnid_t cnid_rebuild_add(struct _cnid_db *cdb, const struct stat *st, const cnid_t did,
107                         char *name, const size_t len, cnid_t hint);
108
109
110 /* This function closes a CNID database and frees all resources assigned to it. */ 
111 void cnid_close(struct _cnid_db *db);
112
113 #endif
114