static gchar * dup_network_service (EmpathyIrcNetwork *network) { /* Account.Service has to be a lower case alphanumeric string which may * also contain '-' but not start with it. */ #define VALID G_CSET_a_2_z G_CSET_DIGITS "-" gchar *service, *tmp; service = g_strdup (empathy_irc_network_get_name (network)); service = g_strstrip (service); if (tp_str_empty (service)) { g_free (service); return NULL; } tmp = service; service = g_ascii_strdown (service, -1); g_free (tmp); service = g_strcanon (service, VALID, '-'); if (service[0] == '-') { tmp = service; service = g_strdup (service + 1); g_free (tmp); } return service; }
static GstylePalette * gstyle_palette_new_from_gpl (GFile *file, GCancellable *cancellable, GError **error) { g_autoptr(GDataInputStream) data_stream = NULL; g_autoptr (GInputStream) stream = NULL; GstylePalette *palette = NULL; g_autofree gchar *palette_name = NULL; g_autofree gchar *id = NULL; GstyleColor *color; gchar *color_name; GdkRGBA rgba; GError *tmp_error = NULL; gint line_count = 1; gboolean has_colors = FALSE; g_assert (G_IS_FILE (file)); if ((stream = G_INPUT_STREAM (g_file_read (file, cancellable, &tmp_error)))) { data_stream = g_data_input_stream_new (stream); if (read_gpl_header (data_stream, &palette_name, &line_count, &tmp_error)) { id = g_strcanon (g_strdup (palette_name), GSTYLE_PALETTE_ID_CHARSET, '_'); palette = g_object_new (GSTYLE_TYPE_PALETTE, "id", id, "name", palette_name, "file", file, NULL); while (read_gpl_color_line (data_stream, &rgba, &color_name, &line_count, &tmp_error)) { has_colors = TRUE; color = gstyle_color_new_from_rgba (color_name, GSTYLE_COLOR_KIND_RGB_HEX6, &rgba); gstyle_palette_add (palette, color, &tmp_error); g_object_unref (color); g_free (color_name); if (tmp_error != NULL) break; } } } if (tmp_error == NULL && !has_colors) { g_autofree gchar *uri = g_file_get_uri (file); g_set_error (&tmp_error, GSTYLE_PALETTE_ERROR, GSTYLE_PALETTE_ERROR_EMPTY, _("%s: palette is empty\n"), uri); } if (tmp_error != NULL) { g_clear_object (&palette); g_propagate_error (error, tmp_error); } return palette; }
char * export_compress_str(char * buf, int limit) { char * str; char * valid = "abcdefghijklmnopqrstuvwxyz0123456789"; int i = 0; int j = 0; str = g_ascii_strdown(buf, -1); g_strcanon(str, valid, '_'); for (i = 0; str[i]; i++) { if (str[i] == '_') { continue; } str[j] = str[i]; j++; } if (limit < j) { str[limit] = '\0'; } else if (j > 0) { str[j] = '\0'; } else { str[0] = 'x'; str[1] = '\0'; } return str; }
static gchar * get_locale (void) { const char *loc = NULL; gchar *ret; #ifdef ENABLE_NLS #if defined(LC_MESSAGES) loc = setlocale (LC_MESSAGES, NULL); GST_LOG ("LC_MESSAGES: %s", GST_STR_NULL (loc)); #elif defined(LC_ALL) loc = setlocale (LC_ALL, NULL); GST_LOG ("LC_ALL: %s", GST_STR_NULL (loc)); #else GST_LOG ("Neither LC_ALL nor LC_MESSAGES defined"); #endif #else /* !ENABLE_NLS */ GST_LOG ("i18n disabled"); #endif if (loc == NULL || g_ascii_strncasecmp (loc, "en", 2) == 0) return NULL; /* en_GB.UTF-8 => en */ ret = g_ascii_strdown (loc, -1); ret = g_strcanon (ret, "abcdefghijklmnopqrstuvwxyz", '\0'); GST_LOG ("using locale: %s", ret); return ret; }
GType gst_sf_minor_types_get_type (void) { static GType sf_minor_types_type = 0; static GEnumValue *sf_minor_types = NULL; if (!sf_minor_types_type) { SF_FORMAT_INFO format_info; int k, count; sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)); sf_minor_types = g_new0 (GEnumValue, count + 1); for (k = 0; k < count; k++) { format_info.format = k; sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)); sf_minor_types[k].value = format_info.format; sf_minor_types[k].value_name = g_strdup (format_info.name); sf_minor_types[k].value_nick = g_ascii_strdown (format_info.name, -1); g_strcanon ((gchar *) sf_minor_types[k].value_nick, G_CSET_a_2_z G_CSET_DIGITS "-", '-'); } sf_minor_types_type = g_enum_register_static ("GstSndfileMinorTypes", sf_minor_types); } return sf_minor_types_type; }
static void process_app_info (CcNotificationsPanel *panel, GTask *task, GAppInfo *app_info) { Application *app; char *app_id; char *canonical_app_id; char *path; GSettings *settings; GSource *source; app_id = app_info_get_id (app_info); canonical_app_id = g_strcanon (app_id, "0123456789" "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "-", '-'); path = g_strconcat (APP_PREFIX, canonical_app_id, "/", NULL); settings = g_settings_new_with_path (APP_SCHEMA, path); app = g_slice_new (Application); app->canonical_app_id = canonical_app_id; app->settings = settings; app->app_info = g_object_ref (app_info); app->panel = g_object_ref (panel); source = g_idle_source_new (); g_source_set_callback (source, queued_app_info, app, NULL); g_source_attach (source, g_task_get_context (task)); g_free (path); }
/** * \internal * \brief Chcek sanity of a key * * \retval 0 sane * \retval non-zero bonkers */ static int check_key_sanity(const char *key) { static const char VALID_CHARS[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-."; char sanitized_key[PATH_MAX]; if (mh_strlen_zero(key)) { mh_err("key cannot be empty"); return -1; } if (g_str_has_prefix(key, ".")) { mh_err("Invalid key filename %s", key); return -1; } mh_string_copy(sanitized_key, key, sizeof(sanitized_key)); g_strcanon(sanitized_key, VALID_CHARS, '!'); if (strchr(sanitized_key, '!') != NULL) { mh_err("Invalid key filename %s", sanitized_key); return -1; } return 0; }
static gchar * generate_subject (void) { static const char HEX[] = "0123456789abcdef"; gchar *content; gchar *subject; /* * HACK: We have to use a unique value in DN because otherwise * firefox hangs. * * https://bugzilla.redhat.com/show_bug.cgi?id=1204670 * * In addition we have to generate the certificate with CA:TRUE * because old versions of NSS refuse to process self-signed * certificates if that's not the case. * */ if (g_file_get_contents ("/etc/machine-id", &content, NULL, NULL)) { subject = g_strdup_printf ("/O=%s/CN=localhost", g_strstrip (g_strcanon (content, HEX, ' '))); g_free (content); } else { subject = g_strdup ("/CN=localhost"); } return subject; }
static void ladspa_describe_plugin (const gchar * file_name, const gchar * entry_name, LADSPA_Descriptor_Function descriptor_function) { const LADSPA_Descriptor *desc; guint i; /* walk through all the plugins in this plugin library */ for (i = 0; (desc = descriptor_function (i)); i++) { GstStructure *ladspa_meta = NULL; GValue value = { 0, }; gchar *tmp; gchar *type_name; guint audio_in, audio_out, control_in, control_out; /* count ports of this plugin */ ladspa_count_ports (desc, &audio_in, &audio_out, &control_in, &control_out); /* categorize */ if (audio_in == 0 && audio_out == 0) { GST_WARNING ("Skipping control only element (%s:%lu/%s)", entry_name, desc->UniqueID, desc->Label); continue; } else if (audio_in == 0) { tmp = g_strdup_printf ("ladspasrc-%s-%s", entry_name, desc->Label); } else if (audio_out == 0) { tmp = g_strdup_printf ("ladspasink-%s-%s", entry_name, desc->Label); } else { tmp = g_strdup_printf ("ladspa-%s-%s", entry_name, desc->Label); } type_name = g_ascii_strdown (tmp, -1); g_free (tmp); g_strcanon (type_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-'); /* check if the type is already registered */ if (g_type_from_name (type_name)) { GST_WARNING ("Plugin identifier collision for %s (%s:%lu/%s)", type_name, entry_name, desc->UniqueID, desc->Label); g_free (type_name); continue; } ladspa_meta = gst_structure_new ("ladspa", "plugin-filename", G_TYPE_STRING, file_name, "element-ix", G_TYPE_UINT, i, "element-type-name", G_TYPE_STRING, type_name, "audio-in", G_TYPE_UINT, audio_in, "audio-out", G_TYPE_UINT, audio_out, "control-in", G_TYPE_UINT, control_in, "control-out", G_TYPE_UINT, control_out, NULL); g_value_init (&value, GST_TYPE_STRUCTURE); g_value_set_boxed (&value, ladspa_meta); gst_structure_set_value (ladspa_meta_all, type_name, &value); g_value_unset (&value); } }
static GimpObject * gimp_gegl_tool_get_config (GimpGeglTool *tool) { static GHashTable *config_types = NULL; GType config_type; if (! config_types) config_types = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL); config_type = (GType) g_hash_table_lookup (config_types, tool->operation); if (! config_type) { GTypeInfo info = { sizeof (GimpObjectClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gimp_gegl_tool_config_class_init, NULL, /* class_finalize */ tool->operation, sizeof (GimpObject), 0, /* n_preallocs */ (GInstanceInitFunc) NULL, }; const GInterfaceInfo config_info = { NULL, /* interface_init */ NULL, /* interface_finalize */ NULL /* interface_data */ }; gchar *type_name = g_strdup_printf ("GimpGeglTool-%s-config", tool->operation); g_strcanon (type_name, G_CSET_DIGITS "-" G_CSET_a_2_z G_CSET_A_2_Z, '-'); config_type = g_type_register_static (GIMP_TYPE_OBJECT, type_name, &info, 0); g_free (type_name); g_type_add_interface_static (config_type, GIMP_TYPE_CONFIG, &config_info); g_hash_table_insert (config_types, g_strdup (tool->operation), (gpointer) config_type); } return g_object_new (config_type, NULL); }
static void ggp_edisc_xfer_send_init(PurpleXfer *xfer) { ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer); purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_NOT_STARTED); edisc_xfer->filename = g_strdup(purple_xfer_get_filename(xfer)); g_strcanon(edisc_xfer->filename, GGP_EDISC_FNAME_ALLOWED, '_'); ggp_ggdrive_auth(edisc_xfer->gc, ggp_edisc_xfer_send_init_authenticated, xfer); }
/** * cd_main_ensure_dbus_path: **/ gchar * cd_main_ensure_dbus_path (const gchar *object_path) { gchar *object_path_tmp; object_path_tmp = g_strdup (object_path); g_strcanon (object_path_tmp, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "1234567890_", '_'); return object_path_tmp; }
static gchar * get_machine_id (void) { static const char HEX[] = "0123456789abcdef"; gchar *content; gchar *machine_id = NULL; if (g_file_get_contents ("/etc/machine-id", &content, NULL, NULL)) machine_id = g_strstrip (g_strcanon (content, HEX, ' ')); return machine_id; }
/** * e_mapi_util_profile_name: * @mapi_ctx: a mapi context; can be NULL if @migrate is FALSE * @empd: profile information used to construct the name * @migrate: whether migrate old profile name to a new one * * Constructs profile name from given parameters and * returns it as a newly allocated string. It can also * rename old profile name string to a new name, if requested. **/ gchar * e_mapi_util_profile_name (struct mapi_context *mapi_ctx, const EMapiProfileData *empd, gboolean migrate) { gchar *res; res = g_strdup_printf ("%s@%s@%s", empd->username, empd->domain, empd->server); res = g_strcanon (res, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@.-", '_'); if (migrate) { /* expects MAPIInitialize already called! */ gchar *old_name; g_return_val_if_fail (mapi_ctx != NULL, res); old_name = g_strdup_printf ("%s@%s", empd->username, empd->domain); old_name = g_strcanon (old_name, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@", '_'); e_mapi_rename_profile (mapi_ctx, old_name, res, NULL); g_free (old_name); } return res; }
GstFrei0rPluginRegisterReturn gst_frei0r_mixer_register (GstPlugin * plugin, const gchar * vendor, const f0r_plugin_info_t * info, const GstFrei0rFuncTable * ftable) { GTypeInfo typeinfo = { sizeof (GstFrei0rMixerClass), NULL, NULL, (GClassInitFunc) gst_frei0r_mixer_class_init, NULL, NULL, sizeof (GstFrei0rMixer), 0, (GInstanceInitFunc) gst_frei0r_mixer_init }; GType type; gchar *type_name, *tmp; GstFrei0rMixerClassData *class_data; GstFrei0rPluginRegisterReturn ret = GST_FREI0R_PLUGIN_REGISTER_RETURN_FAILED; if (ftable->update2 == NULL) return GST_FREI0R_PLUGIN_REGISTER_RETURN_FAILED; if (vendor) tmp = g_strdup_printf ("frei0r-mixer-%s-%s", vendor, info->name); else tmp = g_strdup_printf ("frei0r-mixer-%s", info->name); type_name = g_ascii_strdown (tmp, -1); g_free (tmp); g_strcanon (type_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-'); if (g_type_from_name (type_name)) { GST_DEBUG ("Type '%s' already exists", type_name); return GST_FREI0R_PLUGIN_REGISTER_RETURN_ALREADY_REGISTERED; } class_data = g_new0 (GstFrei0rMixerClassData, 1); memcpy (&class_data->info, info, sizeof (f0r_plugin_info_t)); memcpy (&class_data->ftable, ftable, sizeof (GstFrei0rFuncTable)); typeinfo.class_data = class_data; type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); if (gst_element_register (plugin, type_name, GST_RANK_NONE, type)) ret = GST_FREI0R_PLUGIN_REGISTER_RETURN_OK; g_free (type_name); return ret; }
static void ladspa_describe_plugin (const char *pcFullFilename, void *pvPluginHandle, LADSPA_Descriptor_Function pfDescriptorFunction) { const LADSPA_Descriptor *desc; gint i; /* walk through all the plugins in this pluginlibrary */ i = 0; while ((desc = pfDescriptorFunction (i++))) { gchar *type_name; GTypeInfo typeinfo = { sizeof (GstLADSPAClass), (GBaseInitFunc) gst_ladspa_base_init, NULL, (GClassInitFunc) gst_ladspa_class_init, NULL, desc, sizeof (GstLADSPA), 0, (GInstanceInitFunc) gst_ladspa_init, }; GType type; /* construct the type */ type_name = g_strdup_printf ("ladspa-%s", desc->Label); g_strcanon (type_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-'); /* if it's already registered, drop it */ if (g_type_from_name (type_name)) goto next; /* create the type now */ type = g_type_register_static (GST_TYPE_SIGNAL_PROCESSOR, type_name, &typeinfo, 0); /* FIXME: not needed anymore when we can add pad templates, etc in class_init * as class_data contains the LADSPA_Descriptor too */ g_type_set_qdata (type, GST_LADSPA_DESCRIPTOR_QDATA, (gpointer) desc); if (!gst_element_register (ladspa_plugin, type_name, GST_RANK_NONE, type)) goto next; next: g_free (type_name); } }
/* search the plugin path */ static gboolean lv2_plugin_discover (void) { unsigned i; SLV2Plugins plugins = slv2_world_get_all_plugins (world); for (i = 0; i < slv2_plugins_size (plugins); ++i) { SLV2Plugin lv2plugin = slv2_plugins_get_at (plugins, i); GTypeInfo typeinfo = { sizeof (GstLV2Class), (GBaseInitFunc) gst_lv2_base_init, NULL, (GClassInitFunc) gst_lv2_class_init, NULL, lv2plugin, sizeof (GstLV2), 0, (GInstanceInitFunc) gst_lv2_init, }; GType type; /* construct the type name from plugin URI */ gchar *type_name = g_strdup_printf ("%s", slv2_value_as_uri (slv2_plugin_get_uri (lv2plugin))); g_strcanon (type_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-'); /* if it's already registered, drop it */ if (g_type_from_name (type_name)) goto next; /* create the type */ type = g_type_register_static (GST_TYPE_SIGNAL_PROCESSOR, type_name, &typeinfo, 0); /* FIXME: not needed anymore when we can add pad templates, etc in class_init * as class_data contains the LADSPA_Descriptor too */ g_type_set_qdata (type, GST_SLV2_PLUGIN_QDATA, (gpointer) lv2plugin); if (!gst_element_register (gst_lv2_plugin, type_name, GST_RANK_NONE, type)) goto next; next: g_free (type_name); } return TRUE; }
static void open_in_browser (GtkWidget *button, gchar *title) { gchar *valid_chars = "abcdefghijklmnopqrstuvwxyz" \ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "0123456789_()[],"; gchar *q = g_strdup (title); gchar *url = g_strdup_printf ("http://wikipedia.org/wiki/Special:Search/?search=%s", g_strcanon (q, valid_chars, '+')); g_free (q); launch_browser (url); g_free (url); }
gboolean file_utils_filename_is_uri (const gchar *filename, GError **error) { g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); if (strstr (filename, "://")) { gchar *scheme; gchar *canon; scheme = g_strndup (filename, (strstr (filename, "://") - filename)); canon = g_strdup (scheme); g_strcanon (canon, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "+-.", '-'); if (strcmp (scheme, canon) || ! g_ascii_isgraph (canon[0])) { g_set_error (error, G_FILE_ERROR, 0, _("'%s:' is not a valid URI scheme"), scheme); g_free (scheme); g_free (canon); return FALSE; } g_free (scheme); g_free (canon); if (! g_utf8_validate (filename, -1, NULL)) { g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE, _("Invalid character sequence in URI")); return FALSE; } return TRUE; } return FALSE; }
gboolean gst_frei0r_mixer_register (GstPlugin * plugin, const f0r_plugin_info_t * info, const GstFrei0rFuncTable * ftable) { GTypeInfo typeinfo = { sizeof (GstFrei0rMixerClass), NULL, NULL, (GClassInitFunc) gst_frei0r_mixer_class_init, NULL, NULL, sizeof (GstFrei0rMixer), 0, (GInstanceInitFunc) gst_frei0r_mixer_init }; GType type; gchar *type_name, *tmp; GstFrei0rMixerClassData *class_data; gboolean ret = FALSE; if (ftable->update2 == NULL) return FALSE; tmp = g_strdup_printf ("frei0r-mixer-%s", info->name); type_name = g_ascii_strdown (tmp, -1); g_free (tmp); g_strcanon (type_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-'); if (g_type_from_name (type_name)) { GST_WARNING ("Type '%s' already exists", type_name); return FALSE; } class_data = g_new0 (GstFrei0rMixerClassData, 1); memcpy (&class_data->info, info, sizeof (f0r_plugin_info_t)); memcpy (&class_data->ftable, ftable, sizeof (GstFrei0rFuncTable)); typeinfo.class_data = class_data; type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); ret = gst_element_register (plugin, type_name, GST_RANK_NONE, type); g_free (type_name); return ret; }
/** * Function to answer to get requests in a json way. This mode should be * prefered. * @param server_struct is the main structure for the server. * @param connection is the connection in MHD * @param url is the requested url * @note to translators all json requests MUST NOT be translated because * it is the protocol itself ! * @returns a newlly allocated gchar * string that contains the anwser to be * sent back to the client. */ static gchar *get_json_answer(server_struct_t *server_struct, struct MHD_Connection *connection, const char *url) { gchar *answer = NULL; gchar *hash = NULL; size_t hlen = 0; if (g_strcmp0(url, "/Version.json") == 0) { answer = convert_version_to_json(PROGRAM_NAME, SERVER_DATE, SERVER_VERSION, SERVER_AUTHORS, SERVER_LICENSE); } else if (g_str_has_prefix(url, "/File/List.json")) { answer = get_a_list_of_files(server_struct, connection); } else if (g_str_has_prefix(url, "/Data/Hash_Array.json")) { answer = get_data_from_a_list_of_hashs(server_struct, connection); } else if (g_str_has_prefix(url, "/Data/")) { hash = g_strndup((const gchar *) url + 6, HASH_LEN*2); /* HASH_LEN is expressed when hash is in binary form */ hash = g_strcanon(hash, "abcdef0123456789", '\0'); /* replace anything not in hexadecimal format with \0 */ hlen = strlen(hash); if (hlen == HASH_LEN*2) { print_debug(_("Trying to get data for hash %s\n"), hash); answer = get_data_from_a_specific_hash(server_struct, hash); } else { answer = g_strdup_printf("{\"Invalid url: in %s hash has length\": %zd instead of %d}", url, hlen, HASH_LEN*2); } free_variable(hash); } else { /* Some sort of echo to the invalid request */ answer = g_strdup_printf("{\"Invalid url\": %s}", url); } return answer; }
static gchar * gst_ladspa_class_get_param_name (GstLADSPAClass * klass, gint portnum) { LADSPA_Descriptor *desc; gchar *ret, *paren; desc = klass->descriptor; ret = g_strdup (desc->PortNames[portnum]); paren = g_strrstr (ret, " ("); if (paren != NULL) *paren = '\0'; /* this is the same thing that param_spec_* will do */ g_strcanon (ret, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-", '-'); /* satisfy glib2 (argname[0] must be [A-Za-z]) */ if (!((ret[0] >= 'a' && ret[0] <= 'z') || (ret[0] >= 'A' && ret[0] <= 'Z'))) { gchar *tempstr = ret; ret = g_strconcat ("param-", ret, NULL); g_free (tempstr); } /* check for duplicate property names */ if (g_object_class_find_property (G_OBJECT_CLASS (klass), ret)) { gint n = 1; gchar *nret = g_strdup_printf ("%s-%d", ret, n++); while (g_object_class_find_property (G_OBJECT_CLASS (klass), nret)) { g_free (nret); nret = g_strdup_printf ("%s-%d", ret, n++); } g_free (ret); ret = nret; } GST_DEBUG ("built property name '%s' from port name '%s'", ret, desc->PortNames[portnum]); return ret; }
GType gst_sf_major_types_get_type (void) { static GType sf_major_types_type = 0; static GEnumValue *sf_major_types = NULL; if (!sf_major_types_type) { SF_FORMAT_INFO format_info; int k, count; sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)); sf_major_types = g_new0 (GEnumValue, count + 1); for (k = 0; k < count; k++) { format_info.format = k; sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)); sf_major_types[k].value = format_info.format; sf_major_types[k].value_name = g_strdup (format_info.name); sf_major_types[k].value_nick = g_strdup (format_info.extension); /* Irritatingly enough, there exist major_types with the same extension. Let's just hope that sndfile gives us the list in alphabetical order, as it currently does. */ if (k > 0 && strcmp (sf_major_types[k].value_nick, sf_major_types[k - 1].value_nick) == 0) { g_free ((gchar *) sf_major_types[k].value_nick); sf_major_types[k].value_nick = g_strconcat (sf_major_types[k - 1].value_nick, "-", sf_major_types[k].value_name, NULL); g_strcanon ((gchar *) sf_major_types[k].value_nick, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-", '-'); } } sf_major_types_type = g_enum_register_static ("GstSndfileMajorTypes", sf_major_types); } return sf_major_types_type; }
GMimeStream* mux_message_part_get_mime_stream_file (MuxMessagePart *self, const char *path, gboolean force, GError **err) { GMimeStream *mstream; char *filename; if (path) filename = g_strdup (path); else if (self->file_name) filename = g_strdup (self->file_name); else { char *tmp; if (strlen (self->path) == 1) tmp = g_strdup (""); else tmp = g_strcanon (g_strdup(self->path), "0123456789", '-'); filename = g_strconcat ("part", tmp, ".dat", NULL); g_free (tmp); } if (!force && access (filename, F_OK) == 0) { g_set_error (err, G_IO_ERROR, G_IO_ERROR_EXISTS, "File exists"); g_free (filename); return FALSE; } mstream = g_mime_stream_file_new_for_path (filename, "w"); g_free (filename); if (!mstream) { g_set_error (err, G_IO_ERROR, G_IO_ERROR_FAILED, "Failed to create mime-stream"); return FALSE; } return mstream; }
/* Parse strings like "x1 x2 x2" or "x1, y1; x2, y2; ...; xn, yn" */ static void parse_skin_txt_int_list (int** int_list, int* int_list_len, char* value) { gchar* v = value; *int_list = 0; *int_list_len = 0; g_strcanon (value, "-0123456789", ' '); while (*v) { int n, x, rc; rc = sscanf (v, " %d%n", &x, &n); if (rc != 1) { break; } v += n; (*int_list_len) ++; *int_list = (int*) realloc (*int_list, sizeof(int) * (*int_list_len)); (*int_list)[*int_list_len-1] = x; } }
static gchar * gst_lv2_filter_class_get_param_name (GstLV2FilterClass * klass, const LilvPort * port) { LilvPlugin *lv2plugin = klass->plugin; gchar *ret; ret = g_strdup (lilv_node_as_string (lilv_port_get_symbol (lv2plugin, port))); /* this is the same thing that param_spec_* will do */ g_strcanon (ret, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-", '-'); /* satisfy glib2 (argname[0] must be [A-Za-z]) */ if (!((ret[0] >= 'a' && ret[0] <= 'z') || (ret[0] >= 'A' && ret[0] <= 'Z'))) { gchar *tempstr = ret; ret = g_strconcat ("param-", ret, NULL); g_free (tempstr); } /* check for duplicate property names */ if (g_object_class_find_property (G_OBJECT_CLASS (klass), ret)) { gint n = 1; gchar *nret = g_strdup_printf ("%s-%d", ret, n++); while (g_object_class_find_property (G_OBJECT_CLASS (klass), nret)) { g_free (nret); nret = g_strdup_printf ("%s-%d", ret, n++); } g_free (ret); ret = nret; } GST_DEBUG ("built property name '%s' from port name '%s'", ret, lilv_node_as_string (lilv_port_get_symbol (lv2plugin, port))); return ret; }
static gint add_record(guint16 length, gchar *lastname) { gchar *lastname_corrected; if(length == 0) return 1; lastname_corrected = g_ascii_strup(lastname, length); lastname_corrected = g_strcanon(lastname, VALID, '_'); length = strlen(lastname_corrected); create_dir(length, lastname_corrected); g_snprintf(person, length+11, "captures/%s/", g_ascii_strup(lastname_corrected, length)); get_path(person, person_path); return 0; }
void gst_frei0r_klass_install_properties (GObjectClass * gobject_class, GstFrei0rFuncTable * ftable, GstFrei0rProperty * properties, gint n_properties) { gint i, count = 1; f0r_instance_t *instance = ftable->construct (640, 480); g_assert (instance); for (i = 0; i < n_properties; i++) { f0r_param_info_t *param_info = &properties[i].info; gchar *prop_name; ftable->get_param_info (param_info, i); if (!param_info->name) { GST_ERROR ("Property %d of %s without a valid name", i, g_type_name (G_TYPE_FROM_CLASS (gobject_class))); continue; } prop_name = g_ascii_strdown (param_info->name, -1); g_strcanon (prop_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-'); /* satisfy glib2 (argname[0] must be [A-Za-z]) */ if (!((prop_name[0] >= 'a' && prop_name[0] <= 'z') || (prop_name[0] >= 'A' && prop_name[0] <= 'Z'))) { gchar *tempstr = prop_name; prop_name = g_strconcat ("param-", prop_name, NULL); g_free (tempstr); } properties[i].prop_id = count; properties[i].prop_idx = i; ftable->get_param_value (instance, &properties[i].default_value, i); if (param_info->type == F0R_PARAM_STRING) properties[i].default_value.data.s = g_strdup (properties[i].default_value.data.s); switch (param_info->type) { case F0R_PARAM_BOOL: g_object_class_install_property (gobject_class, count++, g_param_spec_boolean (prop_name, param_info->name, param_info->explanation, properties[i].default_value.data.b ? TRUE : FALSE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); properties[i].n_prop_ids = 1; break; case F0R_PARAM_DOUBLE:{ gdouble def = properties[i].default_value.data.d; /* If the default is NAN, +-INF we use 0.0 */ if (!(def >= 0.0 && def <= 1.0)) def = 0.0; g_object_class_install_property (gobject_class, count++, g_param_spec_double (prop_name, param_info->name, param_info->explanation, 0.0, 1.0, def, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); properties[i].n_prop_ids = 1; break; } case F0R_PARAM_STRING: g_object_class_install_property (gobject_class, count++, g_param_spec_string (prop_name, param_info->name, param_info->explanation, properties[i].default_value.data.s, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); properties[i].n_prop_ids = 1; break; case F0R_PARAM_COLOR:{ gchar *prop_name_full; gchar *prop_nick_full; gdouble def; def = properties[i].default_value.data.color.r; /* If the default is out of range we use 0.0 */ if (!(def <= 1.0 && def >= 0.0)) def = 0.0; prop_name_full = g_strconcat (prop_name, "-r", NULL); prop_nick_full = g_strconcat (param_info->name, "-R", NULL); g_object_class_install_property (gobject_class, count++, g_param_spec_float (prop_name_full, prop_nick_full, param_info->explanation, 0.0, 1.0, def, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); g_free (prop_name_full); g_free (prop_nick_full); def = properties[i].default_value.data.color.g; /* If the default is out of range we use 0.0 */ if (!(def <= 1.0 && def >= 0.0)) def = 0.0; prop_name_full = g_strconcat (prop_name, "-g", NULL); prop_nick_full = g_strconcat (param_info->name, "-G", NULL); g_object_class_install_property (gobject_class, count++, g_param_spec_float (prop_name_full, param_info->name, param_info->explanation, 0.0, 1.0, def, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); g_free (prop_name_full); g_free (prop_nick_full); def = properties[i].default_value.data.color.b; /* If the default is out of range we use 0.0 */ if (!(def <= 1.0 && def >= 0.0)) def = 0.0; prop_name_full = g_strconcat (prop_name, "-b", NULL); prop_nick_full = g_strconcat (param_info->name, "-B", NULL); g_object_class_install_property (gobject_class, count++, g_param_spec_float (prop_name_full, param_info->name, param_info->explanation, 0.0, 1.0, def, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); g_free (prop_name_full); g_free (prop_nick_full); properties[i].n_prop_ids = 3; break; } case F0R_PARAM_POSITION:{ gchar *prop_name_full; gchar *prop_nick_full; gdouble def; def = properties[i].default_value.data.position.x; /* If the default is out of range we use 0.0 */ if (!(def <= 1.0 && def >= 0.0)) def = 0.0; prop_name_full = g_strconcat (prop_name, "-x", NULL); prop_nick_full = g_strconcat (param_info->name, "-X", NULL); g_object_class_install_property (gobject_class, count++, g_param_spec_double (prop_name_full, param_info->name, param_info->explanation, 0.0, 1.0, def, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); g_free (prop_name_full); g_free (prop_nick_full); def = properties[i].default_value.data.position.y; /* If the default is out of range we use 0.0 */ if (!(def <= 1.0 && def >= 0.0)) def = 0.0; prop_name_full = g_strconcat (prop_name, "-Y", NULL); prop_nick_full = g_strconcat (param_info->name, "-X", NULL); g_object_class_install_property (gobject_class, count++, g_param_spec_double (prop_name_full, param_info->name, param_info->explanation, 0.0, 1.0, def, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE)); g_free (prop_name_full); g_free (prop_nick_full); properties[i].n_prop_ids = 2; break; } default: g_assert_not_reached (); break; } g_free (prop_name); } ftable->destruct (instance); }
static gchar * debug_dump_make_object_name (GstObject * obj) { return g_strcanon (g_strdup_printf ("%s_%p", GST_OBJECT_NAME (obj), obj), G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "_", '_'); }
static void gst_ladspa_base_init (gpointer g_class) { GstLADSPAClass *klass = (GstLADSPAClass *) g_class; GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); GstSignalProcessorClass *gsp_class = GST_SIGNAL_PROCESSOR_CLASS (g_class); LADSPA_Descriptor *desc; guint j, audio_in_count, audio_out_count, control_in_count, control_out_count; const gchar *klass_tags; gchar *longname, *author; #ifdef HAVE_LRDF gchar *uri; #endif gchar *extra_klass_tags = NULL; GST_DEBUG ("base_init %p", g_class); desc = (LADSPA_Descriptor *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass), descriptor_quark); g_assert (desc); klass->descriptor = desc; /* pad templates */ gsp_class->num_audio_in = 0; gsp_class->num_audio_out = 0; /* properties */ gsp_class->num_control_in = 0; gsp_class->num_control_out = 0; for (j = 0; j < desc->PortCount; j++) { LADSPA_PortDescriptor p = desc->PortDescriptors[j]; if (LADSPA_IS_PORT_AUDIO (p)) { gchar *name = g_strdup ((gchar *) desc->PortNames[j]); /* FIXME: group stereo pairs into a stereo pad * ladspa-fx have "XXX (Left)" and "XXX (Right)" * where XXX={In,Input,Out,Output} */ GST_DEBUG ("LADSPA port name: \"%s\"", name); /* replaces all spaces with underscores, and then remaining special chars * with '-' * FIXME: why, pads can have any name */ g_strdelimit (name, " ", '_'); g_strcanon (name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "_-><=", '-'); GST_DEBUG ("GStreamer pad name: \"%s\"", name); if (LADSPA_IS_PORT_INPUT (p)) gst_signal_processor_class_add_pad_template (gsp_class, name, GST_PAD_SINK, gsp_class->num_audio_in++, 1); else gst_signal_processor_class_add_pad_template (gsp_class, name, GST_PAD_SRC, gsp_class->num_audio_out++, 1); g_free (name); } else if (LADSPA_IS_PORT_CONTROL (p)) { if (LADSPA_IS_PORT_INPUT (p)) gsp_class->num_control_in++; else gsp_class->num_control_out++; } } longname = g_locale_to_utf8 (desc->Name, -1, NULL, NULL, NULL); if (!longname) longname = g_strdup ("no description available"); author = g_locale_to_utf8 (desc->Maker, -1, NULL, NULL, NULL); if (!author) author = g_strdup ("no author available"); #ifdef HAVE_LRDF /* libldrf support, we want to get extra class information here */ uri = g_strdup_printf (LADSPA_BASE "%ld", desc->UniqueID); if (uri) { lrdf_statement query = { 0, }; lrdf_uris *uris; gchar *str, *base_type = NULL; GST_DEBUG ("uri (id=%d) : %s", desc->UniqueID, uri); /* we can take this directly from 'desc', keep this example for future attributes. if ((str = lrdf_get_setting_metadata (uri, "title"))) { GST_DEBUG ("title : %s", str); } if ((str = lrdf_get_setting_metadata (uri, "creator"))) { GST_DEBUG ("creator : %s", str); } */ /* get the rdf:type for this plugin */ query.subject = uri; query.predicate = (char *) RDF_BASE "type"; query.object = (char *) "?"; query.next = NULL; uris = lrdf_match_multi (&query); if (uris) { if (uris->count == 1) { base_type = g_strdup (uris->items[0]); GST_DEBUG ("base_type : %s", base_type); } lrdf_free_uris (uris); } /* query taxonomy */ if (base_type) { uris = lrdf_get_all_superclasses (base_type); if (uris) { guint32 j; for (j = 0; j < uris->count; j++) { GST_LOG ("parent_type_uri : %s", uris->items[j]); if ((str = lrdf_get_label (uris->items[j]))) { GST_DEBUG ("parent_type_label : %s", str); if (extra_klass_tags) { gchar *old_tags = extra_klass_tags; extra_klass_tags = g_strconcat (extra_klass_tags, "/", str, NULL); g_free (old_tags); } else { extra_klass_tags = g_strconcat ("/", str, NULL); } } } lrdf_free_uris (uris); } g_free (base_type); } /* we can use this for the presets uris = lrdf_get_setting_uris (desc->UniqueID); if (uris) { guint32 j; for (j = 0; j < uris->count; j++) { GST_INFO ("setting_uri : %s", uris->items[j]); if ((str = lrdf_get_label (uris->items[j]))) { GST_INFO ("setting_label : %s", str); } } lrdf_free_uris (uris); } */ } g_free (uri); #endif if (gsp_class->num_audio_in == 0) klass_tags = "Source/Audio/LADSPA"; else if (gsp_class->num_audio_out == 0) { if (gsp_class->num_control_out == 0) klass_tags = "Sink/Audio/LADSPA"; else klass_tags = "Sink/Analyzer/Audio/LADSPA"; } else klass_tags = "Filter/Effect/Audio/LADSPA"; #ifdef HAVE_LRDF if (extra_klass_tags) { char *s = g_strconcat (klass_tags, extra_klass_tags, NULL); g_free (extra_klass_tags); extra_klass_tags = s; } #endif GST_INFO ("tags : %s", klass_tags); gst_element_class_set_metadata (element_class, longname, extra_klass_tags ? extra_klass_tags : klass_tags, longname, author); g_free (longname); g_free (author); g_free (extra_klass_tags); klass->audio_in_portnums = g_new0 (gint, gsp_class->num_audio_in); klass->audio_out_portnums = g_new0 (gint, gsp_class->num_audio_out); klass->control_in_portnums = g_new0 (gint, gsp_class->num_control_in); klass->control_out_portnums = g_new0 (gint, gsp_class->num_control_out); audio_in_count = audio_out_count = control_in_count = control_out_count = 0; for (j = 0; j < desc->PortCount; j++) { LADSPA_PortDescriptor p = desc->PortDescriptors[j]; if (LADSPA_IS_PORT_AUDIO (p)) { if (LADSPA_IS_PORT_INPUT (p)) klass->audio_in_portnums[audio_in_count++] = j; else klass->audio_out_portnums[audio_out_count++] = j; } else if (LADSPA_IS_PORT_CONTROL (p)) { if (LADSPA_IS_PORT_INPUT (p)) klass->control_in_portnums[control_in_count++] = j; else klass->control_out_portnums[control_out_count++] = j; } } g_assert (audio_in_count == gsp_class->num_audio_in); g_assert (audio_out_count == gsp_class->num_audio_out); g_assert (control_in_count == gsp_class->num_control_in); g_assert (control_out_count == gsp_class->num_control_out); if (!LADSPA_IS_INPLACE_BROKEN (desc->Properties)) GST_SIGNAL_PROCESSOR_CLASS_SET_CAN_PROCESS_IN_PLACE (klass); klass->descriptor = desc; }