static GnomeThemeFileLine *
lookup_line (GnomeThemeFile        *df,
	     GnomeThemeFileSection *section,
	     const char              *keyname,
	     const char              *locale)
{
  GnomeThemeFileLine *line;
  GQuark key_quark;
  int i;

  key_quark = g_quark_try_string (keyname);
  if (key_quark == 0)
    return NULL;
  
  for (i = 0; i < section->n_lines; i++)
    {
      line = &section->lines[i];
      
      if (line->key == key_quark &&
	  ((locale == NULL && line->locale == NULL) ||
	   (locale != NULL && line->locale != NULL && strcmp (locale, line->locale) == 0)))
	return line;
    }
  
  return NULL;
}
static void
on_ca_certificate_public_key_info (GQuark type, const guchar *data, gsize n_data,
                                   GHashTable *headers, gpointer user_data)
{
	GNode *asn1 = NULL;
	GkmDataResult res;
	gpointer keydata;
	gsize n_keydata;
	gcry_sexp_t sexp;

	g_assert (g_quark_try_string ("CERTIFICATE") == type);

	/* Parse the ASN1 data */
	res = gkm_data_der_read_certificate (data, n_data, &asn1);
	g_assert (res == GKM_DATA_SUCCESS);

	/* Generate a raw public key from our certificate */
	keydata = egg_asn1x_encode (egg_asn1x_node (asn1, "tbsCertificate", "subjectPublicKeyInfo", NULL), NULL, &n_keydata);
	g_assert (keydata);

	/* Now create us a nice public key with that identifier */
	res = gkm_data_der_read_public_key_info (keydata, n_keydata, &sexp);
	g_assert (res == GKM_DATA_SUCCESS || res == GKM_DATA_UNRECOGNIZED);

	if (res == GKM_DATA_SUCCESS)
		gcry_sexp_release (sexp);
	g_free (keydata);
}
static void
get_protocols_cb (GObject      *source,
                  GAsyncResult *res,
                  gpointer      user_data)
{
  GSimpleAsyncResult *outer_result = user_data;
  GList *protocols = NULL;
  GList *ret;
  GList *l;
  GError *error = NULL;
  GQuark facebook_quark;

#if GOA_GOOGLE_ENABLED
  GQuark google_talk_quark;
#endif

  if (!tpaw_protocol_get_all_finish (&protocols, res, &error))
    {
      g_simple_async_result_take_error (outer_result, error);
      g_simple_async_result_complete_in_idle (outer_result);
      g_object_unref (outer_result);
      return;
    }

  facebook_quark = g_quark_from_static_string ("facebook");

#if GOA_GOOGLE_ENABLED
  google_talk_quark = g_quark_from_static_string ("google-talk");
#endif

  ret = NULL;
  for (l = protocols; l != NULL; l = l->next)
    {
      TpawProtocol *protocol = l->data;
      const gchar *service_name = tpaw_protocol_get_service_name (protocol);
      GQuark service_quark = g_quark_try_string (service_name);
      GoaTelepathyProvider *provider;

      /* This service does not exist anymore, so skip it. */
      if (service_quark == facebook_quark)
        continue;

      /* If the  service is handled natively by GOA, so we don't allow
       * the creation of a Telepathy-only account. */
#if GOA_GOOGLE_ENABLED
      if (service_quark == google_talk_quark)
        continue;
#endif

      provider = goa_telepathy_provider_new_from_protocol (protocol);
      ret = g_list_prepend (ret, provider);
    }
  ret = g_list_reverse (ret);
  g_list_free_full (protocols, g_object_unref);

  g_simple_async_result_set_op_res_gpointer (outer_result, ret, free_list_and_unref);
  g_simple_async_result_complete_in_idle (outer_result);

  g_object_unref (outer_result);
}
static AnjutaPluginDescriptionLine *
lookup_line (AnjutaPluginDescription        *df,
	     AnjutaPluginDescriptionSection *section,
	     const char              *keyname,
	     const char              *locale)
{
  AnjutaPluginDescriptionLine *line;
  GQuark key_quark;
  int i;

  key_quark = g_quark_try_string (keyname);
  if (key_quark == 0)
    return NULL;
  
  for (i = 0; i < section->n_lines; i++)
    {
      line = &section->lines[i];
      
      if (line->key == key_quark &&
	  ((locale == NULL && line->locale == NULL) ||
	   (locale != NULL && line->locale != NULL && strcmp (locale, line->locale) == 0)))
	return line;
    }
  
  return NULL;
}
/* Look up a property, take fallback into account. */
static ccss_property_t const *
lookup_property_r (ccss_style_t const	*self,
		   char const		*property_name)
{
	GQuark			 property_id;
	ccss_property_t const	*property = NULL;

	property_id = g_quark_try_string (property_name);
	if (property_id) {
		property = (ccss_property_t const *)
				g_hash_table_lookup (self->properties,
						     (gpointer) property_id);
	}
	if (property) {
		return property;
	}

	for (unsigned int i = 0; _fallback_map[i].name != NULL; i++) {
		if (0 == g_strcmp0 (property_name, _fallback_map[i].name)) {
			return lookup_property_r (self, _fallback_map[i].fallback);
		}
	}

	return NULL;
}
示例#6
0
struct bt_ctf_field_type *bt_ctf_event_class_get_field_by_name(
		struct bt_ctf_event_class *event_class, const char *name)
{
	GQuark name_quark;
	struct bt_ctf_field_type *field_type = NULL;

