⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hashdump-test.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
字号:
/* * hashdump-test.c :  testing the reading/writing of hashes * * ==================================================================== * Copyright (c) 2000-2004 CollabNet.  All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution.  The terms * are also available at http://subversion.tigris.org/license-1.html. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * * This software consists of voluntary contributions made by many * individuals.  For exact contribution history, see the revision * history and logs, available at http://subversion.tigris.org/. * ==================================================================== */#include <stdio.h>       /* for sprintf() */#include <stdlib.h>#include <apr_pools.h>#include <apr_hash.h>#include <apr_file_io.h>#include "svn_types.h"#include "svn_string.h"#include "svn_error.h"#include "svn_hash.h"#include "../svn_test.h"/* Our own global variables */apr_hash_t *proplist, *new_proplist;const char *review ="A forthright entrance, yet coquettish on the tongue, its deceptively\n""fruity exterior hides the warm mahagony undercurrent that is the\n""hallmark of Chateau Fraisant-Pitre.  Connoisseurs of the region will\n""be pleased to note the familiar, subtle hints of mulberries and\n""carburator fluid.  Its confident finish is marred only by a barely\n""detectable suggestion of rancid squid ink.";static svn_error_t *test1(const char **msg,       svn_boolean_t msg_only,      svn_test_opts_t *opts,      apr_pool_t *pool){  svn_error_t *result;  svn_stringbuf_t *key;  apr_file_t *f;  *msg = "write a hash to a file";  if (msg_only)    return SVN_NO_ERROR;  /* Build a hash in memory, and fill it with test data. */  proplist = apr_hash_make(pool);  key = svn_stringbuf_create("color", pool);  apr_hash_set(proplist, key->data, key->len,               svn_string_create("red", pool));    key = svn_stringbuf_create("wine review", pool);  apr_hash_set(proplist, key->data, key->len,               svn_string_create(review, pool));    key = svn_stringbuf_create("price", pool);  apr_hash_set(proplist, key->data, key->len,               svn_string_create("US $6.50", pool));  /* Test overwriting: same key both times, but different values. */  key = svn_stringbuf_create("twice-used property name", pool);  apr_hash_set(proplist, key->data, key->len,               svn_string_create("This is the FIRST value.", pool));  apr_hash_set(proplist, key->data, key->len,               svn_string_create("This is the SECOND value.", pool));  /* Dump the hash to a file. */  apr_file_open(&f, "hashdump.out",                (APR_WRITE | APR_CREATE),                APR_OS_DEFAULT, pool);  result = svn_hash_write2(proplist, svn_stream_from_aprfile(f, pool),                           SVN_HASH_TERMINATOR, pool);  apr_file_close(f);  return result;}static svn_error_t *test2(const char **msg,       svn_boolean_t msg_only,      svn_test_opts_t *opts,      apr_pool_t *pool){  svn_error_t *result;  apr_file_t *f;  *msg = "read a file into a hash";  if (msg_only)    return SVN_NO_ERROR;  new_proplist = apr_hash_make(pool);  apr_file_open(&f, "hashdump.out", APR_READ, APR_OS_DEFAULT, pool);  result = svn_hash_read2(new_proplist, svn_stream_from_aprfile(f, pool),                          SVN_HASH_TERMINATOR, pool);  apr_file_close(f);  return result;}static svn_error_t *test3(const char **msg,       svn_boolean_t msg_only,      svn_test_opts_t *opts,      apr_pool_t *pool){  apr_hash_index_t *this;  svn_error_t *err;  int found_discrepancy = 0;  const char *ignored;  *msg = "write hash out, read back in, compare";  if (msg_only)    return SVN_NO_ERROR;  /* Build a hash in global variable "proplist", then write to a file. */  err = test1(&ignored, FALSE, opts, pool);  if (err)    return err;  /* Read this file back into global variable "new_proplist" */  err = test2(&ignored, FALSE, opts, pool);  if (err)    return err;  /* Now let's make sure that proplist and new_proplist contain the     same data. */    /* Loop over our original hash */  for (this = apr_hash_first(pool, proplist);        this;        this = apr_hash_next(this))    {      const void *key;      apr_ssize_t keylen;      void *val;      svn_string_t *orig_str, *new_str;            /* Get a key and val. */      apr_hash_this(this, &key, &keylen, &val);      orig_str = val;      /* Look up the key in the new hash */      new_str = apr_hash_get(new_proplist, key, keylen);      /* Does the new hash contain the key at all? */      if (new_str == NULL)        found_discrepancy = 1;      /* Do the two strings contain identical data? */      else if (! svn_string_compare(orig_str, new_str))        found_discrepancy = 1;    }  if (found_discrepancy)    return svn_error_createf(SVN_ERR_TEST_FAILED, 0,                             "found discrepancy reading back hash table");  return SVN_NO_ERROR;}/*   ====================================================================   If you add a new test to this file, update this array.*//* An array of all test functions */struct svn_test_descriptor_t test_funcs[] =  {    SVN_TEST_NULL,    SVN_TEST_PASS(test1),    SVN_TEST_PASS(test2),    SVN_TEST_PASS(test3),    SVN_TEST_NULL  };

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -