diff options
Diffstat (limited to 'subversion/libsvn_fs_base/bdb/strings-table.h')
-rw-r--r-- | subversion/libsvn_fs_base/bdb/strings-table.h | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/subversion/libsvn_fs_base/bdb/strings-table.h b/subversion/libsvn_fs_base/bdb/strings-table.h new file mode 100644 index 0000000..443cb72 --- /dev/null +++ b/subversion/libsvn_fs_base/bdb/strings-table.h @@ -0,0 +1,143 @@ +/* strings-table.h : internal interface to `strings' table + * + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + */ + +#ifndef SVN_LIBSVN_FS_STRINGS_TABLE_H +#define SVN_LIBSVN_FS_STRINGS_TABLE_H + +#define SVN_WANT_BDB +#include "svn_private_config.h" + +#include "svn_io.h" +#include "svn_fs.h" +#include "../trail.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/* This interface provides raw access to the `strings' table. It does + not deal with deltification, undeltification, or skels. It just + reads and writes strings of bytes. */ + + +/* Open a `strings' table in ENV. If CREATE is non-zero, create + * one if it doesn't exist. Set *STRINGS_P to the new table. + * Return a Berkeley DB error code. + */ +int svn_fs_bdb__open_strings_table(DB **strings_p, + DB_ENV *env, + svn_boolean_t create); + + +/* Read *LEN bytes into BUF from OFFSET in string KEY in FS, as part + * of TRAIL. + * + * On return, *LEN is set to the number of bytes read. If this value + * is less than the number requested, the end of the string has been + * reached (no error is returned on end-of-string). + * + * If OFFSET is past the end of the string, then *LEN will be set to + * zero. Callers which are advancing OFFSET as they read portions of + * the string can terminate their loop when *LEN is returned as zero + * (which will occur when OFFSET == length(the string)). + * + * If string KEY does not exist, the error SVN_ERR_FS_NO_SUCH_STRING + * is returned. + */ +svn_error_t *svn_fs_bdb__string_read(svn_fs_t *fs, + const char *key, + char *buf, + svn_filesize_t offset, + apr_size_t *len, + trail_t *trail, + apr_pool_t *pool); + + +/* Set *SIZE to the size in bytes of string KEY in FS, as part of + * TRAIL. + * + * If string KEY does not exist, return SVN_ERR_FS_NO_SUCH_STRING. + */ +svn_error_t *svn_fs_bdb__string_size(svn_filesize_t *size, + svn_fs_t *fs, + const char *key, + trail_t *trail, + apr_pool_t *pool); + + +/* Append LEN bytes from BUF to string *KEY in FS, as part of TRAIL. + * + * If *KEY is null, then create a new string and store the new key in + * *KEY (allocating it in POOL), and write LEN bytes from BUF + * as the initial contents of the string. + * + * If *KEY is not null but there is no string named *KEY, return + * SVN_ERR_FS_NO_SUCH_STRING. + * + * Note: to overwrite the old contents of a string, call + * svn_fs_bdb__string_clear() and then svn_fs_bdb__string_append(). */ +svn_error_t *svn_fs_bdb__string_append(svn_fs_t *fs, + const char **key, + apr_size_t len, + const char *buf, + trail_t *trail, + apr_pool_t *pool); + + +/* Make string KEY in FS zero length, as part of TRAIL. + * If the string does not exist, return SVN_ERR_FS_NO_SUCH_STRING. + */ +svn_error_t *svn_fs_bdb__string_clear(svn_fs_t *fs, + const char *key, + trail_t *trail, + apr_pool_t *pool); + + +/* Delete string KEY from FS, as part of TRAIL. + * + * If string KEY does not exist, return SVN_ERR_FS_NO_SUCH_STRING. + * + * WARNING: Deleting a string renders unusable any representations + * that refer to it. Be careful. + */ +svn_error_t *svn_fs_bdb__string_delete(svn_fs_t *fs, + const char *key, + trail_t *trail, + apr_pool_t *pool); + + +/* Copy the contents of the string referred to by KEY in FS into a new + * record, returning the new record's key in *NEW_KEY. All + * allocations (including *NEW_KEY) occur in POOL. */ +svn_error_t *svn_fs_bdb__string_copy(svn_fs_t *fs, + const char **new_key, + const char *key, + trail_t *trail, + apr_pool_t *pool); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* SVN_LIBSVN_FS_STRINGS_TABLE_H */ |