	if (!event_class || !name) {
		goto end;
	}

	if (bt_ctf_field_type_get_type_id(event_class->fields) !=
		CTF_TYPE_STRUCT) {
		goto end;
	}

	name_quark = g_quark_try_string(name);
	if (!name_quark) {
		goto end;
	}

	/*
	 * No need to increment field_type's reference count since getting it
	 * from the structure already does.
	 */
	field_type = bt_ctf_field_type_structure_get_field_type_by_name(
		event_class->fields, name);
end:
	return field_type;
}
gboolean
desktop_entry_has_category (DesktopEntry *entry,
                            const char   *category)
{
  GQuark quark;
  int    i;
  DesktopEntryDesktop *desktop_entry;

  if (entry->type != DESKTOP_ENTRY_DESKTOP)
    return FALSE;

  desktop_entry = (DesktopEntryDesktop*) entry;

  if (desktop_entry->categories == NULL)
    return FALSE;

  if (!(quark = g_quark_try_string (category)))
    return FALSE;

  for (i = 0; desktop_entry->categories[i]; i++)
    {
      if (quark == desktop_entry->categories[i])
        return TRUE;
    }

  return FALSE;
}
int
egg_openssl_parse_algo (const char *name, int *mode)
{
	static GQuark openssl_quarks[G_N_ELEMENTS(openssl_algos)] = { 0, };
	static gsize openssl_quarks_inited = 0;
	GQuark q;
	int i;

	if (g_once_init_enter (&openssl_quarks_inited)) {
		for (i = 0; i < G_N_ELEMENTS(openssl_algos); ++i)
			openssl_quarks[i] = g_quark_from_static_string (openssl_algos[i].desc);
		g_once_init_leave (&openssl_quarks_inited, 1);
	}
	
	q = g_quark_try_string (name);
	if (q) {
		for (i = 0; i < G_N_ELEMENTS(openssl_algos); ++i) {
			if (q == openssl_quarks[i]) {
				*mode = openssl_algos[i].mode;
				return openssl_algos[i].algo;
			}
		}
	}
	
	return 0;
}
示例#9
0
static void dock_manager_dbus_watcher_name_owner_changed (DockManagerDBusWatcher* self, DBusGProxy* sender, const gchar* name, const gchar* old_owner, const gchar* new_owner) {
	gboolean _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (sender != NULL);
	g_return_if_fail (name != NULL);
	g_return_if_fail (old_owner != NULL);
	g_return_if_fail (new_owner != NULL);
	_tmp0_ = g_regex_match (self->priv->unnamed_bus_object, name, 0, NULL);
	if (_tmp0_ == FALSE) {
		if (g_strcmp0 (new_owner, "") == 0) {
			gchar* _tmp1_;
			GQuark _tmp2_;
			_tmp1_ = g_strdup (name);
			g_hash_table_replace (self->priv->owned_names, _tmp1_, GINT_TO_POINTER (0));
			_tmp2_ = g_quark_try_string (name);
			if (_tmp2_ != 0) {
				gchar* _tmp3_ = NULL;
				gchar* _tmp4_;
				_tmp3_ = g_strdup_printf ("name-disappeared::%s", name);
				_tmp4_ = _tmp3_;
				g_signal_emit_by_name (self, _tmp4_, name, NULL);
				_g_free0 (_tmp4_);
			} else {
				g_signal_emit_by_name (self, "name-disappeared", name);
			}
		} else {
			if (g_strcmp0 (old_owner, "") == 0) {
				gchar* _tmp5_;
				GQuark _tmp6_;
				_tmp5_ = g_strdup (name);
				g_hash_table_replace (self->priv->owned_names, _tmp5_, GINT_TO_POINTER (1));
				_tmp6_ = g_quark_try_string (name);
				if (_tmp6_ != 0) {
					gchar* _tmp7_ = NULL;
					gchar* _tmp8_;
					_tmp7_ = g_strdup_printf ("name-appeared::%s", name);
					_tmp8_ = _tmp7_;
					g_signal_emit_by_name (self, _tmp8_, name, NULL);
					_g_free0 (_tmp8_);
				} else {
					g_signal_emit_by_name (self, "name-appeared", name);
				}
			}
		}
	}
}
示例#10
0
/**
 * crank_bench_run_get_param_double: (skip)
 * @run: A benchmark run.
 * @name: A parameter name.
 * @defval: Default value if @name is not found.
 *
 * Gets double benchmark parameter by @name.
 *
 * Returns: A double benchmark parameter, or @defval if fail.
 */
gdouble
crank_bench_run_get_param_double (CrankBenchRun *run,
                                  const gchar   *name,
                                  const gdouble  defval)
{
  GQuark qname = g_quark_try_string (name);
  return crank_value_table_get_double (run->param, GINT_TO_POINTER(qname), defval);
}
示例#11
0
/**
 * crank_bench_run_get_param: (skip)
 * @run: A benchmark run.
 * @name: A parameter name.
 *
 * Gets a benchmark parameter by @name.
 *
 * Returns: (transfer none) (nullable): A benchmark parameter as #GValue. or
 *     %NULL if fail.
 */
