Add a function to identify a Stream, for user notification.
This commit is contained in:
parent
5b856cf40b
commit
c915c6e3f4
@ -237,9 +237,10 @@ int filesrc_writer_write_data(IsoImageWriter *writer)
|
|||||||
* UPS, very ugly error, the best we can do is just to write
|
* UPS, very ugly error, the best we can do is just to write
|
||||||
* 0's to image
|
* 0's to image
|
||||||
*/
|
*/
|
||||||
// TODO Stream needs a get_path function
|
char *name = iso_stream_get_name(file->stream);
|
||||||
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE,
|
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE, "File \"%s\" can't"
|
||||||
"File XXX can't be openned. Filling with 0s.");
|
" be opened. Filling with 0s.", name);
|
||||||
|
free(name);
|
||||||
memset(buffer, 0, BLOCK_SIZE);
|
memset(buffer, 0, BLOCK_SIZE);
|
||||||
for (b = 0; b < nblocks; ++b) {
|
for (b = 0; b < nblocks; ++b) {
|
||||||
res = iso_write(t, buffer, BLOCK_SIZE);
|
res = iso_write(t, buffer, BLOCK_SIZE);
|
||||||
@ -264,15 +265,18 @@ int filesrc_writer_write_data(IsoImageWriter *writer)
|
|||||||
|
|
||||||
if (b < nblocks) {
|
if (b < nblocks) {
|
||||||
/* premature end of file, due to error or eof */
|
/* premature end of file, due to error or eof */
|
||||||
|
char *name = iso_stream_get_name(file->stream);
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
/* error */
|
/* error */
|
||||||
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE,
|
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE,
|
||||||
"Read error in file XXXXX.");
|
"Read error in file %s.", name);
|
||||||
} else {
|
} else {
|
||||||
/* eof */
|
/* eof */
|
||||||
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE,
|
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE,
|
||||||
"Premature end of file XXXXX.");
|
"Premature end of file %s.", name);
|
||||||
}
|
}
|
||||||
|
free(name);
|
||||||
|
|
||||||
/* fill with 0s */
|
/* fill with 0s */
|
||||||
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE, "Filling with 0");
|
iso_msg_sorry(t->image, LIBISO_FILE_CANT_WRITE, "Filling with 0");
|
||||||
memset(buffer, 0, BLOCK_SIZE);
|
memset(buffer, 0, BLOCK_SIZE);
|
||||||
|
10
src/stream.c
10
src/stream.c
@ -12,6 +12,7 @@
|
|||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -112,6 +113,14 @@ int fsrc_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
|
|||||||
return ISO_SUCCESS;
|
return ISO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
char *fsrc_get_name(IsoStream *stream)
|
||||||
|
{
|
||||||
|
FSrcStreamData *data;
|
||||||
|
data = (FSrcStreamData*)stream->data;
|
||||||
|
return strdup(iso_file_source_get_path(data->src));
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
void fsrc_free(IsoStream *stream)
|
void fsrc_free(IsoStream *stream)
|
||||||
{
|
{
|
||||||
@ -128,6 +137,7 @@ IsoStreamIface fsrc_stream_class = {
|
|||||||
fsrc_read,
|
fsrc_read,
|
||||||
fsrc_is_repeatable,
|
fsrc_is_repeatable,
|
||||||
fsrc_get_id,
|
fsrc_get_id,
|
||||||
|
fsrc_get_name,
|
||||||
fsrc_free
|
fsrc_free
|
||||||
};
|
};
|
||||||
|
|
||||||
|
13
src/stream.h
13
src/stream.h
@ -80,6 +80,13 @@ typedef struct IsoStream_Iface
|
|||||||
int (*get_id)(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
|
int (*get_id)(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
|
||||||
ino_t *ino_id);
|
ino_t *ino_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a name that identifies the Stream contents. It is used only for
|
||||||
|
* informational or debug purposes, so you can return anything you
|
||||||
|
* consider suitable for identification of the source, such as the path.
|
||||||
|
*/
|
||||||
|
char *(*get_name)(IsoStream *stream);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free implementation specific data. Should never be called by user.
|
* Free implementation specific data. Should never be called by user.
|
||||||
* Use iso_stream_unref() instead.
|
* Use iso_stream_unref() instead.
|
||||||
@ -134,6 +141,12 @@ int iso_stream_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
|
|||||||
return stream->class->get_id(stream, fs_id, dev_id, ino_id);
|
return stream->class->get_id(stream, fs_id, dev_id, ino_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern inline
|
||||||
|
char *iso_stream_get_name(IsoStream *stream)
|
||||||
|
{
|
||||||
|
return stream->class->get_name(stream);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a stream to read from a IsoFileSource.
|
* Create a stream to read from a IsoFileSource.
|
||||||
* The stream will take the ref. to the IsoFileSource, so after a successfully
|
* The stream will take the ref. to the IsoFileSource, so after a successfully
|
||||||
|
Loading…
Reference in New Issue
Block a user