From: <mar...@us...> - 2012-11-06 15:48:07
|
Revision: 5260 http://navit.svn.sourceforge.net/navit/?rev=5260&view=rev Author: martin-s Date: 2012-11-06 15:47:56 +0000 (Tue, 06 Nov 2012) Log Message: ----------- Fix:Core:Add file_sync function, truncate files if create flag is set, avoid crashing file_get_content on seek errors Modified Paths: -------------- trunk/navit/navit/file.c trunk/navit/navit/file.h Modified: trunk/navit/navit/file.c =================================================================== --- trunk/navit/navit/file.c 2012-11-05 20:14:38 UTC (rev 5259) +++ trunk/navit/navit/file.c 2012-11-06 15:47:56 UTC (rev 5260) @@ -232,7 +232,7 @@ if (options && (attr=attr_search(options, NULL, attr_readwrite)) && attr->u.num) { open_flags |= O_RDWR; if ((attr=attr_search(options, NULL, attr_create)) && attr->u.num) - open_flags |= O_CREAT; + open_flags |= O_CREAT|O_TRUNC; } else open_flags |= O_RDONLY; file->name = g_strdup(name); @@ -243,6 +243,8 @@ } dbg(1,"fd=%d\n", file->fd); file->size=lseek(file->fd, 0, SEEK_END); + if (file->size < 0) + file->size=0; dbg(1,"size="LONGLONG_FMT"\n", file->size); file->name_id = (long)atom(name); } @@ -805,6 +807,14 @@ } void +file_fsync(struct file *f) +{ +#ifdef HAVE_FSYNC + fsync(f->fd); +#endif +} + +void file_destroy(struct file *f) { if (f->headers) Modified: trunk/navit/navit/file.h =================================================================== --- trunk/navit/navit/file.h 2012-11-05 20:14:38 UTC (rev 5259) +++ trunk/navit/navit/file.h 2012-11-06 15:47:56 UTC (rev 5260) @@ -85,6 +85,7 @@ char *file_readdir(void *hnd); void file_closedir(void *hnd); struct file *file_create_caseinsensitive(char *name, struct attr **options); +void file_fsync(struct file *f); void file_destroy(struct file *f); struct file_wordexp *file_wordexp_new(const char *pattern); int file_wordexp_get_count(struct file_wordexp *wexp); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |