END_TEST START_TEST(test_filename_get_extension) { filename_t file; char *ext; ext = filename_get_extension(NULL); ck_assert_msg(ext == NULL, "A NULL filename_t has no extension."); file.name = NULL; ext = filename_get_extension(&file); ck_assert_msg(ext == NULL, "A filename_t with NULL name has no extension."); file = filename_create("frog.1txt"); ext = filename_get_extension(&file); ck_assert_msg(ext == NULL, "Invalid extension will return NULL extension."); filename_free(&file); file = filename_create("frog.txt"); ext = filename_get_extension(&file); ck_assert_str_eq(".txt", ext); ck_assert_int_eq(4, strlen(ext)); free(ext); filename_free(&file); }
/* =========== Map_SaveFile \todo FIXME remove the use_region, this is broken .. work with a global flag to set region mode or not =========== */ void Map_SaveFile( const char *filename, qboolean use_region ){ clock_t start, finish; double elapsed_time; start = clock(); Sys_Printf( "Saving map to %s\n",filename ); Pointfile_Clear(); if ( !use_region ) { char backup[1024]; // rename current to .bak strcpy( backup, filename ); StripExtension( backup ); strcat( backup, ".bak" ); unlink( backup ); rename( filename, backup ); } Sys_Printf( "Map_SaveFile: %s\n", filename ); // build the out data stream FileStream file; if ( !file.Open( filename,"w" ) ) { Sys_FPrintf( SYS_ERR, "ERROR: couldn't open %s for write\n", filename ); return; } // extract filetype Map_Export( &file, filename_get_extension( filename ), use_region ); file.Close(); finish = clock(); elapsed_time = (double)( finish - start ) / CLOCKS_PER_SEC; Sys_Printf( "Saved in %-.2f second(s).\n",elapsed_time ); modified = false; if ( !strstr( filename, "autosave" ) ) { Sys_SetTitle( filename ); } if ( !use_region ) { time_t timer; time( &timer ); Sys_Beep(); Sys_Status( "Saved.", 0 ); } }
/** * Process a file, checking if it should be listed and retrieving its data in * XML format. */ xmlNodePtr file_proc(const gchar *real_path, const gchar *file_name) { gchar *file_name_utf8; const gchar *file_extension; FileParser *parser; xmlNodePtr file_node = NULL; /* get UTF-8 encoded filename and extension */ file_name_utf8 = g_filename_to_utf8(file_name, -1, NULL, NULL, NULL); file_extension = filename_get_extension(file_name_utf8); /* check if we support this file */ if (file_extension == NULL || file_extension[0] == '\0') { /* extension-less file, we just ignore */ } else if ((parser = file_parser_get_by_extension(file_extension)) != NULL) { /* we have a parser for this file -- good -- go ahead */ FILE *fp; /* create file node */ file_node = xmlNewNode(NULL, "file"); xmlNewProp(file_node, "name", file_name_utf8); if ((fp = fopen(real_path, "rb")) != NULL) { glong file_size; gchar size_string[64]; /* retrieve file size */ /* @TODO support 64-bit file sizes */ fseek(fp, 0, SEEK_END); file_size = ftell(fp); g_snprintf(size_string, sizeof size_string, "%ld", file_size); xmlNewProp(file_node, "size", size_string); /* parse (or at least try to) the file */ rewind(fp); parser->func(file_node, fp); } else { /* fopen() returned NULL */ xmlNodePtr comment = xmlNewComment("error opening file"); xmlAddChild(file_node, comment); g_warning("%s: %s", real_path, g_strerror(errno)); } } g_free(file_name_utf8); /* free UTF-8 converted filename */ return file_node; }