summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2016-12-20 07:10:52 +0100
committerMarcus Meissner <marcus@jet.franken.de>2016-12-20 07:10:52 +0100
commiteae8a13ac25851dbe1e1b2f2f043866a9bfeac64 (patch)
tree26c0e35868d5bce8be62c6747b90bb39878cacd3 /examples
parent14041e1af9814cc081ee10658030a1d86dac9e2a (diff)
downloadlibgphoto2-eae8a13ac25851dbe1e1b2f2f043866a9bfeac64.tar.gz
adjusted code to handled errors and use buffer and file better
fixes https://github.com/gphoto/libgphoto2/issues/118
Diffstat (limited to 'examples')
-rw-r--r--examples/sample-trigger-capture.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/examples/sample-trigger-capture.c b/examples/sample-trigger-capture.c
index 6ed342f03..0c563318a 100644
--- a/examples/sample-trigger-capture.c
+++ b/examples/sample-trigger-capture.c
@@ -25,8 +25,7 @@ static struct queue_entry {
static int nrofqueue=0;
static int nrdownloads=0;
-static char *buffer;
-static int buffersize = 256*1024;
+static const char *buffer;
static int
wait_event_and_download (Camera *camera, int waittime, GPContext *context) {
@@ -71,7 +70,7 @@ wait_event_and_download (Camera *camera, int waittime, GPContext *context) {
break;
}
if (nrofqueue) {
- unsigned long size = buffersize;
+ unsigned long size;
int fd;
struct stat stbuf;
CameraFile *file;
@@ -84,12 +83,18 @@ wait_event_and_download (Camera *camera, int waittime, GPContext *context) {
);
retval = gp_camera_file_get(camera, queue[0].path.folder, queue[0].path.name,
GP_FILE_TYPE_NORMAL, file, context);
+ if (retval != GP_OK) {
+ fprintf (stderr,"gp_camera_file_get failed: %d\n", retval);
+ gp_file_free (file);
+ return retval;
+ }
- gp_file_get_data_and_size (file, &buffer, &size);
+ /* buffer is returned as pointer, not as a copy */
+ retval = gp_file_get_data_and_size (file, &buffer, &size);
- /*fprintf(stderr,"done camera readfile size was %d\n", size);*/
if (retval != GP_OK) {
- fprintf (stderr,"gp_camera_file_read failed: %d\n", retval);
+ fprintf (stderr,"gp_file_get_data_and_size failed: %d\n", retval);
+ gp_file_free (file);
return retval;
}
if (-1 == stat(queue[0].path.name, &stbuf))
@@ -106,6 +111,8 @@ wait_event_and_download (Camera *camera, int waittime, GPContext *context) {
perror("write");
close (fd);
+ gp_file_free (file); /* Note: this invalidates buffer. */
+
fprintf(stderr,"ending download %d, deleting file.\n", nrdownloads);
retval = gp_camera_file_delete(camera, queue[0].path.folder, queue[0].path.name, context);
memmove(&queue[0],&queue[1],sizeof(queue[0])*(nrofqueue-1));
@@ -121,9 +128,6 @@ main(int argc, char **argv) {
struct timeval tval;
GPContext *context = sample_create_context();
- buffer = malloc(buffersize);
- if (!buffer) exit(1);
-
gp_log_add_func(GP_LOG_ERROR, errordumper, NULL);
/*gp_log_add_func(GP_LOG_DATA, errordumper, NULL); */
gp_camera_new(&camera);