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

📄 deadprops.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
      /* Ensure XML-safety of our property values before sending them         across the wire. */      if (! svn_xml_is_xml_safe(propval->data, propval->len))        {          const svn_string_t *enc_propval            = svn_base64_encode_string(propval, pool);          xml_safe = enc_propval->data;          encoding = apr_pstrcat(pool, " V:encoding=\"base64\"", NULL);        }      else        {              svn_stringbuf_t *xmlval = NULL;          svn_xml_escape_cdata_string(&xmlval, propval, pool);          xml_safe = xmlval->data;        }      s = apr_psprintf(pool, "<%s%s%s>", prefix, name->name, encoding);      apr_text_append(pool, phdr, s);      /* the value is in our pool which means it has the right lifetime. */      /* ### at least, per the current mod_dav architecture/API */      apr_text_append(pool, phdr, xml_safe);            s = apr_psprintf(pool, "</%s%s>" DEBUG_CR, prefix, name->name);      apr_text_append(pool, phdr, s);    }  return NULL;}static dav_error *dav_svn_db_map_namespaces(    dav_db *db,    const apr_array_header_t *namespaces,    dav_namespace_map **mapping){  /* we don't need a namespace mapping right now. nothing to do */  return NULL;}static dav_error *dav_svn_db_store(dav_db *db, const dav_prop_name *name,                                   const apr_xml_elem *elem,                                   dav_namespace_map *mapping){  const svn_string_t *propval;  apr_pool_t *pool = db->p;  apr_xml_attr *attr = elem->attr;  /* SVN sends property values as a big blob of bytes. Thus, there should be     no child elements of the property-name element. That also means that     the entire contents of the blob is located in elem->first_cdata. The     dav_xml_get_cdata() will figure it all out for us, but (normally) it     should be awfully fast and not need to copy any data. */  propval = svn_string_create    (dav_xml_get_cdata(elem, pool, 0 /* strip_white */), pool);    /* Check for special encodings of the property value. */  while (attr)    {      if (strcmp(attr->name, "encoding") == 0) /* ### namespace check? */        {          const char *enc_type = attr->value;          /* Handle known encodings here. */          if (enc_type && (strcmp(enc_type, "base64") == 0))            propval = svn_base64_decode_string(propval, pool);          else            return dav_new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0,                                 "Unknown property encoding");          break;        }      /* Next attribute, please. */      attr = attr->next;    }  return save_value(db, name, propval);}static dav_error *dav_svn_db_remove(dav_db *db, const dav_prop_name *name){  svn_error_t *serr;  const char *propname;  /* get the repos-local name */  get_repos_propname(db, name, &propname);  /* ### non-svn props aren't in our repos, so punt for now */  if (propname == NULL)    return NULL;  /* Working Baseline or Working (Version) Resource */  if (db->resource->baselined)    if (db->resource->working)      serr = svn_repos_fs_change_txn_prop(db->resource->info->root.txn,                                          propname, NULL, db->resource->pool);    else      /* ### VIOLATING deltaV: you can't proppatch a baseline, it's         not a working resource!  But this is how we currently         (hackily) allow the svn client to change unversioned rev         props.  See issue #916. */      serr = svn_repos_fs_change_rev_prop2(db->resource->info->repos->repos,                                           db->resource->info->root.rev,                                           db->resource->info->repos->username,                                           propname, NULL,                                           db->authz_read_func,                                           db->authz_read_baton,                                           db->resource->pool);  else    serr = svn_repos_fs_change_node_prop(db->resource->info->root.root,                                         get_repos_path(db->resource->info),                                         propname, NULL, db->resource->pool);  if (serr != NULL)    return dav_svn_convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,                               "could not remove a property",                               db->resource->pool);  /* a change to the props was made; make sure our cached copy is gone */  db->props = NULL;  return NULL;}static int dav_svn_db_exists(dav_db *db, const dav_prop_name *name){  const char *propname;  svn_string_t *propval;  svn_error_t *serr;  int retval;  /* get the repos-local name */  get_repos_propname(db, name, &propname);  /* ### non-svn props aren't in our repos */  if (propname == NULL)    return 0;  /* Working Baseline, Baseline, or (Working) Version resource */  if (db->resource->baselined)    if (db->resource->type == DAV_RESOURCE_TYPE_WORKING)      serr = svn_fs_txn_prop(&propval, db->resource->info->root.txn,                             propname, db->p);    else      serr = svn_repos_fs_revision_prop(&propval,                                        db->resource->info->repos->repos,                                        db->resource->info->root.rev,                                        propname,                                        db->authz_read_func,                                        db->authz_read_baton, db->p);  else    serr = svn_fs_node_prop(&propval, db->resource->info->root.root,                            get_repos_path(db->resource->info),                            propname, db->p);  /* ### try and dispose of the value? */  retval = (serr == NULL && propval != NULL);  svn_error_clear(serr);  return retval;}static void get_name(dav_db *db, dav_prop_name *pname){  if (db->hi == NULL)    {      pname->ns = pname->name = NULL;    }  else    {      const void *name;      apr_hash_this(db->hi, &name, NULL, NULL);#define PREFIX_LEN (sizeof(SVN_PROP_PREFIX) - 1)      if (strncmp(name, SVN_PROP_PREFIX, PREFIX_LEN) == 0)#undef PREFIX_LEN        {          pname->ns = SVN_DAV_PROP_NS_SVN;          pname->name = (const char *)name + 4;        }      else        {          pname->ns = SVN_DAV_PROP_NS_CUSTOM;          pname->name = name;        }    }}static dav_error *dav_svn_db_first_name(dav_db *db, dav_prop_name *pname){  /* if we don't have a copy of the properties, then get one */  if (db->props == NULL)    {      svn_error_t *serr;      /* Working Baseline, Baseline, or (Working) Version resource */      if (db->resource->baselined)        {          if (db->resource->type == DAV_RESOURCE_TYPE_WORKING)            serr = svn_fs_txn_proplist(&db->props,                                        db->resource->info->root.txn,                                       db->p);          else            serr = svn_repos_fs_revision_proplist              (&db->props,               db->resource->info->repos->repos,               db->resource->info->root.rev,               db->authz_read_func,               db->authz_read_baton,               db->p);        }      else        {          serr = svn_fs_node_proplist(&db->props,                                       db->resource->info->root.root,                                      get_repos_path(db->resource->info),                                       db->p);        }      if (serr != NULL)        return dav_svn_convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,                                   "could not begin sequencing through "                                   "properties",                                   db->resource->pool);    }  /* begin the iteration over the hash */  db->hi = apr_hash_first(db->p, db->props);  /* fetch the first key */  get_name(db, pname);  return NULL;}static dav_error *dav_svn_db_next_name(dav_db *db, dav_prop_name *pname){  /* skip to the next hash entry */  if (db->hi != NULL)    db->hi = apr_hash_next(db->hi);  /* fetch the key */  get_name(db, pname);  return NULL;}static dav_error *dav_svn_db_get_rollback(dav_db *db,                                           const dav_prop_name *name,                                          dav_deadprop_rollback **prollback){  dav_error *err;  dav_deadprop_rollback *ddp;  svn_string_t *propval;  if ((err = get_value(db, name, &propval)) != NULL)    return err;  ddp = apr_palloc(db->p, sizeof(*ddp));  ddp->name = *name;  ddp->value.data = propval ? propval->data : NULL;  ddp->value.len = propval ? propval->len : 0;  *prollback = ddp;  return NULL;}static dav_error *dav_svn_db_apply_rollback(dav_db *db,                                            dav_deadprop_rollback *rollback){  if (rollback->value.data == NULL)    {      return dav_svn_db_remove(db, &rollback->name);    }    return save_value(db, &rollback->name, &rollback->value);}const dav_hooks_propdb dav_svn_hooks_propdb = {  dav_svn_db_open,  dav_svn_db_close,  dav_svn_db_define_namespaces,  dav_svn_db_output_value,  dav_svn_db_map_namespaces,  dav_svn_db_store,  dav_svn_db_remove,  dav_svn_db_exists,  dav_svn_db_first_name,  dav_svn_db_next_name,  dav_svn_db_get_rollback,  dav_svn_db_apply_rollback,};

⌨️ 快捷键说明

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