示例#1
0
/* Return a list of all extensions that are used by all file types,
   including compressed extensions, e.g. not just "pcap" but also
   "pcap.gz" if we can read gzipped files.

   All strings in the list are allocated with g_malloc() and must be freed
   with g_free(). */
GSList *ftap_get_all_file_extensions_list(void)
{
	GSList *compressed_file_extensions;
	GSList *extensions;
	unsigned int i;

	init_file_type_extensions();

	extensions = NULL;	/* empty list, to start with */

	/*
	 * Get the list of compressed-file extensions.
	 */
	compressed_file_extensions = ftap_get_compressed_file_extensions();

	for (i = 0; i < file_type_extensions_arr->len; i++) {
		/*
		 * Add all this file extension type's extensions, with
		 * compressed variants.
		 */
		extensions = add_extensions_for_file_extensions_type(i,
		    extensions, compressed_file_extensions);
	}

	g_slist_free(compressed_file_extensions);
	return extensions;
}
示例#2
0
/* Return a list of file extensions that are used by the specified file type.

   If include_compressed is TRUE, the list will include compressed
   extensions, e.g. not just "pcap" but also "pcap.gz" if we can read
   gzipped files.

   All strings in the list are allocated with g_malloc() and must be freed
   with g_free(). */
GSList *ftap_get_file_extensions_list(int file_type_subtype, gboolean include_compressed)
{
	GSList *compressed_file_extensions;
	GSList *extensions;

	if (file_type_subtype < 0 || file_type_subtype >= ftap_num_file_types_subtypes)
		return NULL;	/* not a valid file type */

	if (dump_open_table[file_type_subtype].default_file_extension == NULL)
		return NULL;	/* valid, but no extensions known */

	extensions = NULL;	/* empty list, to start with */

	/*
	 * If include_compressions is true, get the list of compressed-file
	 * extensions.
	 */
	if (include_compressed)
		compressed_file_extensions = ftap_get_compressed_file_extensions();
	else
		compressed_file_extensions = NULL;

	/*
	 * Add all this file type's extensions, with compressed
	 * variants.
	 */
	extensions = add_extensions_for_file_type_subtype(file_type_subtype, extensions,
	    compressed_file_extensions);

	g_slist_free(compressed_file_extensions);
	return extensions;
}
示例#3
0
/* Return a list of file extensions that are used by the specified file
   extension type.

   All strings in the list are allocated with g_malloc() and must be freed
   with g_free(). */
GSList *ftap_get_file_extension_type_extensions(guint extension_type)
{
	GSList *compressed_file_extensions;
	GSList *extensions;

	if (extension_type >= file_type_extensions_arr->len)
		return NULL;	/* not a valid extension type */

	extensions = NULL;	/* empty list, to start with */

	/*
	 * Get the list of compressed-file extensions.
	 */
	compressed_file_extensions = ftap_get_compressed_file_extensions();

	/*
	 * Add all this file extension type's extensions, with compressed
	 * variants.
	 */
	extensions = add_extensions_for_file_extensions_type(extension_type,
	    extensions, compressed_file_extensions);

	g_slist_free(compressed_file_extensions);
	return extensions;
}
示例#4
0
static char *get_file_extension(const char *pathname)
{
	gchar *filename;
	gchar **components;
	size_t ncomponents;
	GSList *compressed_file_extensions, *compressed_file_extension;
	gchar *extensionp;

	/*
	 * Is the pathname empty?
	 */
	if (strcmp(pathname, "") == 0)
		return NULL;	/* no extension */

	/*
	 * Find the last component of the pathname.
	 */
	filename = g_path_get_basename(pathname);

	/*
	 * Does it have an extension?
	 */
	if (strchr(filename, '.') == NULL) {
		g_free(filename);
		return NULL;	/* no extension whatsoever */
	}

	/*
	 * Yes.  Split it into components separated by ".".
	 */
	components = g_strsplit(filename, ".", 0);
	g_free(filename);

	/*
	 * Count the components.
	 */
	for (ncomponents = 0; components[ncomponents] != NULL; ncomponents++)
		;

	if (ncomponents == 0) {
		g_strfreev(components);
		return NULL;	/* no components */
	}
	if (ncomponents == 1) {
		g_strfreev(components);
		return NULL;	/* only one component, with no "." */
	}

	/*
	 * Is the last component one of the extensions used for compressed
	 * files?
	 */
	compressed_file_extensions = ftap_get_compressed_file_extensions();
	if (compressed_file_extensions == NULL) {
		/*
		 * We don't support reading compressed files, so just
		 * return a copy of whatever extension we did find.
		 */
		extensionp = g_strdup(components[ncomponents - 1]);
		g_strfreev(components);
		return extensionp;
	}
	extensionp = components[ncomponents - 1];
	for (compressed_file_extension = compressed_file_extensions;
	    compressed_file_extension != NULL;
	    compressed_file_extension = g_slist_next(compressed_file_extension)) {
		if (strcmp(extensionp, (char *)compressed_file_extension->data) == 0) {
			/*
			 * Yes, it's one of the compressed-file extensions.
			 * Is there an extension before that?
			 */
			if (ncomponents == 2) {
				g_strfreev(components);
				return NULL;	/* no, only two components */
			}

			/*
			 * Yes, return that extension.
			 */
			extensionp = g_strdup(components[ncomponents - 2]);
			g_strfreev(components);
			return extensionp;
		}
	}

	/*
	 * The extension isn't one of the compressed-file extensions;
	 * return it.
	 */
	extensionp = g_strdup(extensionp);
	g_strfreev(components);
	return extensionp;
}