GValue*
crank_bench_run_get_param (CrankBenchRun *run,
                           const gchar   *name)
{
  GQuark qname = g_quark_try_string (name);

  return (GValue*) g_hash_table_lookup (run->param, GINT_TO_POINTER(qname));
}
gpointer
modem_request_steal_data (ModemRequest *request,
                          char const *key)
{
  GQuark quark = g_quark_try_string (key);
  if (!quark)
    return NULL;
  return modem_request_steal_qdata (request, quark);
}
示例#13
0
guint32 internetwork_resolveName(Internetwork* internet, gchar* name) {
	MAGIC_ASSERT(internet);
	return g_quark_try_string((const gchar*) name);
//	guint32* ip = g_hash_table_lookup(internet->ipByName, name);
//	if(ip) {
//		return *ip;
//	} else {
//		return (guint32)INADDR_NONE;
//	}
}
示例#14
0
BT_HIDDEN
void debug_info_handle_event(FILE *err, struct bt_event *event,
		struct debug_info *debug_info)
{
	struct bt_event_class *event_class;
	const char *event_name;
	GQuark q_event_name;

	if (!debug_info || !event) {
		goto end;
	}
	event_class = bt_event_get_class(event);
	if (!event_class) {
		goto end;
	}
	event_name = bt_event_class_get_name(event_class);
	if (!event_name) {
		goto end_put_class;
	}
	q_event_name = g_quark_try_string(event_name);

	if (q_event_name == debug_info->q_statedump_bin_info) {
		/* State dump */
		handle_statedump_bin_info_event(err, debug_info, event);
	} else if (q_event_name == debug_info->q_dl_open ||
			q_event_name == debug_info->q_lib_load) {
		/*
		 * dl_open and lib_load events are both checked for since
		 * only dl_open was produced as of lttng-ust 2.8.
		 *
		 * lib_load, which is produced from lttng-ust 2.9+, is a lot
		 * more reliable since it will be emitted when other functions
		 * of the dlopen family are called (e.g. dlmopen) and when
		 * library are transitively loaded.
		 */
		handle_lib_load_event(err, debug_info, event);
	} else if (q_event_name == debug_info->q_statedump_start) {
		/* Start state dump */
		handle_statedump_start(err, debug_info, event);
	} else if (q_event_name == debug_info->q_statedump_debug_link) {
		/* Debug link info */
		handle_statedump_debug_link_event(err, debug_info, event);
	} else if (q_event_name == debug_info->q_statedump_build_id) {
		/* Build ID info */
		handle_statedump_build_id_event(err, debug_info, event);
	} else if (q_event_name == debug_info-> q_lib_unload) {
		handle_lib_unload_event(err, debug_info, event);
	}

end_put_class:
	bt_put(event_class);
end:
	return;
}
示例#15
0
文件: quark.c 项目: 4179e1/misc
int main(void) {
	GQuark quark;
	GQuark quarkb;

	quark = g_quark_from_string ("orz");
	printf ("quark value %d string: %s\n", quark, g_quark_to_string (quark));

	if ((quarkb = g_quark_try_string("orz"))) {
		printf ("string %s already exist\n", g_quark_to_string(quarkb));
	}

	return 0;
}
示例#16
0
gint
pk_manifest_get_row_id (PkManifest  *manifest,
                        const gchar *name)
{
	GQuark quark;

	g_return_val_if_fail(manifest != NULL, -1);
	g_return_val_if_fail(manifest->rows != NULL, -1);
	g_return_val_if_fail(name != NULL, -1);

	if (!(quark = g_quark_try_string(name))) {
		return -1;
	}
	return pk_manifest_get_row_id_from_quark(manifest, quark);
}
示例#17
0
static void
config_logger (rspamd_mempool_t *pool, gpointer ud)
{
	struct rspamd_main *rm = ud;

	rm->cfg->log_type = RSPAMD_LOG_CONSOLE;
	rm->cfg->log_level = G_LOG_LEVEL_CRITICAL;

	rspamd_set_logger (rm->cfg, g_quark_try_string ("main"), rm);
	if (rspamd_log_open_priv (rm->logger, rm->workers_uid, rm->workers_gid) ==
			-1) {
		fprintf (stderr, "Fatal error, cannot open logfile, exiting\n");
		exit (EXIT_FAILURE);
	}
}
void
gst_sunaudiomixer_ctrl_set_option (GstSunAudioMixerCtrl * mixer,
    GstMixerOptions * options, gchar * value)
{
  struct audio_info audioinfo;
  GstMixerTrack *track;
  GstSunAudioMixerOptions *opts;
  GQuark q;
  int i;

  g_return_if_fail (mixer != NULL);
  g_return_if_fail (mixer->mixer_fd != -1);
  g_return_if_fail (value != NULL);
  g_return_if_fail (GST_IS_SUNAUDIO_MIXER_OPTIONS (options));

  track = GST_MIXER_TRACK (options);
  opts = GST_SUNAUDIO_MIXER_OPTIONS (options);

  if (opts->track_num != GST_SUNAUDIO_TRACK_RECSRC) {
    g_warning ("set_option not supported on track %s", track->label);
    return;
  }

  q = g_quark_try_string (value);
  if (q == 0) {
    g_warning ("unknown option '%s'", value);
    return;
  }

  for (i = 0; i < 8; i++) {
    if (opts->names[i] == q) {
      break;
    }
  }

  if (((1 << (i)) & opts->avail) == 0) {
    g_warning ("Record port %s not available", g_quark_to_string (q));
    return;
  }

  AUDIO_INITINFO (&audioinfo);
  audioinfo.record.port = (1 << (i));

  if (ioctl (mixer->mixer_fd, AUDIO_SETINFO, &audioinfo) < 0) {
    g_warning ("Error setting audio record port");
  }
}
示例#19
0
struct bt_ctf_field_type *
bt_ctf_event_class_get_payload_type_field_type_by_name(
		struct bt_ctf_event_class *event_class, const char *name)
{
	GQuark name_quark;
	struct bt_ctf_field_type *field_type = NULL;

