X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ffs%2Ffs_file_information.c;h=806592784bfc4ae9e06280cdfac828417669f09a;hb=0238d7e2f30821e7b94e9ea25ce3918fcc04b2c3;hp=01ce6f54bc860f35d207d6a36aa6b673b5b492f4;hpb=4b9e92b8f0c33dd655abff1cda89b33aaf90ef16;p=oweals%2Fgnunet.git diff --git a/src/fs/fs_file_information.c b/src/fs/fs_file_information.c index 01ce6f54b..806592784 100644 --- a/src/fs/fs_file_information.c +++ b/src/fs/fs_file_information.c @@ -22,10 +22,6 @@ * @file fs/fs_file_information.c * @brief Manage information for publishing directory hierarchies * @author Christian Grothoff - * - * TODO: - * - metadata filename clean up code - * - metadata/ksk generation for directories from contained files */ #include "platform.h" #include @@ -34,61 +30,6 @@ #include "fs_tree.h" -/** - * Add meta data that libextractor finds to our meta data - * container. - * - * @param cls closure, our meta data container - * @param plugin_name name of the plugin that produced this value; - * special values can be used (i.e. '<zlib>' for zlib being - * used in the main libextractor library and yielding - * meta data). - * @param type libextractor-type describing the meta data - * @param format basic format information about data - * @param data_mime_type mime-type of data (not of the original file); - * can be NULL (if mime-type is not known) - * @param data actual meta-data found - * @param data_len number of bytes in data - * @return always 0 to continue extracting - */ -static int -add_to_md (void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type, - enum EXTRACTOR_MetaFormat format, const char *data_mime_type, - const char *data, size_t data_len) -{ - struct GNUNET_CONTAINER_MetaData *md = cls; - - (void) GNUNET_CONTAINER_meta_data_insert (md, plugin_name, type, format, - data_mime_type, data, data_len); - return 0; -} - - -/** - * Extract meta-data from a file. - * - * @return GNUNET_SYSERR on error, otherwise the number - * of meta-data items obtained - */ -int -GNUNET_FS_meta_data_extract_from_file (struct GNUNET_CONTAINER_MetaData *md, - const char *filename, - struct EXTRACTOR_PluginList *extractors) -{ - int old; - - if (filename == NULL) - return GNUNET_SYSERR; - if (extractors == NULL) - return 0; - old = GNUNET_CONTAINER_meta_data_iterate (md, NULL, NULL); - GNUNET_assert (old >= 0); - EXTRACTOR_extract (extractors, filename, NULL, 0, &add_to_md, md); - return (GNUNET_CONTAINER_meta_data_iterate (md, NULL, NULL) - old); -} - - - /** * Obtain the name under which this file information * structure is stored on disk. Only works for top-level @@ -166,7 +107,7 @@ GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h, *bo) { struct FileInfo *fi; - struct stat sbuf; + uint64_t fsize; struct GNUNET_FS_FileInformation *ret; const char *fn; const char *ss; @@ -175,7 +116,8 @@ GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h, char fn_conv[MAX_PATH]; #endif - if (0 != STAT (filename, &sbuf)) + /* FIXME: should includeSymLinks be GNUNET_NO or GNUNET_YES here? */ + if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fsize, GNUNET_NO, GNUNET_YES)) { GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "stat", filename); return NULL; @@ -188,7 +130,7 @@ GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h, } ret = GNUNET_FS_file_information_create_from_reader (h, client_info, - sbuf.st_size, + fsize, &GNUNET_FS_data_reader_file_, fi, keywords, meta, do_index, bo); @@ -204,6 +146,9 @@ GNUNET_FS_file_information_create_from_file (struct GNUNET_FS_Handle *h, #endif while (NULL != (ss = strstr (fn, DIR_SEPARATOR_STR))) fn = ss + 1; +/* FIXME: If we assume that on other platforms CRT is UTF-8-aware, then + * this should be changed to EXTRACTOR_METAFORMAT_UTF8 + */ #if !WINDOWS GNUNET_CONTAINER_meta_data_insert (ret->meta, "", EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME, @@ -383,7 +328,7 @@ int GNUNET_FS_file_information_add (struct GNUNET_FS_FileInformation *dir, struct GNUNET_FS_FileInformation *ent) { - if ((ent->dir != NULL) || (ent->next != NULL) || (!dir->is_directory)) + if ((ent->dir != NULL) || (ent->next != NULL) || (dir->is_directory != GNUNET_YES)) { GNUNET_break (0); return GNUNET_SYSERR; @@ -421,12 +366,12 @@ GNUNET_FS_file_information_inspect (struct GNUNET_FS_FileInformation *dir, no = GNUNET_NO; if (GNUNET_OK != proc (proc_cls, dir, - (dir->is_directory) ? dir->data.dir.dir_size : dir->data. + (dir->is_directory == GNUNET_YES) ? dir->data.dir.dir_size : dir->data. file.file_size, dir->meta, &dir->keywords, &dir->bo, - (dir->is_directory) ? &no : &dir->data.file.do_index, + (dir->is_directory == GNUNET_YES) ? &no : &dir->data.file.do_index, &dir->client_info)) return; - if (!dir->is_directory) + if (dir->is_directory != GNUNET_YES) return; pos = dir->data.dir.entries; while (pos != NULL) @@ -434,9 +379,9 @@ GNUNET_FS_file_information_inspect (struct GNUNET_FS_FileInformation *dir, no = GNUNET_NO; if (GNUNET_OK != proc (proc_cls, pos, - (pos->is_directory) ? pos->data.dir.dir_size : pos->data. + (pos->is_directory == GNUNET_YES) ? pos->data.dir.dir_size : pos->data. file.file_size, pos->meta, &pos->keywords, &pos->bo, - (pos->is_directory) ? &no : &pos->data.file.do_index, + (pos->is_directory == GNUNET_YES) ? &no : &pos->data.file.do_index, &pos->client_info)) break; pos = pos->next; @@ -463,7 +408,7 @@ GNUNET_FS_file_information_destroy (struct GNUNET_FS_FileInformation *fi, int no; no = GNUNET_NO; - if (fi->is_directory) + if (fi->is_directory == GNUNET_YES) { /* clean up directory */ while (NULL != (pos = fi->data.dir.entries))