FreeBSD/contrib/subversion/subversion/libsvn_fs_base/bdb/uuids-table.c
/*** Creating and opening the uuids table.
     When the table is created, the repository's uuid is
     generated and stored as record #1. ***/
Creating and opening the uuids table.
When the table is created, the repository's uuid is
generated and stored as record #1.
Creating and opening the uuids table . When the table is created the repository ' s uuid is generated and stored as record #1 .
int
svn_fs_bdb__open_uuids_table(DB **uuids_p,
                             DB_ENV *env,
                             svn_boolean_t create)
{
  const u_int32_t open_flags = (create ? (DB_CREATE | DB_EXCL) : 0);
  DB *uuids;
  int error;
  BDB_ERR(svn_fs_bdb__check_version());
  BDB_ERR(db_create(&uuids, env, 0));
  BDB_ERR(uuids->set_re_len(uuids, APR_UUID_FORMATTED_LENGTH));
  error = (uuids->open)(SVN_BDB_OPEN_PARAMS(uuids, NULL),
                        "uuids", 0, DB_RECNO,
                        open_flags, 0666);
  if (error == ENOENT && (! create))
    {
      BDB_ERR(uuids->close(uuids, 0));
      return svn_fs_bdb__open_uuids_table(uuids_p, env, TRUE);
    }
  BDB_ERR(error);
  if (create)
    {
      char buffer[APR_UUID_FORMATTED_LENGTH + 1];
      DBT key, value;
      apr_uuid_t uuid;
      int recno = 0;
      svn_fs_base__clear_dbt(&key);
      key.data = &recno;
      key.size = sizeof(recno);
      key.ulen = key.size;
      key.flags |= DB_DBT_USERMEM;
      svn_fs_base__clear_dbt(&value);
      value.data = buffer;
      value.size = sizeof(buffer) - 1;
      apr_uuid_get(&uuid);
      apr_uuid_format(buffer, &uuid);
      BDB_ERR(uuids->put(uuids, 0, &key, &value, DB_APPEND));
    }
  *uuids_p = uuids;
  return 0;
}
int svn_fs_bdb__open_uuids_table ( DB * * uuids_p , DB_ENV * env , svn_boolean_t create ) { const u_int32_t open_flags = ( create ? ( DB_CREATE | DB_EXCL ) : 0 ) ; DB * uuids ; int error ; BDB_ERR ( svn_fs_bdb__check_version ( ) ) ; BDB_ERR ( db_create ( & uuids , env , 0 ) ) ; BDB_ERR ( uuids -> set_re_len ( uuids , APR_UUID_FORMATTED_LENGTH ) ) ; error = ( uuids -> open ) ( SVN_BDB_OPEN_PARAMS ( uuids , NULL ) , " " , 0 , DB_RECNO , open_flags , 0666 ) ; if ( error == ENOENT && ( ! create ) ) { BDB_ERR ( uuids -> close ( uuids , 0 ) ) ; return svn_fs_bdb__open_uuids_table ( uuids_p , env , TRUE ) ; } BDB_ERR ( error ) ; if ( create ) { char buffer [ APR_UUID_FORMATTED_LENGTH + 1 ] ; DBT key , value ; apr_uuid_t uuid ; int recno = 0 ; svn_fs_base__clear_dbt ( & key ) ; key . data = & recno ; key . size = sizeof ( recno ) ; key . ulen = key . size ; key . flags |= DB_DBT_USERMEM ; svn_fs_base__clear_dbt ( & value ) ; value . data = buffer ; value . size = sizeof ( buffer ) - 1 ; apr_uuid_get ( & uuid ) ; apr_uuid_format ( buffer , & uuid ) ; BDB_ERR ( uuids -> put ( uuids , 0 , & key , & value , DB_APPEND ) ) ; } * uuids_p = uuids ; return 0 ; }
Creating and opening the uuids table.
Creating and opening the uuids table .
/* This is a temporary compatibility check; it creates the
     UUIDs table if one does not already exist. */