	if (!event_class || !name) {
		BT_LOGW("Invalid parameter: event class or name is NULL: "
			"event-class-addr=%p, name-addr=%p",
			event_class, name);
		goto end;
	}

	if (!event_class->common.payload_field_type) {
		BT_LOGV("Event class has no payload field type: "
			"addr=%p, name=\"%s\", id=%" PRId64,
			event_class, bt_ctf_event_class_get_name(event_class),
			bt_ctf_event_class_get_id(event_class));
		goto end;
	}

	BT_ASSERT(bt_ctf_field_type_common_get_type_id(
		event_class->common.payload_field_type) ==
			BT_CTF_FIELD_TYPE_ID_STRUCT);
	name_quark = g_quark_try_string(name);
	if (!name_quark) {
		BT_LOGE("Cannot get GQuark: string=\"%s\"", name);
		goto end;
	}

	/*
	 * No need to increment field_type's reference count since getting it
	 * from the structure already does.
	 */
	field_type = (void *)
		bt_ctf_field_type_structure_get_field_type_by_name(
			(void *) event_class->common.payload_field_type, name);

end:
	return field_type;
}
示例#20
0
static gboolean
gtk_css_matcher_node_has_region (const GtkCssMatcher *matcher,
                                 const char          *region,
                                 GtkRegionFlags       flags)
{
  GtkRegionFlags region_flags;
  GQuark region_quark;
  
  region_quark = g_quark_try_string (region);
  if (!region_quark)
    return FALSE;

  if (!gtk_css_node_has_region (matcher->node.node, region_quark, &region_flags))
    return FALSE;

  if ((flags & region_flags) != flags)
    return FALSE;

  return TRUE;
}
gboolean
desktop_entry_has_category (DesktopEntry *entry,
                            const char   *category)
{
  GQuark quark;
  int    i;

  if (entry->categories == NULL)
    return FALSE;

  if (!(quark = g_quark_try_string (category)))
    return FALSE;

  for (i = 0; entry->categories[i]; i++)
    {
      if (quark == entry->categories[i])
        return TRUE;
    }

  return FALSE;
}
static AnjutaPluginDescriptionSection *
lookup_section (AnjutaPluginDescription  *df,
		const char        *section_name)
{
  AnjutaPluginDescriptionSection *section;
  GQuark section_quark;
  int i;

  section_quark = g_quark_try_string (section_name);
  if (section_quark == 0)
    return NULL;
  
  for (i = 0; i < df->n_sections; i ++)
    {
      section = &df->sections[i];

      if (section->section_name == section_quark)
	return section;
    }
  return NULL;
}
示例#23
0
static GnomeThemeFileSection *
lookup_section (GnomeThemeFile  *df,
		const char        *section_name)
{
  GnomeThemeFileSection *section;
  GQuark section_quark;
  int i;

  section_quark = g_quark_try_string (section_name);
  if (section_quark == 0)
    return NULL;
  
  for (i = 0; i < df->n_sections; i ++)
    {
      section = &df->sections[i];

      if (section->section_name == section_quark)
	return section;
    }
  return NULL;
}
示例#24
0
文件: gimptag.c 项目: jiapei100/gimp
/**
 * gimp_tag_try_new:
 * @tag_string: a tag name.
 *
 * Similar to gimp_tag_new(), but returns NULL if tag is surely not equal
 * to any of currently created tags. It is useful for tag querying to avoid
 * unneeded comparisons. If tag is created, however, it does not mean that
 * it would necessarily match with some other tag.
 *
 * Return value: new #GimpTag object, or NULL if tag will not match with any
 * other #GimpTag.
 **/
