Exemplo n.º 1
0
gboolean rs_has_enfuse (gint major, gint minor)
{
  FILE *fp;
  char line1[128];
  char line2[128];
  int _major = 0, _minor = 0;
  gboolean retval = FALSE;

  fp = popen("enfuse -V","r"); /* enfuse 4.0-753b534c819d */
  if (fgets(line1, sizeof line1, fp) == NULL)
    {
      g_warning("fgets returned: %d\n", retval);
      return FALSE;
    }
  pclose(fp);

  fp = popen("enfuse -h","r"); /* ==== enfuse, version 3.2 ==== */
  if (fgets(line2, sizeof line2, fp) == NULL)
    {
      g_warning("fgets returned: %d\n", retval);
      return FALSE;
    }
  pclose(fp);

  GRegex *regex;
  gchar **tokens;

  regex = g_regex_new("(enfuse|.* enfuse, version) ([0-9])\x2E([0-9]+).*", 0, 0, NULL);
  tokens = g_regex_split(regex, line1, 0);
  if (tokens)
    {
      g_regex_unref(regex);
    }
  else 
    {
      tokens = g_regex_split(regex, line2, 0);
      g_regex_unref(regex);
      if (!tokens)
	return FALSE;
    }

  _major = atoi(tokens[2]);
  _minor = atoi(tokens[3]);

  if (_major > major) {
    retval = TRUE;
  } else if (_major == major) {
    if (_minor >= minor) {
      retval = TRUE;
    }
  }

  g_free(tokens);

  return retval;
}
Exemplo n.º 2
0
char *
gth_script_get_requested_attributes (GthScript *script)
{
	GRegex   *re;
	char    **a;
	int       i, n, j;
	char    **b;
	char     *attributes;

	re = g_regex_new ("%attr\\{([^}]+)\\}", 0, 0, NULL);
	a = g_regex_split (re, script->priv->command, 0);
	for (i = 0, n = 0; a[i] != NULL; i++)
		if ((i > 0) && (i % 2 == 0))
			n++;
	if (n == 0)
		return NULL;

	b = g_new (char *, n + 1);
	for (i = 1, j = 0; a[i] != NULL; i += 2, j++) {
		b[j] = g_strstrip (a[i]);
	}
	b[j] = NULL;
	attributes = g_strjoinv (",", b);

	g_free (b);
	g_strfreev (a);
	g_regex_unref (re);

	return attributes;
}
Exemplo n.º 3
0
static char *
create_attribute_list (GList    *file_list,
		      char     *match,
		      gboolean  quote_value)
{
	GRegex    *re;
	char     **a;
	char      *attribute = NULL;
	gboolean   first_value = TRUE;
	GString   *s;
	GList     *scan;

	re = g_regex_new ("%attr\\{([^}]+)\\}", 0, 0, NULL);
	a = g_regex_split (re, match, 0);
	if (g_strv_length (a) >= 2)
		attribute = g_strstrip (a[1]);

	if (attribute == NULL) {
		g_strfreev (a);
		g_regex_unref (re);
		return NULL;
	}

	s = g_string_new ("");
	for (scan = file_list; scan; scan = scan->next) {
		GthFileData *file_data = scan->data;
		char        *value;
		char        *quoted;

		value = gth_file_data_get_attribute_as_string (file_data, attribute);
		if (value == NULL)
			continue;

		if (value != NULL) {
			char *tmp_value;

			tmp_value = _g_utf8_replace (value, "[\r\n]", " ");
			g_free (value);
			value = tmp_value;
		}
		if (quote_value)
			quoted = g_shell_quote (value);
		else
			quoted = g_strdup (value);

		if (! first_value)
			g_string_append (s, " ");
		g_string_append (s, quoted);

		first_value = FALSE;

		g_free (quoted);
		g_free (value);
	}

	g_strfreev (a);
	g_regex_unref (re);

	return g_string_free (s, FALSE);
}
Exemplo n.º 4
0
static gchar *
normalise_whitespace (const gchar *orig)
{
  /* We normalise by the same rules as in intltool:
   *
   *   sub cleanup {
   *       s/^\s+//;
   *       s/\s+$//;
   *       s/\s+/ /g;
   *       return $_;
   *   }
   *
   *   $message = join "\n\n", map &cleanup, split/\n\s*\n+/, $message;
   *
   * Where \s is an ascii space character.
   *
   * We aim for ease of implementation over efficiency -- this code is
   * not run in normal applications.
   */
  static GRegex *cleanup[3];
  static GRegex *splitter;
  gchar **lines;
  gchar *result;
  gint i;

  if (g_once_init_enter (&splitter))
    {
      GRegex *s;

      cleanup[0] = g_regex_new ("^\\s+", 0, 0, 0);
      cleanup[1] = g_regex_new ("\\s+$", 0, 0, 0);
      cleanup[2] = g_regex_new ("\\s+", 0, 0, 0);
      s = g_regex_new ("\\n\\s*\\n+", 0, 0, 0);

      g_once_init_leave (&splitter, s);
    }

  lines = g_regex_split (splitter, orig, 0);
  for (i = 0; lines[i]; i++)
    {
      gchar *a, *b, *c;

      a = g_regex_replace_literal (cleanup[0], lines[i], -1, 0, "", 0, 0);
      b = g_regex_replace_literal (cleanup[1], a, -1, 0, "", 0, 0);
      c = g_regex_replace_literal (cleanup[2], b, -1, 0, " ", 0, 0);
      g_free (lines[i]);
      g_free (a);
      g_free (b);
      lines[i] = c;
    }

  result = g_strjoinv ("\n\n", lines);
  g_strfreev (lines);

  return result;
}
static char *
get_first_volume_name (const char           *name,
		       const char           *pattern,
		       FirstVolumeExtension  extension_type)
{
	char   *volume_name = NULL;
	GRegex *re;

	re = g_regex_new (pattern, G_REGEX_CASELESS, 0, NULL);
	if (g_regex_match (re, name, 0, NULL)) {
		char **parts;
		int    l, i;

		parts = g_regex_split (re, name, 0);
		l = strlen (parts[2]);
		switch (extension_type) {
		case FIRST_VOLUME_IS_000:
			for (i = 0; i < l; i++)
				parts[2][i] = '0';
			break;

		case FIRST_VOLUME_IS_001:
			for (i = 0; i < l; i++)
				parts[2][i] = (i < l - 1) ? '0' : '1';
			break;

		case FIRST_VOLUME_IS_RAR:
			if (g_str_has_suffix (parts[1], "r")) {
				parts[2][0] = 'a';
				parts[2][1] = 'r';
			}
			else {
				parts[2][0] = 'A';
				parts[2][1] = 'R';
			}
			break;
		}

		volume_name = g_strjoinv ("", parts);

		g_strfreev (parts);
	}
	g_regex_unref (re);

	if (volume_name != NULL) {
		char *tmp;

		tmp = volume_name;
		volume_name = g_filename_from_utf8 (tmp, -1, NULL, NULL, NULL);
		g_free (tmp);
	}

	return volume_name;
}
Exemplo n.º 6
0
static gchar * init_dir(char *argv[], gchar *localdir, gchar *fullinstalldir) {
    gchar *progname;
    gchar *newdir = NULL;
    GRegex *regex;
    GMatchInfo *match_info;

    progname = g_find_program_in_path(argv[0]);
    if (progname) {
        if (!g_path_is_absolute(progname)) {
            gchar *cur_dir = g_get_current_dir();
            gchar *prog_absolute;

            if (g_str_has_prefix(progname, "." G_DIR_SEPARATOR_S))
                prog_absolute = g_build_filename(cur_dir, progname + 2, NULL);
            else
                prog_absolute = g_build_filename(cur_dir, progname, NULL);
            g_free(progname);
            g_free(cur_dir);
            progname = prog_absolute;
        }

        static const gchar *gtkpodSEPsrcSEP = "(gtkpod[\x20-\x7E]*)([\\\\/]src[\\\\/])";

        regex = g_regex_new (gtkpodSEPsrcSEP, 0, 0, NULL);
        if (g_regex_match (regex, progname, 0, &match_info)) {
            /* Find the gtkpod* parathesis pattern */
            gchar *gtkpoddir = g_match_info_fetch (match_info, 1);

            /* Get the base directory by splitting the regex on the pattern */
            gchar **tokens = g_regex_split (regex, progname, 0);
            newdir = g_build_filename(tokens[0], gtkpoddir, localdir, NULL);
            g_free(gtkpoddir);
            g_strfreev(tokens);
        }

        g_match_info_free (match_info);
        g_regex_unref (regex);
        g_free(progname);

        if (newdir && !g_file_test(newdir, G_FILE_TEST_EXISTS)) {
            g_free(newdir);
            newdir = NULL;
        }
    }

    if (!newdir)
        newdir = g_strdup(fullinstalldir);
    else {
        USING_LOCAL = TRUE;
        g_printf(_("Using local %s directory since program was started from source directory:\n%s\n"), localdir, newdir);
    }

    return newdir;
}
Exemplo n.º 7
0
char *
gth_script_get_command_line (GthScript  *script,
			     GtkWindow  *parent,
			     GList      *file_list /* GthFileData */,
			     GError    **error)
{
	ReplaceData  *replace_data;
	GRegex       *qre;
	GRegex       *re;
	char        **a;
	GString      *command_line;
	int           i;
	char         *result;

	replace_data = g_new0 (ReplaceData, 1);
	replace_data->parent = parent;
	replace_data->script = script;
	replace_data->file_list = file_list;
	replace_data->error = error;

	re = g_regex_new ("%U|%F|%B|%N|%E|%P|%ask(\\{[^}]+\\}(\\{[^}]+\\})?)?|%attr\\{[^}]+\\}", 0, 0, NULL);

	replace_data->quote_values = FALSE;
	command_line = g_string_new ("");
	qre = g_regex_new ("%quote\\{([^}]+)\\}", 0, 0, NULL);
	a = g_regex_split (qre, script->priv->command, 0);
	for (i = 0; a[i] != NULL; i++) {
		if (i % 2 == 1) {
			char *sub_result;
			char *quoted;

			sub_result = g_regex_replace_eval (re, a[i], -1, 0, 0, command_line_eval_cb, replace_data, error);
			quoted = g_shell_quote (g_strstrip (sub_result));
			g_string_append (command_line, quoted);

			g_free (quoted);
			g_free (sub_result);
		}
		else
			g_string_append (command_line, a[i]);
	}

	replace_data->quote_values = TRUE;
	result = g_regex_replace_eval (re, command_line->str, -1, 0, 0, command_line_eval_cb, replace_data, error);

	g_free (replace_data);
	g_string_free (command_line, TRUE);
	g_regex_unref (qre);
	g_regex_unref (re);

	return result;
}
Exemplo n.º 8
0
static gboolean
rs_has_gimp(gint major, gint minor, gint micro) {
	FILE *fp;
	char line[128];
	int _major, _minor, _micro;
	gboolean retval = FALSE;

	fp = popen("gimp -v","r");
	if (fgets( line, sizeof line, fp) == NULL)
	{
		g_warning("fgets returned: %d\n", retval);
		return FALSE;
	}
	pclose(fp);

	GRegex *regex;
	gchar **tokens;
	
	regex = g_regex_new(".*([0-9])\x2E([0-9]+)\x2E([0-9]+).*", 0, 0, NULL);
	tokens = g_regex_split(regex, line, 0);
	g_regex_unref(regex);

	if (tokens[1])
		_major = atoi(tokens[1]);
	else
	{
		g_strfreev(tokens);
		return FALSE;
	}

	if (_major > major) {
		retval = TRUE;
	} else if (_major == major) {

		if (tokens[2])
			_minor = atoi(tokens[2]);
		else
		{
			g_strfreev(tokens);
			return FALSE;
		}

		if (_minor > minor) {
			retval = TRUE;
		} else if (_minor == minor) {
	
			if (tokens[3])
				_micro = atoi(tokens[3]);
			else
			{
				g_strfreev(tokens);
				return FALSE;
			}

			if (_micro >= micro) {
				retval = TRUE;
			}
		}
	}
	g_strfreev(tokens);

	return retval;
}
Exemplo n.º 9
0
int biblio_parse_entries (GuBiblio* bc, gchar *bib_content) {
    int entry_total = 0;

    GtkTreeIter iter;
    GRegex* regex_entry;
    GRegex* subregex_ident;
    GRegex* subregex_title;
    GRegex* subregex_author;
    GRegex* subregex_year;
    GRegex* regex_formatting;

    gchar* author_out = NULL;
    gchar* title_out = NULL;

    GMatchInfo *match_entry;

    regex_entry = g_regex_new (
        "(@article|@book|@booklet|@conference|@inbook|@incollection|"
        "@inproceedings|@manual|@mastersthesis|@misc|@phdthesis|"
        "@proceedings|@techreport|@unpublished)([^@]*)",
        (G_REGEX_CASELESS | G_REGEX_DOTALL), 0, NULL);

    subregex_ident = g_regex_new ("@.+{([^,]+),", 0, 0, NULL);
    subregex_title = g_regex_new
		("[^book]title[\\s]*=[\\s]*(.*)", G_REGEX_CASELESS, 0, NULL);
    subregex_author = g_regex_new
		("author[\\s]*=[\\s]*(.*)", G_REGEX_CASELESS, 0, NULL);
    subregex_year = g_regex_new
		("year[\\s]*=[\\s]*[{|\"]?([1|2][0-9]{3})", G_REGEX_CASELESS, 0, NULL);
    regex_formatting = g_regex_new ("[{|}|\"|,|\\$]", 0, 0, NULL);


    g_regex_match (regex_entry, bib_content, 0, &match_entry);

    while (g_match_info_matches (match_entry)) {

        gchar *entry = g_match_info_fetch (match_entry, 0);

        gchar **ident_res = g_regex_split (subregex_ident, entry, 0);
        gchar **title_res = g_regex_split (subregex_title, entry, 0);
        gchar **author_res = g_regex_split (subregex_author, entry, 0);
        gchar **year_res = g_regex_split (subregex_year, entry, 0);

        if (author_res[1])
            author_out = g_regex_replace (regex_formatting, author_res[1],
                                         -1, 0, "", 0, 0);
        else author_out = NULL;

        if (title_res[1])
            title_out = g_regex_replace (regex_formatting, title_res[1],
                                         -1, 0, "", 0, 0);
        else title_out = NULL;

        gtk_list_store_append (bc->list_biblios, &iter);
        gtk_list_store_set (bc->list_biblios, &iter, 0, ident_res[1],
                                                    1, title_out,
                                                    2, author_out,
                                                    3, year_res[1], -1);
        g_free (author_out);
        g_free (title_out);
        g_strfreev (ident_res);
        g_strfreev (title_res);
        g_strfreev (author_res);
        g_strfreev (year_res);
        g_free (entry);
        ++entry_total;

        g_match_info_next (match_entry, NULL);
    }
    g_match_info_free (match_entry);
    g_regex_unref (regex_entry);
    g_regex_unref (subregex_ident);
    g_regex_unref (subregex_title);
    g_regex_unref (subregex_author);
    g_regex_unref (subregex_year);
    g_regex_unref (regex_formatting);

    return entry_total;
}
Exemplo n.º 10
0
gboolean rs_has_enfuse (gint major, gint minor)
{
  FILE *fp;
  char line1[128];
  char line2[128];
  int _major = 0, _minor = 0;

  /* We ignore thread safety here, the worst that can happen is that we check multiple times */
  static gboolean cached = FALSE;
  static gboolean retval = FALSE;

  if (cached)
    return retval;

  fp = popen("enfuse -V","r"); /* enfuse 4.0-753b534c819d */
  if (fp == NULL)
    {
      cached = TRUE;
      retval = FALSE;

      return retval;
    }

  if ((fp == NULL) || (fgets(line1, sizeof line1, fp) == NULL))
    {
      cached = TRUE;
      retval = FALSE;

      pclose(fp);

      return retval;
    }
  pclose(fp);

  fp = popen("enfuse -h","r"); /* ==== enfuse, version 3.2 ==== */
  if (fp == NULL)
    {
      cached = TRUE;
      retval = FALSE;

      return retval;
    }

  if (fgets(line2, sizeof line2, fp) == NULL)
    {
      cached = TRUE;
      retval = FALSE;

      pclose(fp);

      return retval;
    }
  pclose(fp);

  GRegex *regex;
  gchar **tokens;

  regex = g_regex_new("(enfuse|.* enfuse, version) ([0-9])\x2E([0-9]+).*", 0, 0, NULL);
  tokens = g_regex_split(regex, line1, 0);
  if (tokens)
    {
      g_regex_unref(regex);
    }
  else 
    {
      tokens = g_regex_split(regex, line2, 0);
      g_regex_unref(regex);
      if (!tokens)
        {
          cached = TRUE;
          retval = FALSE;

          return retval;

        }
    }

  _major = atoi(tokens[2]);
  _minor = atoi(tokens[3]);

  if (_major > major) {
    retval = TRUE;
  } else if (_major == major) {
    if (_minor >= minor) {
      retval = TRUE;
    }
  }

  g_free(tokens);

  cached = TRUE;
  return retval;
}
Exemplo n.º 11
0
static char *
ask_value (ReplaceData  *replace_data,
	   char         *match,
	   GError      **error)
{
	GthFileData     *file_data;
	GRegex          *re;
	char           **a;
	int              len;
	char            *prompt;
	char            *default_value;
	GtkBuilder      *builder;
	GtkWidget       *dialog;
	GthThumbLoader  *thumb_loader;
	int              result;
	char            *value;

	file_data = (GthFileData *) replace_data->file_list->data;

	re = g_regex_new ("%ask(\\{([^}]+)\\}(\\{([^}]+)\\})?)?", 0, 0, NULL);
	a = g_regex_split (re, match, 0);
	len = g_strv_length (a);
	if (len >= 3)
		prompt = g_strstrip (a[2]);
	else
		prompt = _("Enter a value:");
	if (len >= 5)
		default_value = g_strstrip (a[4]);
	else
		default_value = "";

	builder = gtk_builder_new_from_resource ("/org/gnome/gThumb/list_tools/data/ui/ask-value.ui");

	dialog = g_object_new (GTK_TYPE_DIALOG,
			       "title", "",
			       "transient-for", GTK_WINDOW (replace_data->parent),
			       "modal", TRUE,
			       "destroy-with-parent", FALSE,
			       "use-header-bar", _gtk_settings_get_dialogs_use_header (),
			       "resizable", TRUE,
			       NULL);
	gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), _gtk_builder_get_widget (builder, "dialog_content"));
	gtk_dialog_add_buttons (GTK_DIALOG (dialog),
			        _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL,
				_GTK_LABEL_EXECUTE, GTK_RESPONSE_OK,
				(gth_script_for_each_file (replace_data->script) ? _("_Skip") : NULL), GTK_RESPONSE_NO,
				NULL);
	_gtk_dialog_add_class_to_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_STYLE_CLASS_SUGGESTED_ACTION);

	gtk_label_set_text (GTK_LABEL (_gtk_builder_get_widget (builder, "title_label")), gth_script_get_display_name (replace_data->script));
	gtk_label_set_text (GTK_LABEL (_gtk_builder_get_widget (builder, "filename_label")), g_file_info_get_display_name (file_data->info));
	gtk_label_set_text (GTK_LABEL (_gtk_builder_get_widget (builder, "request_label")), prompt);
	gtk_entry_set_text (GTK_ENTRY (_gtk_builder_get_widget (builder, "request_entry")), default_value);

	g_object_ref (builder);
	thumb_loader = gth_thumb_loader_new (128);
	gth_thumb_loader_load (thumb_loader,
			       file_data,
			       NULL,
			       thumb_loader_ready_cb,
			       builder);

	result = gtk_dialog_run (GTK_DIALOG (dialog));
	if (result == GTK_RESPONSE_OK) {
		value = g_utf8_normalize (gtk_entry_get_text (GTK_ENTRY (_gtk_builder_get_widget (builder, "request_entry"))), -1, G_NORMALIZE_NFC);
	}
	else {
		if (result == GTK_RESPONSE_NO)
			*error = g_error_new_literal (GTH_TASK_ERROR, GTH_TASK_ERROR_SKIP_TO_NEXT_FILE, "");
		else
			*error = g_error_new_literal (GTH_TASK_ERROR, GTH_TASK_ERROR_CANCELLED, "");
		value = NULL;
	}

	gtk_widget_destroy (dialog);

	g_object_unref (builder);
	g_strfreev (a);
	g_regex_unref (re);

	return value;
}
Exemplo n.º 12
0
/**
 * Execute query.
 * @param query the query to execute.
 * @param playlist set to TRUE to search only songs in the playlist.
 *
 * @returns the search result in a #MpdData list.
 */
MpdData *advanced_search(const gchar * query, int in_playlist)
{
    MpdData *data_return = NULL;
    gchar **text = g_regex_split(search_regex, query, 0);
    int i = 0;
    gboolean found = FALSE;
    for (i = 0; text && text[i]; i++)
    {
        int type;
        /* Or sign, if hit, a new query is started */
        if (strcmp(text[i], "||") == 0)
        {
            MpdData *data;
            /* Commit the currently in active search and append the results */
            if (in_playlist)
                data = mpd_playlist_search_commit(connection);
            else
                data = mpd_database_search_commit(connection);
            data_return = mpd_data_concatenate(data_return, data);
            found = FALSE;
            continue;
        }
        /* empty element */
        if (text[i][0] == '\0')
            continue;

        /* Parse the tag name. */
        type = mpd_misc_get_tag_by_name(g_strstrip(text[i]));
        if (type != MPD_TAG_NOT_FOUND && text[i + 1])
        {
            gchar **split = tokenize_string(text[i + 1]);
            int j;
            for (j = 0; split && split[j]; j++)
            {
                if (!found)
                {
                    if (in_playlist)
                        mpd_playlist_search_start(connection, FALSE);
                    else
                        mpd_database_search_start(connection, FALSE);
                    found = TRUE;
                }
                if (in_playlist)
                    mpd_playlist_search_add_constraint(connection, type, g_strstrip(split[j]));
                else
                    mpd_database_search_add_constraint(connection, type, g_strstrip(split[j]));
            }
            if (split)
                g_strfreev(split);
            i++;
        } else
        {
            gchar **split = tokenize_string(text[i]);
            int j;
            for (j = 0; split && split[j]; j++)
            {
                if (!found)
                {
                    if (in_playlist)
                        mpd_playlist_search_start(connection, FALSE);
                    else
                        mpd_database_search_start(connection, FALSE);
                    found = TRUE;
                }
                if (in_playlist)
                    mpd_playlist_search_add_constraint(connection, MPD_TAG_ITEM_ANY, split[j]);
                else
                    mpd_database_search_add_constraint(connection, MPD_TAG_ITEM_ANY, split[j]);
            }
            if (split)
                g_strfreev(split);
        }
    }
    if (text)
        g_strfreev(text);
    /* Execute the active search and append the results */
    if (found)
    {
        MpdData *data;
        if (in_playlist)
            data = mpd_playlist_search_commit(connection);
        else
            data = mpd_database_search_commit(connection);
        data_return = mpd_data_concatenate(data_return, data);
    }
    /* remove possible duplicates (because of concatenating queries) */
    return misc_mpddata_remove_duplicate_songs(data_return);
}
void
GStreamerFilter::setCommandProperties (string rest_token)
{
  std::vector<std::string>  words;
  std::vector<std::string>::iterator it;
  gchar **elements;
  GRegex *regex;
  gint i;
  GObjectClass *elementClass;

  regex = g_regex_new ("([a-zA-Z0-9\\- ]*=[ ]*[a-zA-Z0-9\\-\\/\",=]+)",
                       G_REGEX_ANCHORED, G_REGEX_MATCH_ANCHORED, NULL);
  elements = g_regex_split (regex, rest_token.c_str(),
                            G_REGEX_MATCH_NOTEMPTY_ATSTART);
  g_regex_unref (regex);
  i = 0;

  while (elements[i] != NULL) {
    if (g_strcmp0 (elements [i], "") == 0) {
      i++;
      continue;
    }

    std::string aux (elements[i]);
    std::string::iterator end_pos = std::remove (aux.begin(), aux.end(), ' ');
    aux.erase (end_pos, aux.end() );
    words.push_back (aux);
    i++;
  }

  g_strfreev (elements);

  elementClass = G_OBJECT_GET_CLASS (this->filter);

  regex = g_regex_new ("^([a-zA-Z0-9\\-]+)",
                       G_REGEX_OPTIMIZE, G_REGEX_MATCH_ANCHORED, NULL);

  for (std::string aux : words) {
    int i;
    GParamSpec *pspec;

    elements = g_regex_split (regex, aux.c_str(), G_REGEX_MATCH_NOTEMPTY_ATSTART);
    i = 0;

    while (elements[i] != NULL) {
      i++;
    }

    if ( i != 3) {
      g_strfreev (elements);
      continue;
    }

    pspec = g_object_class_find_property (elementClass, elements[1]);

    if (pspec == NULL) {
      GST_ERROR ("Property %s not found", elements[1]);
      g_strfreev (elements);
      continue;
    }

    if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_STRING) {
      g_object_set (G_OBJECT (this->filter), elements[1], (elements[2] + 1), NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( (G_PARAM_SPEC_VALUE_TYPE (pspec) ) == G_TYPE_BOOLEAN) {
      if (g_ascii_strcasecmp ( (elements[2] + 1), "true") == 0 ) {
        g_object_set (G_OBJECT (this->filter), elements[1], TRUE, NULL);
      }

      if (g_ascii_strcasecmp ( (elements[2] + 1), "false") == 0 ) {
        g_object_set (G_OBJECT (this->filter), elements[1], FALSE, NULL);
      }

      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_INT) {
      gint aux;
      sscanf (elements[2] + 1, "%d", &aux);
      g_object_set (G_OBJECT (this->filter), elements[1], aux, NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_UINT) {
      guint aux;
      sscanf (elements[2] + 1, "%d", &aux);
      g_object_set (G_OBJECT (this->filter), elements[1], aux, NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_FLOAT) {
      gfloat aux;
      sscanf (elements[2] + 1, "%f", &aux);
      g_object_set (G_OBJECT (this->filter), elements[1], aux, NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_DOUBLE) {
      gdouble aux;
      sscanf (elements[2] + 1, "%lf", &aux);
      g_object_set (G_OBJECT (this->filter), elements[1], aux, NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_INT64) {
      gint64 aux;
      sscanf (elements[2] + 1, "%" G_GINT64_FORMAT, &aux);
      g_object_set (G_OBJECT (this->filter), elements[1], aux, NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_UINT64) {
      guint64 aux;
      sscanf (elements[2] + 1, "%" G_GUINT64_FORMAT, &aux);
      g_object_set (G_OBJECT (this->filter), elements[1], aux, NULL);
      GST_DEBUG ("Setting %s = %s as %s", elements[1], elements[2] + 1,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    } else if ( G_TYPE_IS_ENUM (G_PARAM_SPEC_VALUE_TYPE (pspec) ) ) {
      GEnumValue *value;
      GEnumClass *enumClass;
      gint aux;

      enumClass = G_ENUM_CLASS (g_type_class_ref (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );

      if (enumClass == NULL) {
        g_strfreev (elements);
        continue;
      }

      //try to get the enum value from its integer value.
      sscanf (elements[2] + 1, "%d", &aux);
      value = g_enum_get_value (enumClass, aux);

      if (value != NULL) {
        g_object_set (G_OBJECT (this->filter), elements[1], value->value, NULL);
        GST_DEBUG ("Setting %s = %s as %s, %s", elements[1], elements[2] + 1,
                   g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ), value->value_nick);
      } else {
        //try to get the enum value from its name.
        value = g_enum_get_value_by_nick (enumClass, elements[2] + 1);

        if (value != NULL) {
          g_object_set (G_OBJECT (this->filter), elements[1], value->value, NULL);
          GST_DEBUG ("Setting %s = %s as %s, %s", elements[1], elements[2] + 1,
                     g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ), value->value_nick);
        } else {
          GST_ERROR ("Enum value not found");
        }
      }
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == GST_TYPE_CAPS) {
      GstCaps *caps = gst_caps_from_string ( (elements[2] + 1) );

      g_object_set (G_OBJECT (this->filter), elements[1], caps, NULL);
      GST_DEBUG ("Setting %s = %" GST_PTR_FORMAT " as %s", elements[1], caps,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
      gst_caps_unref (caps);
    } else if ( G_PARAM_SPEC_VALUE_TYPE (pspec) == GST_TYPE_STRUCTURE) {
      GstStructure *st = gst_structure_new_from_string ( (elements[2] + 1) );

      g_object_set (G_OBJECT (this->filter), elements[1], st, NULL);
      GST_DEBUG ("Setting %s = %" GST_PTR_FORMAT " as %s", elements[1], st,
                 g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
      gst_structure_free (st);
    } else {
      GST_DEBUG ("Unknown param %s = %s as type %s", elements[1],
                 (elements[2] + 1), g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec) ) );
    }

    g_strfreev (elements);
  }

  g_regex_unref (regex);
  words.clear ();
}
Exemplo n.º 14
0
static char *
_load_genicam (ArvGvDevice *gv_device, guint32 address, size_t  *size)
{
	char filename[ARV_GVBS_XML_URL_SIZE];
	char **tokens;
	char *genicam = NULL;

	g_return_val_if_fail (size != NULL, NULL);

	*size = 0;

	if (!arv_device_read_memory (ARV_DEVICE (gv_device), address, ARV_GVBS_XML_URL_SIZE, filename, NULL))
		return NULL;

	filename[ARV_GVBS_XML_URL_SIZE - 1] = '\0';

	arv_debug_device ("[GvDevice::load_genicam] xml url = '%s' at 0x%x", filename, address);

	tokens = g_regex_split (arv_gv_device_get_url_regex (), filename, 0);

	if (tokens[0] != NULL) {
		if (g_strcmp0 (tokens[1], "File:") == 0)
			g_file_get_contents (filename, &genicam, NULL, NULL);
		else if (g_strcmp0 (tokens[1], "Local:") == 0 &&
			 tokens[2] != NULL &&
			 tokens[3] != NULL &&
			 tokens[4] != NULL) {
			guint32 file_address;
			guint32 file_size;

			file_address = strtoul (tokens[3], NULL, 16);
			file_size = strtoul (tokens[4], NULL, 16);

			arv_debug_device ("[GvDevice::load_genicam] Xml address = 0x%x - size = 0x%x - %s",
					  file_address, file_size, tokens[2]);

			if (file_size > 0) {
				genicam = g_malloc (file_size);
				if (arv_device_read_memory (ARV_DEVICE (gv_device), file_address, file_size,
							    genicam, NULL)) {
					genicam [file_size - 1] = '\0';

					if (g_str_has_suffix (tokens[2], ".zip")) {
						ArvZip *zip;
						const GSList *zip_files;

						arv_debug_device ("[GvDevice::load_genicam] Zipped xml data");

						zip = arv_zip_new (genicam, file_size);
						zip_files = arv_zip_get_file_list (zip);

						if (zip_files != NULL) {
							const char *zip_filename;
							void *tmp_buffer;
							size_t tmp_buffer_size;

							zip_filename = arv_zip_file_get_name (zip_files->data);
							tmp_buffer = arv_zip_get_file (zip, zip_filename,
										       &tmp_buffer_size);

							g_free (genicam);
							file_size = tmp_buffer_size;
							genicam = tmp_buffer;
						} else
							arv_warning_device ("[GvDevice::load_genicam] Invalid format");
						arv_zip_free (zip);
					}
					*size = file_size;
				} else {
					g_free (genicam);
					genicam = NULL;
					*size = 0;
				}
			}
		}
	}

	g_strfreev (tokens);

	return genicam;
}
Exemplo n.º 15
0
static gchar* plank_services_logger_format_message (const gchar* msg) {
	gchar* result = NULL;
	gboolean _tmp0_ = FALSE;
	GRegex* _tmp1_ = NULL;
	const gchar* _tmp16_ = NULL;
	gchar* _tmp17_ = NULL;
	g_return_val_if_fail (msg != NULL, NULL);
	_tmp1_ = plank_services_logger_re;
	if (_tmp1_ != NULL) {
		GRegex* _tmp2_ = NULL;
		const gchar* _tmp3_ = NULL;
		gboolean _tmp4_ = FALSE;
		_tmp2_ = plank_services_logger_re;
		_tmp3_ = msg;
		_tmp4_ = g_regex_match (_tmp2_, _tmp3_, 0, NULL);
		_tmp0_ = _tmp4_;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		gchar** parts = NULL;
		GRegex* _tmp5_ = NULL;
		const gchar* _tmp6_ = NULL;
		gchar** _tmp7_ = NULL;
		gchar** _tmp8_ = NULL;
		gint parts_length1 = 0;
		gint _parts_size_ = 0;
		gchar** _tmp9_ = NULL;
		gint _tmp9__length1 = 0;
		const gchar* _tmp10_ = NULL;
		gchar** _tmp11_ = NULL;
		gint _tmp11__length1 = 0;
		const gchar* _tmp12_ = NULL;
		gchar** _tmp13_ = NULL;
		gint _tmp13__length1 = 0;
		const gchar* _tmp14_ = NULL;
		gchar* _tmp15_ = NULL;
		_tmp5_ = plank_services_logger_re;
		_tmp6_ = msg;
		_tmp8_ = _tmp7_ = g_regex_split (_tmp5_, _tmp6_, 0);
		parts = _tmp8_;
		parts_length1 = _vala_array_length (_tmp7_);
		_parts_size_ = parts_length1;
		_tmp9_ = parts;
		_tmp9__length1 = parts_length1;
		_tmp10_ = _tmp9_[1];
		_tmp11_ = parts;
		_tmp11__length1 = parts_length1;
		_tmp12_ = _tmp11_[3];
		_tmp13_ = parts;
		_tmp13__length1 = parts_length1;
		_tmp14_ = _tmp13_[4];
		_tmp15_ = g_strdup_printf ("[%s%s] %s", _tmp10_, _tmp12_, _tmp14_);
		result = _tmp15_;
		parts = (_vala_array_free (parts, parts_length1, (GDestroyNotify) g_free), NULL);
		return result;
	}
	_tmp16_ = msg;
	_tmp17_ = g_strdup (_tmp16_);
	result = _tmp17_;
	return result;
}