int
DBG_HASHEXT_NAME(id_casemode_hash_remove) (DBG_PARAMS id_hash_t * ht, caddr_t _qn, caddr_t _o)
{
  id_casemode_entry_llist_t **list;

  list = (id_casemode_entry_llist_t **) id_hash_get (ht, (caddr_t) &_qn);

  if (list && *list)
    {
      id_casemode_entry_llist_t seed;
      id_casemode_entry_llist_t *iter = &seed;
      seed.next = *list;
      while (iter->next)
	{
	  if (casemode_strhashcmp ((char *) &(iter->next->owner), (char *) &_o))
	    {
	      id_casemode_entry_llist_t *to_delete = iter->next;
	      iter->next = iter->next->next;
	      dk_free (to_delete, sizeof (id_casemode_entry_llist_t));
	      *list = seed.next;
	      return 1;
	    }
	  iter = iter->next;
	}
    }
  return 0;
}
int lh_is_vtb_word__xViAny (const unichar *buf, size_t bufsize)
{
  lenmem_t lm;
  char *nw;
  if (1 > bufsize)
    return 0;
  lm.lm_length = bufsize * sizeof(unichar);
  lm.lm_memblock = (/*const*/ char *)buf;
  nw = id_hash_get (lh_noise_words, (char *) &lm);
  if (NULL == nw)
    return 1;
  return 0;
}
wcharset_t *
sch_name_to_charset (const char *name)
{
  if (!name || !name[0])
    return default_charset;
  else
    {
      wcharset_t **charset = (wcharset_t **) id_hash_get (global_wide_charsets, (caddr_t) &name);
      if (charset)
	return charset[0];
      else
	return NULL;
    }
}
void *
sch_name_to_object_sc (dbe_schema_t * sc, sc_object_type type, char *o_default,
    char *o, char *qn, int find_many)
{
  id_casemode_entry_llist_t **list_ptr;
  id_casemode_entry_llist_t *found = NULL;
  int n_found = 0;

  if (NULL != (list_ptr = (id_casemode_entry_llist_t **) id_hash_get (sc->sc_name_to_object[type], (caddr_t) &qn))
      && NULL != *list_ptr)
    {
      id_casemode_entry_llist_t *iter = *list_ptr;
      while (iter)
	{
	  if (o[0])
	    {
	      if (casemode_strhashcmp ((char *) &o, (char *) &(iter->owner)))
		return iter->data;
	      else
		{
		  iter = iter->next;
		  continue;
		}
	    }
	  else if (o_default)
	    {
	      if (casemode_strhashcmp ((char *) &(o_default), (char *) &(iter->owner)))
		return iter->data;
	      found = iter;
	      n_found += 1;
	    }
	  iter = iter->next;
	}
    }
  if (found && o_default)
    {
      if (n_found > 1)
	return ((void *) -1);
      else
	return found->data;
    }

  if (sc->sc_prev)
    return sch_name_to_object_sc (sc->sc_prev, type, o_default, o, qn, find_many);
  return NULL;
}
Beispiel #5
0
long
stmt_row_bookmark (cli_stmt_t * stmt, caddr_t * row)
{
    long *bmidp;
    long bmid;
    cli_connection_t *con = stmt->stmt_connection;
    caddr_t bm;
    int len;

    if (!stmt->stmt_opts->so_use_bookmarks)
        return 0;

    IN_CON (con);

    if (!con->con_bookmarks)
        con->con_bookmarks = hash_table_allocate (101);

    if (!stmt->stmt_bookmarks)
    {
        stmt->stmt_bookmarks = hash_table_allocate (101);
        stmt->stmt_bookmarks_rev = id_tree_hash_create (101);
    }

    con->con_last_bookmark++;
    len = BOX_ELEMENTS (row);
    bm = row[len - 2];

    bmidp = (long *) id_hash_get (stmt->stmt_bookmarks_rev, (caddr_t) & bm);
    if (bmidp)
    {
        LEAVE_CON (con);
        return (*bmidp);
    }

    bmid = con->con_last_bookmark;
    bm = box_copy_tree (bm);
    sethash ((void *) (ptrlong) bmid, stmt->stmt_bookmarks, (void *) bm);
    id_hash_set (stmt->stmt_bookmarks_rev, (caddr_t) & bm, (caddr_t) & bmid);
    sethash ((void *) (ptrlong) bmid, con->con_bookmarks, (void *) bm);

    LEAVE_CON (con);

    return bmid;
}
caddr_t
id_casemode_hash_get (id_hash_t * ht, caddr_t _qn, caddr_t _o)
{
  id_casemode_entry_llist_t **list;

  list = (id_casemode_entry_llist_t **) id_hash_get (ht, (caddr_t) &_qn);

  if (list && *list)
    {
      id_casemode_entry_llist_t *iter = *list;
      while (iter)
	{
	  if (casemode_strhashcmp ((char *) &_o, (char *) &(iter->owner)))
	    return (caddr_t) &(iter->data);
	  iter = iter->next;
	}
    }
  return NULL;
}
caddr_t
DBG_HASHEXT_NAME(id_casemode_hash_set) (DBG_PARAMS id_hash_t * ht, caddr_t _qn, caddr_t _o, caddr_t data)
{
  id_casemode_entry_llist_t **list;
  caddr_t ret;

  list = (id_casemode_entry_llist_t **) id_hash_get (ht, (caddr_t) &_qn);
  if (list)
    {
      id_casemode_entry_llist_t *iter = *list;
      while (iter)
	{
	  if (casemode_strhashcmp ((char *) &(iter->owner), (char *) &_o))
	    {
	      caddr_t old_value = *((caddr_t *)iter->data);
	      iter->data = data;
	      ret = old_value;
	      break;
	    }
	  iter = iter->next;
	}
      if (!iter)
	{
	  NEW_VARZ (id_casemode_entry_llist_t, new_iter);
	  new_iter->owner = _o;
	  new_iter->data = *((caddr_t *)data);
	  new_iter->next = *list;
	  *list = new_iter;
	  ret = NULL;
	}
    }
  else
    {
      NEW_VARZ (id_casemode_entry_llist_t, new_iter);
      new_iter->owner = _o;
      new_iter->data = *((caddr_t *)data);

      DBG_HASHEXT_NAME (id_hash_set) (DBG_ARGS ht, (caddr_t)&_qn, (caddr_t) &new_iter);
      ret = NULL;
    }

  return ret;
}
void
mpschema_set_view_def (char *name, caddr_t tree)
{
  caddr_t *old_tree = NULL;

  old_tree = (caddr_t *) id_hash_get (xml_global->xs_views, (caddr_t) &name);
  if (old_tree)
    {
      if (*old_tree)
        {
	  if (*old_tree == tree)
	    GPF_T;
	  dk_set_push (xml_global->xs_old_views, *old_tree);
        }
      *old_tree = tree;
    }
  else
    {
      name = box_dv_short_string (name);
      id_hash_set (xml_global->xs_views, (caddr_t) & name, (caddr_t) & tree);
    }
}
Beispiel #9
0
shuric_t *shuric_load (shuric_vtable_t *vt, caddr_t uri, caddr_t ts, caddr_t uri_text_content, shuric_t *loaded_by, struct query_instance_s *qi, void *env, caddr_t *err_ret )
{
  caddr_t str = NULL;
  shuric_t ** cached_shuric_ptr;
  shuric_t *new_cached_shuric = NULL, *old_cached_shuric = NULL;
  shuric_t * new_shuric = NULL;
  shuric_t * res = NULL; /* = NULL to keep compiler happy */
  dk_set_t obsoletes = NULL;
  dbg_printf (("shuric_load started (\"%s\", \"%s\", \"%s\" @ %p)\n",
    vt->shuric_type_title, uri,
    loaded_by ? loaded_by->shuric_uri : "", loaded_by ));
  if (NULL != err_ret[0])
    return NULL;
  if (NULL != uri)
    {
      if (DV_STRING != DV_TYPE_OF (uri))
	{
          err_ret[0] = srv_make_new_error ("39000", "FA041", "A URI of a shareable XSLT/XQuery resource has invalid data type.");
          goto cleanup;
	}
      if (box_length (uri) > MAX_SHURIC_URI_LENGTH)
	{
          err_ret[0] = srv_make_new_error ("39000", "FA042", "An abnormally long string is passed as URI of a shareable XSLT/XQuery resource.");
          goto cleanup;
	}
    }
  if (NULL != uri)
    {
      if (NULL != loaded_by)
        {
          shuric_t *old_inc = shuric_scan_relations (loaded_by, uri, SHURIC_SCAN_INCLUDED_BY | SHURIC_SCAN_IMPORTED_BY);
	  if (old_inc != NULL)
	    {
	      char impuri[300];
	      if (NULL != loaded_by->shuric_uri)
	        strcpy (impuri, "(temporary resource with no URI)");
	      else
	        {
	          strcpy_ck (impuri, loaded_by->shuric_uri);
	        }
	      shuric_release (old_inc);
	      err_ret[0] = srv_make_new_error ("39000", "FA048", "Cyclic references: '%.300s' refers to his ancestor '%.300s' as to child resource", impuri, uri);
	    }
	}
      mutex_enter (shuric_mtx);
      cached_shuric_ptr = (shuric_t **) id_hash_get (shuric_global_hashtable, (caddr_t) &uri);
      old_cached_shuric = ((NULL == cached_shuric_ptr) ? NULL : cached_shuric_ptr[0]);
      if (NULL != old_cached_shuric)
	old_cached_shuric->shuric_ref_count++; /* Temporary lock to keep the pointer valid. */
      mutex_leave (shuric_mtx);
      if ((NULL != old_cached_shuric) && (old_cached_shuric->_ != vt))
	{
          err_ret[0] = srv_make_new_error ("39000", "FA046", "Server uses the content of URI '%.200s' as '%.30s' and can not load it as '%.30s'",
	    uri, old_cached_shuric->_->shuric_type_title, vt->shuric_type_title );
          goto cleanup;
	}
    }
  if (NULL == uri_text_content)
    {
      QR_RESET_CTX
      {
        str = vt->shuric_uri_to_text (uri, qi, env, err_ret);
      }
      QR_RESET_CODE
      {
        du_thread_t *self = THREAD_CURRENT_THREAD;
        err_ret[0] = thr_get_error_code (self);
        thr_set_error_code (self, NULL);
      }
      END_QR_RESET;
    }