GimpTag *
gimp_tag_try_new (const char *tag_string)
{
  GimpTag *tag;
  gchar   *tag_name;
  gchar   *case_folded;
  gchar   *collate_key;
  GQuark   tag_quark;
  GQuark   collate_key_quark;

  tag_name = gimp_tag_string_make_valid (tag_string);
  if (! tag_name)
    return NULL;

  case_folded = g_utf8_casefold (tag_name, -1);
  collate_key = g_utf8_collate_key (case_folded, -1);
  collate_key_quark = g_quark_try_string (collate_key);
  g_free (collate_key);
  g_free (case_folded);

  if (! collate_key_quark)
    {
      g_free (tag_name);
      return NULL;
    }

  tag_quark = g_quark_from_string (tag_name);
  g_free (tag_name);
  if (! tag_quark)
    return NULL;

  tag = g_object_new (GIMP_TYPE_TAG, NULL);
  tag->tag = tag_quark;
  tag->collate_key = collate_key_quark;

  return tag;
}
示例#25
0
static gboolean
gtk_css_matcher_widget_path_has_region (const GtkCssMatcher *matcher,
                                        const char          *region,
                                        GtkRegionFlags       flags)
{
  const GtkWidgetPath *siblings;
  GtkRegionFlags region_flags;
  
  if (matcher->path.decl)
    {
      GQuark q = g_quark_try_string (region);

      if (q && gtk_css_node_declaration_has_region (matcher->path.decl, q, &region_flags))
        goto found;
    }

G_GNUC_BEGIN_IGNORE_DEPRECATIONS
  siblings = gtk_widget_path_iter_get_siblings (matcher->path.path, matcher->path.index);
  if (siblings && matcher->path.sibling_index != gtk_widget_path_iter_get_sibling_index (matcher->path.path, matcher->path.index))
    {
      if (!gtk_widget_path_iter_has_region (siblings, matcher->path.sibling_index, region, &region_flags))
        return FALSE;
    }
  else
    {
      if (!gtk_widget_path_iter_has_region (matcher->path.path, matcher->path.index, region, &region_flags))
        return FALSE;
    }
G_GNUC_END_IGNORE_DEPRECATIONS

found:
  if ((flags & region_flags) != flags)
    return FALSE;

  return TRUE;
}
示例#26
0
/**
 * gst_tracing_register_hook:
 * @tracer: the tracer
 * @detail: the detailed hook
 * @func: (scope async): the callback
 *
 * Register @func to be called when the trace hook @detail is getting invoked.
 */
void
gst_tracing_register_hook (GstTracer * tracer, const gchar * detail,
    GCallback func)
{
  gst_tracing_register_hook_id (tracer, g_quark_try_string (detail), func);
}
示例#27
0
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool tzn::got(const char* tzcode, TzLocation& locret, TzInfo& nforet, bool exact)
{
	DEBUGLOGB;
	int  fnd = 0;
	bool ret = false;

	DEBUGLOGP("requested entry tzcode is %s, exact is %s\n", tzcode, exact ? "on" : "off");

	GPtrArray* locs = tz_get_locations(tzdb);

	if( locs )
	{
		char*       tzn = tz_info_get_clean_name(tzdb, tzcode);
		const char* tzs = tzn ? tzn : (!exact ? tzcode : NULL);

		if( tzs )
		{
			DEBUGLOGP("requested entry tzcode (cleaned) is %s\n", tzs);

			TzInfo*     nfo;
			TzLocation* loc;
			bool        got;
			bool        cont_ok,  city_ok;
			const char* cont_db, *city_db;
			const char* cont_in = strchr (tzs, '/'); // end of continent string for search string
			const char* city_in = strrchr(tzs, '/'); // begin of city string for search string
			int         cont_il = cont_in ? cont_in-tzs     : 0;
			int         city_il = city_in ? strlen(city_in) : 0;

			DEBUGLOGP("cont_in is %s\n", cont_in);
			DEBUGLOGP("city_in is %s\n", city_in);

			if( !exact || (exact && g_quark_try_string(tzs)) ) // NOTE: according to tz.c comments, this will work
			{
				for( size_t i = 0; i < locs->len; i++ )
				{
					if( !(loc   = (TzLocation*)locs->pdata[i]) ) continue;
					if( !(nfo   =  tz_info_from_location(loc)) ) continue;

					if( !(got   =  stricmp(loc->zone, tzs) == 0) && !exact )
					{
						cont_db =  strchr (loc->zone, '/'); // end of continent string in db
						city_db =  strrchr(loc->zone, '/'); // begin of city string in db

						if( cont_db != city_db )
						{
							// just compare the 1st and last partitions, i.e., continent and city,
							// disregarding the 'middle' part, i.e., country or state

							DEBUGLOGS("tzcode (cleaned) not found and exact is off");
							DEBUGLOGS("comparing just the continent and city strings");
							DEBUGLOGP("cont_db is %s\n", cont_db);
							DEBUGLOGP("city_db is %s\n", city_db);

							cont_ok = cont_in && cont_db && cont_il == (cont_db-loc->zone) && strnicmp(tzs,     loc->zone, cont_il) == 0;
							city_ok = city_in && city_db && city_il == strlen(city_db)     && strnicmp(city_in, city_db,   city_il) == 0;
							got     = cont_ok && city_ok;

							DEBUGLOGP("cont_ok is %s, city_ok is %s\n", cont_ok ? "on" : "off", city_ok ? "on" : "off");
						}
					}

					if( got )
					{
//						DEBUGLOGP("%s/%s/%s\n", loc->country, loc->zone, loc->comment);
						DEBUGLOGP("%s\n", loc->zone);
						locret = *loc;
						nforet = *nfo;
						ret    = true;
						fnd++;
					}

					tz_info_free(nfo);

					if( fnd > 1 ) break;
//					if( ret ) break;
				}
			}
#ifdef DEBUGLOG
			else
				DEBUGLOGS("requested entry tzcode (cleaned) not found");
#endif
		}

		if( tzn )
			g_free(tzn);
	}

	DEBUGLOGE;
	return ret && fnd == 1;
}
示例#28
0
static gboolean
cockpit_web_server_default_handle_stream (CockpitWebServer *self,
                                          const gchar *path,
                                          GIOStream *io_stream,
                                          GHashTable *headers,
                                          GByteArray *input,
                                          guint in_length)
{
  CockpitWebResponse *response;
  gboolean claimed = FALSE;
  GQuark detail;
  gchar *pos;
  gchar bak;

  /* Yes, we happen to know that we can modify this string safely. */
  pos = strchr (path, '?');
  if (pos != NULL)
    {
      *pos = '\0';
      pos++;
    }

  /* TODO: Correct HTTP version for response */
  response = cockpit_web_response_new (io_stream, path, pos, headers);
  g_signal_connect_data (response, "done", G_CALLBACK (on_web_response_done),
                         g_object_ref (self), (GClosureNotify)g_object_unref, 0);

  /*
   * If the path has more than one component, then we search
   * for handlers registered under the detail like this:
   *
   *   /component/
   *
   * Otherwise we search for handlers registered under detail
   * of the entire path:
   *
   *  /component
   */

  /* Temporarily null terminate string after first component */
  pos = NULL;
  if (path[0] != '\0')
    {
      pos = strchr (path + 1, '/');
      if (pos != NULL)
        {
          pos++;
          bak = *pos;
          *pos = '\0';
        }
    }
  detail = g_quark_try_string (path);
  if (pos != NULL)
    *pos = bak;

  /* See if we have any takers... */
  g_signal_emit (self,
                 sig_handle_resource, detail,
                 path,
                 headers,
                 response,
                 &claimed);

  /* TODO: Here is where we would plug keep-alive into respnse */
  g_object_unref (response);

  return claimed;
}
示例#29
0
文件: bsewave.c 项目: whitelynx/beast
static SfiTokenType
bse_wave_restore_private (BseObject  *object,
			  BseStorage *storage,
                          GScanner   *scanner)
{
  BseWave *wave = BSE_WAVE (object);
  GTokenType expected_token;
  GQuark quark;

  /* chain parent class' handler */
  if (g_scanner_peek_next_token (scanner) != G_TOKEN_IDENTIFIER)
    return BSE_OBJECT_CLASS (parent_class)->restore_private (object, storage, scanner);

  /* parse storage commands */
  quark = g_quark_try_string (scanner->next_value.v_identifier);
  if (quark == quark_xinfos)
    {
      g_scanner_get_next_token (scanner); /* eat identifier */
      gchar **xinfos = NULL;
      GTokenType token = bse_storage_parse_xinfos (storage, &xinfos);
      if (token != G_TOKEN_NONE)
        return token;
      guint i = 0;
      for (i = 0; xinfos && xinfos[i]; i++)
        wave->xinfos = bse_xinfos_parse_assignment (wave->xinfos, xinfos[i]);
      g_strfreev (xinfos);
      parse_or_return (scanner, ')');
      expected_token = G_TOKEN_NONE; /* got ')' */
    }
  else if (quark == quark_load_wave)
    {
      BseFreqArray *skip_list, *load_list, *array;
      gchar *file_name, *wave_name;
      BseErrorType error;
      
      g_scanner_get_next_token (scanner); /* eat quark identifier */
      parse_or_return (scanner, G_TOKEN_STRING);
      file_name = g_strdup (scanner->value.v_string);
      if (g_scanner_get_next_token (scanner) != G_TOKEN_STRING)
	{
	  g_free (file_name);
	  return G_TOKEN_STRING;
	}
      wave_name = g_strdup (scanner->value.v_string);
      skip_list = bse_freq_array_new (1024);
      load_list = bse_freq_array_new (1024);
      if (BSE_STORAGE_COMPAT (storage, 0, 6, 4))
        while (g_scanner_get_next_token (scanner) != ')')
          {
            if (scanner->token == G_TOKEN_IDENTIFIER)
              {
                if (strcmp (scanner->value.v_identifier, "list") == 0)
                  array = load_list;
                else if (strcmp (scanner->value.v_identifier, "skip") == 0)
                  array = skip_list;
                else
                  {
                    expected_token = G_TOKEN_IDENTIFIER; /* want _valid_ identifier */
                    goto out_of_load_wave;
                  }
                g_scanner_peek_next_token (scanner);
                if (scanner->next_token != G_TOKEN_INT && scanner->next_token != G_TOKEN_FLOAT)
                  {
                    g_scanner_get_next_token (scanner); /* eat invalid token */
                    expected_token = G_TOKEN_FLOAT;
                    goto out_of_load_wave;
                  }
                while (g_scanner_peek_next_token (scanner) == G_TOKEN_INT ||
                       g_scanner_peek_next_token (scanner) == G_TOKEN_FLOAT)
                  {
                    g_scanner_get_next_token (scanner); /* int or float */
                    bse_freq_array_append (array, scanner->token == G_TOKEN_FLOAT ? scanner->value.v_float : scanner->value.v_int64);
                  }
              }
            else
              {
                expected_token = ')';
                goto out_of_load_wave;
              }
          }
      else
        parse_or_return (scanner, ')');
      error = bse_wave_load_wave_file (wave, file_name, wave_name,
                                       bse_freq_array_n_values (load_list) ? load_list : 0, skip_list,
                                       FALSE);
      if (error)
	bse_storage_warn (storage, "failed to load wave \"%s\" from \"%s\": %s",
			  wave_name, file_name, bse_error_blurb (error));
      expected_token = G_TOKEN_NONE; /* got ')' */
    out_of_load_wave:
      g_free (file_name);
      g_free (wave_name);
      bse_freq_array_free (skip_list);
      bse_freq_array_free (load_list);
    }
  else if (BSE_STORAGE_COMPAT (storage, 0, 6, 4) && quark == quark_set_locator)
    {
      g_scanner_get_next_token (scanner); /* eat quark identifier */
      parse_or_return (scanner, G_TOKEN_STRING);
      gchar *file_name = g_strdup (scanner->value.v_string);
      if (g_scanner_get_next_token (scanner) != G_TOKEN_STRING)
	{
	  g_free (file_name);
	  return G_TOKEN_STRING;
	}
      gchar *wave_name = g_strdup (scanner->value.v_string);
      if (g_scanner_get_next_token (scanner) != ')')
	{
	  g_free (file_name);
	  g_free (wave_name);
	  return ')';
	}
      // g_print ("set-locator \"%s\" \"%s\"\n", file_name, wave_name);
      bse_wave_set_locator (wave, file_name, wave_name);
      expected_token = G_TOKEN_NONE; /* got ')' */
    }
  else if (quark == quark_wave_chunk)
    {
      ParsedWaveChunk parsed_wchunk = { NULL, NULL, 0, 0, 0 };

      g_scanner_get_next_token (scanner); /* eat quark identifier */
      g_scanner_peek_next_token (scanner);
      bse_storage_compat_dhreset (storage); /* VERSION-FIXME: needed for <= 0.5.1 */
      if (scanner->next_token == G_TOKEN_FLOAT || scanner->next_token == G_TOKEN_INT)
        {
          g_scanner_get_next_token (scanner);
          bse_storage_compat_dhoscf (storage, /* VERSION-FIXME: needed for <= 0.5.1 */
                                     (scanner->token == G_TOKEN_INT ?
                                      scanner->value.v_int64 : scanner->value.v_float));
          g_scanner_peek_next_token (scanner);

          if (scanner->next_token == G_TOKEN_FLOAT || scanner->next_token == G_TOKEN_INT)
            {
              g_scanner_get_next_token (scanner);
              bse_storage_compat_dhmixf (storage, /* VERSION-FIXME: needed for <= 0.5.1 */
                                         (scanner->token == G_TOKEN_INT ?
                                          scanner->value.v_int64 : scanner->value.v_float));
            }
        }

      expected_token = bse_storage_parse_rest (storage, wave,
					       (BseTryStatement) parse_wave_chunk,
                                               &parsed_wchunk);
      bse_storage_compat_dhreset (storage); /* VERSION-FIXME: needed for <= 0.5.1 */

      if (expected_token == G_TOKEN_NONE && parsed_wchunk.data_handle)
	{
	  if (0)
	    g_printerr ("restore-wave-chunk: nch=%u of=%f mf=%f dh=%p\n",
                        parsed_wchunk.wh_n_channels,
                        parsed_wchunk.wh_osc_freq, parsed_wchunk.wh_mix_freq,
                        parsed_wchunk.data_handle);
          if (parsed_wchunk.data_handle && parsed_wchunk.xinfos)
            {
              GslDataHandle *tmp_handle = parsed_wchunk.data_handle;
              parsed_wchunk.data_handle = gsl_data_handle_new_add_xinfos (parsed_wchunk.data_handle, parsed_wchunk.xinfos);
              gsl_data_handle_unref (tmp_handle);
            }
	  GslDataCache *dcache = gsl_data_cache_from_dhandle (parsed_wchunk.data_handle,
                                                              BSE_CONFIG (wave_chunk_padding) * parsed_wchunk.wh_n_channels);
          const gchar *ltype = bse_xinfos_get_value (parsed_wchunk.xinfos, "loop-type");
          GslWaveLoopType loop_type = ltype ? gsl_wave_loop_type_from_string (ltype) : GSL_WAVE_LOOP_NONE;
          SfiNum loop_start = bse_xinfos_get_num (parsed_wchunk.xinfos, "loop-start");
          SfiNum loop_end = bse_xinfos_get_num (parsed_wchunk.xinfos, "loop-end");
          SfiNum loop_count = bse_xinfos_get_num (parsed_wchunk.xinfos, "loop-count");
          if (loop_end <= loop_start)
            {
              loop_start = loop_end = 0;
              loop_type = GSL_WAVE_LOOP_NONE;
              loop_count = 0;
            }
          GslWaveChunk *wchunk = gsl_wave_chunk_new (dcache, parsed_wchunk.wh_mix_freq, parsed_wchunk.wh_osc_freq,
                                                     loop_type, loop_start, loop_end, loop_count);
	  gsl_data_cache_unref (dcache);
          /* we need to keep inlined data handles open to protect against storage (.bse file) overwriting */
          BseErrorType error = bse_wave_add_inlined_wave_chunk (wave, wchunk);
          if (!error)
            bse_wave_add_chunk (wave, wchunk);
          else
            {
              bse_storage_error (storage, "failed to reopen inlined data handle (%s): %s",
                                 gsl_data_handle_name (wchunk->dcache->dhandle), bse_error_blurb (error));
              gsl_wave_chunk_unref (wchunk);
            }
	}
      if (parsed_wchunk.data_handle)
	gsl_data_handle_unref (parsed_wchunk.data_handle);
      g_strfreev (parsed_wchunk.xinfos);
    }
  else /* chain parent class' handler */
    expected_token = BSE_OBJECT_CLASS (parent_class)->restore_private (object, storage, scanner);
  
  return expected_token;
}
示例#30
0
文件: bsewave.c 项目: whitelynx/beast
static SfiTokenType
parse_wave_chunk (BseWave         *wave,
		  BseStorage      *storage,
                  GScanner        *scanner,
		  ParsedWaveChunk *pwchunk)
     
