Fix little bug, close() must mark a file as closed!

This commit is contained in:
Vreixo Formoso 2007-11-26 21:46:26 +01:00
parent db533b2d99
commit 100919a5cb
4 changed files with 23 additions and 10 deletions

View File

@ -151,6 +151,7 @@ int lfs_open(IsoFileSource *src)
static static
int lfs_close(IsoFileSource *src) int lfs_close(IsoFileSource *src)
{ {
int ret;
_LocalFsFileSource *data; _LocalFsFileSource *data;
if (src == NULL) { if (src == NULL) {
@ -160,12 +161,19 @@ int lfs_close(IsoFileSource *src)
data = src->data; data = src->data;
switch(data->openned) { switch(data->openned) {
case 1: /* not dir */ case 1: /* not dir */
return close(data->info.fd) == 0 ? ISO_SUCCESS : ISO_FILE_ERROR; ret = close(data->info.fd) == 0 ? ISO_SUCCESS : ISO_FILE_ERROR;
break;
case 2: /* directory */ case 2: /* directory */
return closedir(data->info.dir) == 0 ? ISO_SUCCESS : ISO_FILE_ERROR; ret = closedir(data->info.dir) == 0 ? ISO_SUCCESS : ISO_FILE_ERROR;
break;
default: default:
return ISO_FILE_NOT_OPENNED; ret = ISO_FILE_NOT_OPENNED;
break;
} }
if (ret == ISO_SUCCESS) {
data->openned = 0;
}
return ret;
} }
static static

View File

@ -29,16 +29,17 @@ struct Iso_Stream
/** /**
* Close the Stream. * Close the Stream.
* @return 1 on success, < 0 on error
*/ */
void (*close)(IsoStream *stream); int (*close)(IsoStream *stream);
// Stream should read in 2k blocks! // Stream should read in 2k blocks!
//... //...
int refcount; int refcount;
void *data;
} }
#endif /*STREAM_H_*/ #endif /*STREAM_H_*/

View File

@ -67,6 +67,8 @@ int main(int argc, char **argv)
} }
file->close(file); file->close(file);
} }
iso_file_source_unref(file);
iso_filesystem_unref(fs);
return 0; return 0;
} }

View File

@ -111,6 +111,7 @@ int main(int argc, char **argv)
while (dir->readdir(dir, &file) == 1) { while (dir->readdir(dir, &file) == 1) {
print_file_src(file); print_file_src(file);
iso_file_source_unref(file);
} }
res = dir->close(dir); res = dir->close(dir);
@ -121,7 +122,8 @@ int main(int argc, char **argv)
} else { } else {
print_file_src(dir); print_file_src(dir);
} }
iso_file_source_unref(dir);
iso_filesystem_unref(fs);
return 0; return 0;
} }