git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@7940 67ed7778-7388-44ab-90cf-0a291f65f57c
290 lines
5.5 KiB
C
290 lines
5.5 KiB
C
/****************************************************************************
|
|
*
|
|
* File: util.c
|
|
*
|
|
* Utility functions for the gphoto2 camlibs/canon driver.
|
|
*
|
|
* $Id$
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
*
|
|
* include files
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "config.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <time.h>
|
|
#include <string.h>
|
|
|
|
#include <gphoto2.h>
|
|
#include <gphoto2-port-log.h>
|
|
|
|
#include "canon.h"
|
|
#include "util.h"
|
|
#include "library.h"
|
|
|
|
/**
|
|
* is_thumbnail:
|
|
* @name: name of file to examine
|
|
*
|
|
* Test whether the given @name corresponds to a thumbnail (.THM).
|
|
*
|
|
* Returns:
|
|
* 1 if filename is the name of a thumbnail (i.e. ends with ".THM" )
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_thumbnail (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos)
|
|
res = (!strcmp (pos, ".THM"));
|
|
|
|
GP_DEBUG ("is_thumbnail(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* is_audio:
|
|
* @name: name of file to examine
|
|
*
|
|
* Test whether the given @name corresponds to an audio file (.WAV).
|
|
*
|
|
* Returns:
|
|
* 1 if filename is the name of an audio file (i.e. ends with ".WAV" )
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_audio (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos)
|
|
res = (!strcmp (pos, ".WAV"));
|
|
|
|
GP_DEBUG ("is_audio(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* is_image:
|
|
* @name: name of file to examine
|
|
*
|
|
* Tests whether the given @name corresponds to an image (.JPG, .CR2, or .CRW).
|
|
*
|
|
* Returns:
|
|
* 1 if filename is the name of an image
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_image (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos) {
|
|
res |= !strcmp (pos, ".JPG");
|
|
res |= !strcmp (pos, ".CRW");
|
|
res |= !strcmp (pos, ".CR2");
|
|
}
|
|
|
|
GP_DEBUG ("is_image(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* is_jpeg:
|
|
* @name: name of file to examine
|
|
*
|
|
* Test whether the given @name corresponds to a JPEG image (.JPG).
|
|
* Returns:
|
|
* 1 if filename is the name of a JPEG image (i.e. ends with ".JPG" )
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_jpeg (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos)
|
|
res = (!strcmp (pos, ".JPG"));
|
|
|
|
GP_DEBUG ("is_jpeg(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* is_crw:
|
|
* @name: name of file to examine
|
|
*
|
|
* Tests whether the name given corresponds to a raw CRW image (.CRW).
|
|
*
|
|
* Returns:
|
|
* 1 if filename is the name of a traditional Canon raw image (i.e. ends with .CRW)
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_crw (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos)
|
|
res = !strcmp (pos, ".CRW");
|
|
|
|
GP_DEBUG ("is_crw(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* is_cr2:
|
|
* @name: name of file to examine
|
|
*
|
|
* Tests whether the name given corresponds to a raw CR2 image (.CR2).
|
|
*
|
|
* Returns:
|
|
* 1 if filename is the name of a CR2 raw image (i.e. ends with .CR2)
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_cr2 (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos)
|
|
res = !strcmp (pos, ".CR2");
|
|
|
|
GP_DEBUG ("is_cr2(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* is_movie:
|
|
* @name: name of file to examine
|
|
*
|
|
* Test whether the name given corresponds
|
|
* to a movie (.AVI)
|
|
*
|
|
* Returns:
|
|
* 1 if filename is the name of a movie (i.e. ends with ".AVI" )
|
|
* 0 if not
|
|
*
|
|
*/
|
|
int
|
|
is_movie (const char *name)
|
|
{
|
|
const char *pos;
|
|
int res = 0;
|
|
|
|
pos = strchr (name, '.');
|
|
if (pos)
|
|
res = (!strcmp (pos, ".AVI"));
|
|
|
|
GP_DEBUG ("is_movie(%s) == %i", name, res);
|
|
return (res);
|
|
}
|
|
|
|
/**
|
|
* filename2mimetype:
|
|
* @filename: name of file to examine
|
|
*
|
|
* Deduces MIME type of file by considering the file name ending.
|
|
*
|
|
* Returns: pointer to immutable string with the MIME type
|
|
*/
|
|
|
|
const char *
|
|
filename2mimetype (const char *filename)
|
|
{
|
|
const char *pos = strchr (filename, '.');
|
|
|
|
if (pos) {
|
|
if (!strcmp (pos, ".AVI"))
|
|
return GP_MIME_AVI;
|
|
else if (!strcmp (pos, ".JPG"))
|
|
return GP_MIME_JPEG;
|
|
else if (!strcmp (pos, ".WAV"))
|
|
return GP_MIME_WAV;
|
|
else if (!strcmp (pos, ".THM"))
|
|
return GP_MIME_JPEG;
|
|
else if (!strcmp (pos, ".CRW"))
|
|
return GP_MIME_CRW;
|
|
else if (!strcmp (pos, ".CR2"))
|
|
return GP_MIME_CRW;
|
|
}
|
|
return GP_MIME_UNKNOWN;
|
|
}
|
|
|
|
void dump_hex ( FILE *fp, void *buffer, int length ) {
|
|
unsigned char *data = (unsigned char *)buffer;
|
|
int i, j, full_lines, remainder;
|
|
char output_line[17];
|
|
|
|
/* Dump a buffer in hexadecimal */
|
|
full_lines = length / 16;
|
|
remainder = length % 16;
|
|
output_line[16] = 0;
|
|
|
|
for ( i=0; i<full_lines*16; i+=16 ) {
|
|
fprintf ( fp, "%04x: ", i );
|
|
for ( j=0; j<16; j++ ) {
|
|
fprintf ( fp, " %02x", data[i+j] );
|
|
if ( data[i+j] >= 32 && data[i+j] < 127 )
|
|
output_line[j] = data[i+j];
|
|
else
|
|
output_line[j] = '.';
|
|
}
|
|
fprintf ( fp, " %s\n", output_line );
|
|
}
|
|
if ( remainder > 0 ) {
|
|
fprintf ( fp, "%04x: ", i );
|
|
for ( j=0; j<remainder; j++ ) {
|
|
fprintf ( fp, " %02x", data[i+j] );
|
|
if ( data[i+j] >= 32 && data[i+j] < 127 )
|
|
output_line[j] = data[i+j];
|
|
else
|
|
output_line[j] = '.';
|
|
}
|
|
output_line[j] = 0;
|
|
for (; j<16; j++ )
|
|
fprintf ( fp, " " ); /* Pad line to same length */
|
|
fprintf ( fp, " %s\n", output_line );
|
|
}
|
|
fprintf ( fp, "\n" );
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
*
|
|
* End of file: util.c
|
|
*
|
|
****************************************************************************/
|
|
|
|
/*
|
|
* Local Variables:
|
|
* c-file-style:"linux"
|
|
* indent-tabs-mode:t
|
|
* End:
|
|
*/
|