{
  if (g_scanner_peek_next_token (scanner) != G_TOKEN_IDENTIFIER)
    return SFI_TOKEN_UNMATCHED;
  
  GQuark quark = g_quark_try_string (scanner->next_value.v_string);
  if (quark == quark_xinfos)
    {
      g_scanner_get_next_token (scanner); /* eat identifier */
      g_strfreev (pwchunk->xinfos);
      pwchunk->xinfos = NULL;
      GTokenType token = bse_storage_parse_xinfos (storage, &pwchunk->xinfos);
      if (token != G_TOKEN_NONE)
        return token;
    }
  else if (bse_storage_match_data_handle (storage, quark))
    {
      guint expected_token;
      if (pwchunk->data_handle)
	return bse_storage_warn_skip (storage, "duplicate wave data reference");
      expected_token = bse_storage_parse_data_handle_rest (storage,
                                                           &pwchunk->data_handle,
                                                           &pwchunk->wh_n_channels,
                                                           &pwchunk->wh_mix_freq,
                                                           &pwchunk->wh_osc_freq);
      if (expected_token != G_TOKEN_NONE)
	return expected_token;
      if (!pwchunk->data_handle)
        bse_storage_warn (storage, "invalid wave data reference");
      /* closing brace already parsed by bse_storage_parse_data_handle_rest() */
      return G_TOKEN_NONE;
    }
  else if (BSE_STORAGE_COMPAT (storage, 0, 5, 1) && quark == quark_wave_handle)
    {
      guint expected_token;
      g_scanner_get_next_token (scanner); /* eat identifier */
      if (pwchunk->data_handle)
	return bse_storage_warn_skip (storage, "duplicate wave data reference");
      expected_token = bse_storage_parse_data_handle (storage,
                                                      &pwchunk->data_handle,
                                                      &pwchunk->wh_n_channels,
                                                      &pwchunk->wh_mix_freq,
                                                      &pwchunk->wh_osc_freq);
      if (expected_token != G_TOKEN_NONE)
	return expected_token;
      if (!pwchunk->data_handle)
        bse_storage_warn (storage, "invalid wave data reference");
    }
  else if (BSE_STORAGE_COMPAT (storage, 0, 5, 1) && quark == quark_n_channels)
    {
      g_scanner_get_next_token (scanner); /* eat quark identifier */
      parse_or_return (scanner, G_TOKEN_INT);
      bse_storage_compat_dhchannels (storage, scanner->value.v_int64);
    }
  else if (BSE_STORAGE_COMPAT (storage, 0, 6, 4) && (quark == quark_loop || quark == quark_ping_pong_loop))
    {
      g_scanner_get_next_token (scanner); /* eat quark identifier */
      if (quark == quark_loop)
        pwchunk->xinfos = bse_xinfos_add_value (pwchunk->xinfos, "loop-type", gsl_wave_loop_type_to_string (GSL_WAVE_LOOP_JUMP));
      if (quark == quark_ping_pong_loop)
        pwchunk->xinfos = bse_xinfos_add_value (pwchunk->xinfos, "loop-type", gsl_wave_loop_type_to_string (GSL_WAVE_LOOP_PINGPONG));
      parse_or_return (scanner, G_TOKEN_INT);
      pwchunk->xinfos = bse_xinfos_add_num (pwchunk->xinfos, "loop-count", scanner->value.v_int64);
      parse_or_return (scanner, G_TOKEN_INT);
      pwchunk->xinfos = bse_xinfos_add_num (pwchunk->xinfos, "loop-start", scanner->value.v_int64);
      parse_or_return (scanner, G_TOKEN_INT);
      pwchunk->xinfos = bse_xinfos_add_num (pwchunk->xinfos, "loop-end", scanner->value.v_int64);
    }
  else
    return SFI_TOKEN_UNMATCHED;
  return g_scanner_get_next_token (scanner) == ')' ? G_TOKEN_NONE : ')';
}