libgphoto2 photo camera library (libgphoto2) Internals  2.5.26
gphoto2-filesys.c File Reference
#include "config.h"
#include <gphoto2/gphoto2-filesys.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <gphoto2/gphoto2-result.h>
#include <gphoto2/gphoto2-port-log.h>
#include <gphoto2/gphoto2-setting.h>
#include <limits.h>

Go to the source code of this file.

Data Structures

struct  _CameraFilesystemFile
 
struct  _CameraFilesystemFolder
 
struct  _CameraFilesystem
 The internal camera filesystem structure. More...
 

Macros

#define _DEFAULT_SOURCE
 
#define textdomain(String)   (String)
 
#define gettext(String)   (String)
 
#define dgettext(Domain, Message)   (Message)
 
#define dcgettext(Domain, Message, Type)   (Message)
 
#define bindtextdomain(Domain, Directory)   (Domain)
 
#define _(String)   (String)
 
#define N_(String)   (String)
 
#define PATH_MAX   4096
 
#define PICTURES_TO_KEEP   2
 
#define MIN(a, b)   (((a) < (b)) ? (a) : (b))
 
#define CR(result)   {int __r = (result); if (__r < 0) return (__r);}
 
#define CL(result, list)
 
#define CU(result, file)
 
#define CC(context)
 
#define CA(f, c)
 

Typedefs

typedef struct _CameraFilesystemFile CameraFilesystemFile
 
typedef struct _CameraFilesystemFolder CameraFilesystemFolder
 

Functions

static int gp_filesystem_lru_clear (CameraFilesystem *fs)
 
static int gp_filesystem_lru_remove_one (CameraFilesystem *fs, CameraFilesystemFile *item)
 
static int gp_filesystem_lru_update (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, GPContext *context)
 
static int delete_all_files (CameraFilesystem *fs, CameraFilesystemFolder *folder)
 
static int delete_folder (CameraFilesystem *fs, CameraFilesystemFolder **folder)
 
static CameraFilesystemFolderlookup_folder (CameraFilesystem *fs, CameraFilesystemFolder *folder, const char *foldername, GPContext *context)
 
static int lookup_folder_file (CameraFilesystem *fs, const char *folder, const char *filename, CameraFilesystemFolder **xfolder, CameraFilesystemFile **xfile, GPContext *context)
 
static int recurse_delete_folder (CameraFilesystem *fs, CameraFilesystemFolder *folder)
 
static int delete_all_folders (CameraFilesystem *fs, const char *foldername, GPContext *context)
 
static int append_folder_one (CameraFilesystemFolder *folder, const char *name, CameraFilesystemFolder **newfolder)
 
static int append_to_folder (CameraFilesystemFolder *folder, const char *foldername, CameraFilesystemFolder **newfolder)
 
static int append_folder (CameraFilesystem *fs, const char *folder, CameraFilesystemFolder **newfolder, GPContext *context)
 
static int append_file (CameraFilesystem *fs, CameraFilesystemFolder *folder, const char *name, CameraFile *file, GPContext *context)
 
int gp_filesystem_reset (CameraFilesystem *fs)
 Clear the filesystem. More...
 
int gp_filesystem_new (CameraFilesystem **fs)
 Create a new filesystem struct. More...
 
int gp_filesystem_free (CameraFilesystem *fs)
 Free filesystem struct. More...
 
static int internal_append (CameraFilesystem *fs, CameraFilesystemFolder *f, const char *filename, GPContext *context)
 Append a file to a folder in a filesystem. More...
 
int gp_filesystem_append (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context)
 
static void recursive_fs_dump (CameraFilesystemFolder *folder, int depth)
 
int gp_filesystem_dump (CameraFilesystem *fs)
 Dump the current filesystem. More...
 
static int delete_file (CameraFilesystem *fs, CameraFilesystemFolder *folder, CameraFilesystemFile *file)
 
static int gp_filesystem_delete_all_one_by_one (CameraFilesystem *fs, const char *folder, GPContext *context)
 
int gp_filesystem_delete_all (CameraFilesystem *fs, const char *folder, GPContext *context)
 Delete all files in specified folder. More...
 
int gp_filesystem_list_files (CameraFilesystem *fs, const char *folder, CameraList *list, GPContext *context)
 Get the list of files in a folder. More...
 
int gp_filesystem_list_folders (CameraFilesystem *fs, const char *folder, CameraList *list, GPContext *context)
 List all subfolders within a filesystem folder. More...
 
int gp_filesystem_count (CameraFilesystem *fs, const char *folder, GPContext *context)
 Count files a folder of a filesystem. More...
 
int gp_filesystem_delete_file (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context)
 Delete a file from a folder. More...
 
int gp_filesystem_delete_file_noop (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context)
 Delete a virtal file from a folder in the filesystem. More...
 
int gp_filesystem_make_dir (CameraFilesystem *fs, const char *folder, const char *name, GPContext *context)
 Create a subfolder within a folder. More...
 
int gp_filesystem_remove_dir (CameraFilesystem *fs, const char *folder, const char *name, GPContext *context)
 Remove a subfolder from within a folder. More...
 
int gp_filesystem_put_file (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, GPContext *context)
 Upload a file to a folder on the device filesystem. More...
 
int gp_filesystem_name (CameraFilesystem *fs, const char *folder, int filenumber, const char **filename, GPContext *context)
 Lookup the filename of an indexed file within a folder. More...
 
int gp_filesystem_number (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context)
 Get the index of a file in specified folder. More...
 
static int gp_filesystem_scan (CameraFilesystem *fs, const char *folder, const char *filename, GPContext *context)
 
static int recursive_folder_scan (CameraFilesystemFolder *folder, const char *lookforfile, char **foldername)
 
int gp_filesystem_get_folder (CameraFilesystem *fs, const char *filename, char **folder, GPContext *context)
 Search a folder that contains a given filename. More...
 
static int gp_filesystem_get_file_impl (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, GPContext *context)
 
int gp_filesystem_get_file (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, GPContext *context)
 Get file data from the filesystem. More...
 
int gp_filesystem_read_file (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, uint64_t offset, char *buf, uint64_t *size, GPContext *context)
 Get partial file data from the filesystem. More...
 
int gp_filesystem_set_funcs (CameraFilesystem *fs, CameraFilesystemFuncs *funcs, void *data)
 Set all filesystem related function pointers. More...
 
int gp_filesystem_get_info (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileInfo *info, GPContext *context)
 Get information about the specified file. More...
 
static int gp_filesystem_lru_free (CameraFilesystem *fs)
 
static int gp_filesystem_lru_count (CameraFilesystem *fs)
 
static int gp_filesystem_lru_check (CameraFilesystem *fs)
 
int gp_filesystem_set_file_noop (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileType type, CameraFile *file, GPContext *context)
 Attach file content to a specified file. More...
 
int gp_filesystem_set_info_noop (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileInfo info, GPContext *context)
 Store the file information in the virtual fs. More...
 
int gp_filesystem_set_info (CameraFilesystem *fs, const char *folder, const char *filename, CameraFileInfo info, GPContext *context)
 Set information about a file. More...
 
int gp_filesystem_get_storageinfo (CameraFilesystem *fs, CameraStorageInformation **storageinfo, int *nrofstorageinfos, GPContext *context)
 Get the storage information about this filesystem. More...
 

Variables

static int pictures_to_keep = -1
 

Detailed Description

Author
Copyright 2000 Scott Fritzinger
Contributions Lutz Mueller lutz@.nosp@m.user.nosp@m.s.sf..nosp@m.net (2001)
Copyright 2009 Marcus Meissner
License
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Definition in file gphoto2-filesys.c.

Macro Definition Documentation

◆ _

#define _ (   String)    (String)

Definition at line 60 of file gphoto2-filesys.c.

◆ _DEFAULT_SOURCE

#define _DEFAULT_SOURCE

Definition at line 26 of file gphoto2-filesys.c.

◆ bindtextdomain

#define bindtextdomain (   Domain,
  Directory 
)    (Domain)

Definition at line 59 of file gphoto2-filesys.c.

◆ CA

#define CA (   f,
 
)
Value:
{ \
if ((f)[0] != '/') { \
gp_context_error ((c), \
_("The path '%s' is not absolute."), (f)); \
} \
}
#define _(String)
#define GP_ERROR_PATH_NOT_ABSOLUTE
Path is not absolute.

Definition at line 296 of file gphoto2-filesys.c.

◆ CC

#define CC (   context)
Value:
{ \
return GP_ERROR_CANCEL; \
}
GPContextFeedback gp_context_cancel(GPContext *context)
@ GP_CONTEXT_FEEDBACK_CANCEL
#define GP_ERROR_CANCEL
Cancellation successful.

Definition at line 290 of file gphoto2-filesys.c.

◆ CL

#define CL (   result,
  list 
)
Value:
{ \
int __r = (result); \
\
if (__r < 0) { \
gp_list_free (list); \
return (__r); \
} \
}
int result

Definition at line 270 of file gphoto2-filesys.c.

◆ CR

#define CR (   result)    {int __r = (result); if (__r < 0) return (__r);}

Definition at line 268 of file gphoto2-filesys.c.

◆ CU

#define CU (   result,
  file 
)
Value:
{ \
int __r = (result); \
\
if (__r < 0) { \
gp_file_unref (file); \
return (__r); \
} \
}

Definition at line 280 of file gphoto2-filesys.c.

◆ dcgettext

#define dcgettext (   Domain,
  Message,
  Type 
)    (Message)

Definition at line 58 of file gphoto2-filesys.c.

◆ dgettext

#define dgettext (   Domain,
  Message 
)    (Message)

Definition at line 57 of file gphoto2-filesys.c.

◆ gettext

#define gettext (   String)    (String)

Definition at line 56 of file gphoto2-filesys.c.

◆ MIN

#define MIN (   a,
 
)    (((a) < (b)) ? (a) : (b))

Definition at line 266 of file gphoto2-filesys.c.

◆ N_

#define N_ (   String)    (String)

Definition at line 61 of file gphoto2-filesys.c.

◆ PATH_MAX

#define PATH_MAX   4096

Definition at line 65 of file gphoto2-filesys.c.

◆ PICTURES_TO_KEEP

#define PICTURES_TO_KEEP   2

The default number of pictures to keep in the internal cache, can be overridden by settings.

Definition at line 102 of file gphoto2-filesys.c.

◆ textdomain

#define textdomain (   String)    (String)

Definition at line 55 of file gphoto2-filesys.c.

Typedef Documentation

◆ CameraFilesystemFile

◆ CameraFilesystemFolder

Function Documentation

◆ append_file()

static int append_file ( CameraFilesystem fs,
CameraFilesystemFolder folder,
const char *  name,
CameraFile file,
GPContext context 
)
static

Definition at line 596 of file gphoto2-filesys.c.

References _CameraFilesystemFolder::files, GP_ERROR, gp_file_ref(), and GP_OK.

Referenced by gp_filesystem_put_file().

◆ append_folder()

static int append_folder ( CameraFilesystem fs,
const char *  folder,
CameraFilesystemFolder **  newfolder,
GPContext context 
)
static

Definition at line 582 of file gphoto2-filesys.c.

References append_to_folder(), CA, CC, and _CameraFilesystem::rootfolder.

Referenced by gp_filesystem_append().

◆ append_folder_one()

◆ append_to_folder()

static int append_to_folder ( CameraFilesystemFolder folder,
const char *  foldername,
CameraFilesystemFolder **  newfolder 
)
static

◆ delete_all_files()

◆ delete_all_folders()

static int delete_all_folders ( CameraFilesystem fs,
const char *  foldername,
GPContext context 
)
static

◆ delete_file()

◆ delete_folder()

static int delete_folder ( CameraFilesystem fs,
CameraFilesystemFolder **  folder 
)
static

◆ gp_filesystem_append()

int gp_filesystem_append ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
GPContext context 
)

◆ gp_filesystem_count()

int gp_filesystem_count ( CameraFilesystem fs,
const char *  folder,
GPContext context 
)

Count files a folder of a filesystem.

Parameters
fsa CameraFilesystem
foldera folder in which to count the files
contexta GPContext

Counts the files in the folder.

Returns
The number of files in the folder or a gphoto2 error code.

Definition at line 1080 of file gphoto2-filesys.c.

References CA, CC, _CameraFilesystemFolder::files, GP_ERROR_DIRECTORY_NOT_FOUND, lookup_folder(), _CameraFilesystemFile::next, and _CameraFilesystem::rootfolder.

◆ gp_filesystem_delete_all()

int gp_filesystem_delete_all ( CameraFilesystem fs,
const char *  folder,
GPContext context 
)

Delete all files in specified folder.

Parameters
fsa CameraFilesystem
folderthe folder in which to delete all files
contexta GPContext

Deletes all files in the given folder from the fs. If the fs has not been supplied with a delete_all_func, it tries to delete the files one by one using the delete_file_func. If that function has not been supplied neither, an error is returned.

Returns
a gphoto2 error code.

Definition at line 895 of file gphoto2-filesys.c.

References CA, CC, CR, _CameraFilesystem::data, delete_all_files(), _CameraFilesystem::delete_all_func, _CameraFilesystemFolder::files_dirty, GP_ERROR_DIRECTORY_NOT_FOUND, gp_filesystem_delete_all_one_by_one(), GP_OK, gp_result_as_string(), lookup_folder(), and _CameraFilesystem::rootfolder.

Referenced by gp_camera_folder_delete_all().

◆ gp_filesystem_delete_all_one_by_one()

static int gp_filesystem_delete_all_one_by_one ( CameraFilesystem fs,
const char *  folder,
GPContext context 
)
static

◆ gp_filesystem_delete_file()

int gp_filesystem_delete_file ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
GPContext context 
)

Delete a file from a folder.

Parameters
fsa CameraFilesystem
foldera folder in which to delete the file
filenamethe name of the file to delete
contexta GPContext

If a delete_file_func has been supplied to the fs, this function will be called and, if this function returns without error, the file will be removed from the fs.

Returns
a gphoto2 error code.

Definition at line 1117 of file gphoto2-filesys.c.

References _, CA, CC, CR, _CameraFilesystem::data, delete_file(), _CameraFilesystem::delete_file_func, gp_context_error(), GP_ERROR_NOT_SUPPORTED, GP_OK, and lookup_folder_file().

Referenced by gp_camera_file_delete(), and gp_filesystem_delete_all_one_by_one().

◆ gp_filesystem_delete_file_noop()

int gp_filesystem_delete_file_noop ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
GPContext context 
)

Delete a virtal file from a folder in the filesystem.

Parameters
fsa CameraFilesystem
foldera folder in which to delete the file
filenamethe name of the file to delete
contexta GPContext

Remove a file from the filesystem. Compared to gp_filesystem_delete_file() this just removes the file from the libgphoto2 view of the filesystem, but does not call the camera driver to delete it from the physical device.

Returns
a gphoto2 error code.

Definition at line 1161 of file gphoto2-filesys.c.

References CA, CC, CR, delete_file(), and lookup_folder_file().

◆ gp_filesystem_dump()

int gp_filesystem_dump ( CameraFilesystem fs)

Dump the current filesystem.

Parameters
fsthe CameraFilesystem
Returns
a gphoto error code

Internal function to dump the current filesystem.

Definition at line 809 of file gphoto2-filesys.c.

References GP_OK, recursive_fs_dump(), and _CameraFilesystem::rootfolder.

◆ gp_filesystem_free()

int gp_filesystem_free ( CameraFilesystem fs)

Free filesystem struct.

Parameters
fsa CameraFilesystem

Frees the CameraFilesystem

Returns
a gphoto2 error code.

Definition at line 690 of file gphoto2-filesys.c.

References gp_filesystem_reset(), GP_OK, _CameraFilesystemFolder::name, and _CameraFilesystem::rootfolder.

Referenced by gp_camera_free().

◆ gp_filesystem_get_file()

int gp_filesystem_get_file ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
CameraFileType  type,
CameraFile file,
GPContext context 
)

Get file data from the filesystem.

Parameters
fsa CameraFilesystem
folderthe folder in which the file can be found
filenamethe name of the file to download
typethe type of the file
filethe file that receives the data
contexta GPContext

Downloads the file called filename from the folder using the get_file_func if such a function has been previously supplied. If the file has been previously downloaded, the file is retrieved from cache. The result is stored in the passed file structure.

Returns
a gphoto2 error code.

Definition at line 1638 of file gphoto2-filesys.c.

References CR, CU, GP_ERROR_CORRUPTED_DATA, GP_ERROR_NOT_SUPPORTED, gp_file_adjust_name_for_mime_type(), gp_file_get_data_and_size(), gp_file_new(), gp_file_set_data_and_size(), gp_file_set_mime_type(), gp_file_set_name(), GP_FILE_TYPE_EXIF, GP_FILE_TYPE_PREVIEW, gp_file_unref(), gp_filesystem_get_file_impl(), gp_filesystem_set_file_noop(), GP_MIME_EXIF, GP_MIME_JPEG, GP_OK, and gp_result_as_string().

Referenced by gp_camera_file_get(), and gp_filesystem_read_file().

◆ gp_filesystem_get_file_impl()

◆ gp_filesystem_get_folder()

int gp_filesystem_get_folder ( CameraFilesystem fs,
const char *  filename,
char **  folder,
GPContext context 
)

Search a folder that contains a given filename.

Parameters
fsa CameraFilesystem
filenamethe name of the file to search in the fs
folderpointer to value where the string is stored in
contexta GPContext

Searches a file called filename in the fs and returns the first occurrency. This functionality is needed for camera drivers that cannot figure out where a file gets created after capturing an image although the name of the image is known. Usually, those drivers will call gp_filesystem_reset in order to tell the fs that something has changed and then gp_filesystem_get_folder in order to find the file.

Note that you get a reference to the string stored in the filesystem structure, so do not free it yourself.

Returns
a gphoto2 error code.

Definition at line 1519 of file gphoto2-filesys.c.

References _, CC, CR, gp_context_error(), GP_ERROR_FILE_NOT_FOUND, gp_filesystem_scan(), GP_OK, recursive_folder_scan(), and _CameraFilesystem::rootfolder.

◆ gp_filesystem_get_info()

int gp_filesystem_get_info ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
CameraFileInfo info,
GPContext context 
)

Get information about the specified file.

Parameters
fsa CameraFilesystem
folderthe folder that contains the file
filenamethe filename
infopointer to CameraFileInfo that receives the information
contexta GPContext
Returns
a gphoto2 error code.

Definition at line 1861 of file gphoto2-filesys.c.

References _, CA, CC, CR, _CameraFilesystem::data, _CameraFileInfoFile::fields, _CameraFileInfo::file, _CameraFilesystem::get_info_func, gp_context_error(), GP_ERROR_NOT_SUPPORTED, GP_FILE_INFO_MTIME, GP_OK, _CameraFilesystemFile::info, _CameraFilesystemFile::info_dirty, lookup_folder_file(), and _CameraFileInfoFile::mtime.

Referenced by gp_camera_file_get_info(), and gp_filesystem_set_file_noop().

◆ gp_filesystem_get_storageinfo()

int gp_filesystem_get_storageinfo ( CameraFilesystem fs,
CameraStorageInformation **  storageinfo,
int *  nrofstorageinfos,
GPContext context 
)

Get the storage information about this filesystem.

Parameters
fsthe filesystem
storageinfoPointer to receive a pointer to/array of storage info items
nrofstorageinfosPointer to receive number of array entries
contexta GPContext

This function is only called from gp_camera_get_storageinfo(). You may want to make sure this information is consistent with the information on gp_camera_get_storageinfo().

Retrieves the storage information, like maximum and free space, for the specified filesystem, if supported by the device. The storage information is returned in an newly allocated array of CameraStorageInformation objects, to which the pointer pointed to by #storageinfo will be set.

The variable pointed to by #nrofstorageinfos will be set to the number of elements in that array.

It is the caller's responsibility to free the memory of the array.

Returns
a gphoto error code

Definition at line 2453 of file gphoto2-filesys.c.

References _, CC, _CameraFilesystem::data, gp_context_error(), GP_ERROR_NOT_SUPPORTED, and _CameraFilesystem::storage_info_func.

Referenced by gp_camera_get_storageinfo().

◆ gp_filesystem_list_files()

int gp_filesystem_list_files ( CameraFilesystem fs,
const char *  folder,
CameraList list,
GPContext context 
)

Get the list of files in a folder.

Parameters
fsa CameraFilesystem
foldera folder of which a file list should be generated
lista CameraList where to put the list of files into
contexta GPContext

Lists the files in folder using either cached values or (if there aren't any) the file_list_func which (hopefully) has been previously supplied.

Returns
a gphoto2 error code.

Definition at line 956 of file gphoto2-filesys.c.

References CA, CC, CR, _CameraFilesystem::data, delete_all_files(), _CameraFilesystem::file_list_func, _CameraFilesystemFolder::files, _CameraFilesystemFolder::files_dirty, GP_ERROR_DIRECTORY_NOT_FOUND, gp_list_append(), gp_list_count(), gp_list_get_name(), gp_list_reset(), GP_OK, internal_append(), lookup_folder(), _CameraFilesystemFile::name, _CameraFilesystemFile::next, and _CameraFilesystem::rootfolder.

Referenced by gp_camera_folder_list_files(), gp_filesystem_append(), gp_filesystem_delete_all_one_by_one(), gp_filesystem_number(), gp_filesystem_scan(), and lookup_folder_file().

◆ gp_filesystem_list_folders()

int gp_filesystem_list_folders ( CameraFilesystem fs,
const char *  folder,
CameraList list,
GPContext context 
)

List all subfolders within a filesystem folder.

Parameters
fsa CameraFilesystem
foldera folder
lista CameraList where subfolders should be listed
contexta GPContext

Generates a list of subfolders of the supplied folder either using cached values (if there are any) or the folder_list_func if it has been supplied previously. If not, it is assumed that only a root folder exists (which is the case for many cameras).

Returns
a gphoto2 error code.

Definition at line 1022 of file gphoto2-filesys.c.

References append_folder_one(), CA, CC, CR, _CameraFilesystem::data, delete_all_folders(), _CameraFilesystem::folder_list_func, _CameraFilesystemFolder::folders, _CameraFilesystemFolder::folders_dirty, GP_ERROR_DIRECTORY_NOT_FOUND, gp_list_append(), gp_list_count(), gp_list_get_name(), gp_list_reset(), GP_OK, lookup_folder(), and _CameraFilesystem::rootfolder.

Referenced by gp_camera_folder_list_folders(), gp_filesystem_remove_dir(), gp_filesystem_scan(), and lookup_folder().

◆ gp_filesystem_lru_check()

◆ gp_filesystem_lru_clear()

◆ gp_filesystem_lru_count()

◆ gp_filesystem_lru_free()

◆ gp_filesystem_lru_remove_one()

◆ gp_filesystem_lru_update()

◆ gp_filesystem_make_dir()

int gp_filesystem_make_dir ( CameraFilesystem fs,
const char *  folder,
const char *  name,
GPContext context 
)

Create a subfolder within a folder.

Parameters
fsa CameraFilesystem
folderthe folder in which the directory should be created
namethe name of the directory to be created
contexta GPContext

Creates a new directory called name in given folder.

Returns
a gphoto2 error code

Definition at line 1187 of file gphoto2-filesys.c.

References append_folder_one(), CA, CC, CR, _CameraFilesystem::data, GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_NOT_SUPPORTED, lookup_folder(), _CameraFilesystem::make_dir_func, and _CameraFilesystem::rootfolder.

Referenced by gp_camera_folder_make_dir().

◆ gp_filesystem_name()

int gp_filesystem_name ( CameraFilesystem fs,
const char *  folder,
int  filenumber,
const char **  filename,
GPContext context 
)

Lookup the filename of an indexed file within a folder.

Parameters
fsa CameraFilesystem
folderthe folder where to look up the file with the filenumber
filenumberthe number of the file
filenamepointer to a filename where the result is stored
contexta GPContext

Looks up the filename of file with given filenumber in given folder. See gp_filesystem_number for exactly the opposite functionality.

Returns
a gphoto2 error code.

Definition at line 1342 of file gphoto2-filesys.c.

References _, CA, CC, _CameraFilesystemFolder::files, gp_context_error(), GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_FILE_NOT_FOUND, GP_OK, lookup_folder(), _CameraFilesystemFile::name, _CameraFilesystemFile::next, and _CameraFilesystem::rootfolder.

◆ gp_filesystem_new()

int gp_filesystem_new ( CameraFilesystem **  fs)

Create a new filesystem struct.

Parameters
fsa pointer to a CameraFilesystem

Creates a new empty CameraFilesystem

Returns
a gphoto2 error code.

Definition at line 659 of file gphoto2-filesys.c.

References GP_ERROR_NO_MEMORY, and GP_OK.

Referenced by gp_camera_new().

◆ gp_filesystem_number()

int gp_filesystem_number ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
GPContext context 
)

Get the index of a file in specified folder.

Parameters
fsa CameraFilesystem
folderthe folder where to look for file called filename
filenamethe file to look for
contexta GPContext

Looks for a file called filename in the given folder. See gp_filesystem_name for exactly the opposite functionality.

Returns
a gphoto2 error code.

Definition at line 1388 of file gphoto2-filesys.c.

References _, CA, CC, CL, CR, _CameraFilesystemFolder::files, _CameraFilesystemFolder::files_dirty, gp_context_error(), GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_FILE_NOT_FOUND, gp_filesystem_list_files(), gp_list_free(), gp_list_new(), lookup_folder(), _CameraFilesystemFile::name, _CameraFilesystemFile::next, and _CameraFilesystem::rootfolder.

◆ gp_filesystem_put_file()

int gp_filesystem_put_file ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
CameraFileType  type,
CameraFile file,
GPContext context 
)

Upload a file to a folder on the device filesystem.

Parameters
fsa CameraFilesystem
folderthe folder where to put the file into
filethe file
contexta GPContext

Uploads a file to the camera if a put_file_func has been previously supplied to the fs. If the upload is successful, the file will get cached in the fs.

Returns
a gphoto2 error code.

Definition at line 1296 of file gphoto2-filesys.c.

References _, append_file(), CA, CC, CR, _CameraFilesystem::data, gp_context_error(), GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_NOT_SUPPORTED, GP_FILE_TYPE_NORMAL, GP_OK, lookup_folder(), _CameraFilesystem::put_file_func, and _CameraFilesystem::rootfolder.

Referenced by gp_camera_folder_put_file().

◆ gp_filesystem_read_file()

int gp_filesystem_read_file ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
CameraFileType  type,
uint64_t  offset,
char *  buf,
uint64_t *  size,
GPContext context 
)

Get partial file data from the filesystem.

Parameters
fsa CameraFilesystem
folderthe folder in which the file can be found
filenamethe name of the file to download
typethe type of the file
offsetthe offset where the data starts
bufthe targetbuffer where the data will be put
sizethe size to read and that was read into the buffer
contexta GPContext

Downloads the file called filename from the folder using the read_file_func if such a function has been previously supplied. If the file has been previously downloaded, the file is retrieved from cache.

The file is read partially into the passed buffer. The read starts at offset on the device and goes for at most size bytes. Reading over the end of the file might give errors, so get the maximum file size via an info function before.

Returns
a gphoto2 error code.

Definition at line 1771 of file gphoto2-filesys.c.

References CA, CC, CR, _CameraFilesystem::data, GP_ERROR_NOT_SUPPORTED, gp_file_get_data_and_size(), gp_file_new(), gp_file_unref(), gp_filesystem_get_file(), gp_filesystem_set_file_noop(), GP_OK, and _CameraFilesystem::read_file_func.

Referenced by gp_camera_file_read().

◆ gp_filesystem_remove_dir()

int gp_filesystem_remove_dir ( CameraFilesystem fs,
const char *  folder,
const char *  name,
GPContext context 
)

Remove a subfolder from within a folder.

Parameters
fsa CameraFilesystem
folderthe folder in which the directory should be created
namethe name of the directory to be created
contexta GPContext

Removes a directory called name from the given folder.

Returns
a gphoto2 error code

Definition at line 1221 of file gphoto2-filesys.c.

References _, CA, CC, CR, _CameraFilesystem::data, delete_folder(), _CameraFilesystemFolder::folders, _CameraFilesystemFolder::folders_dirty, gp_context_error(), GP_ERROR_DIRECTORY_EXISTS, GP_ERROR_DIRECTORY_NOT_FOUND, GP_ERROR_FILE_EXISTS, GP_ERROR_NOT_SUPPORTED, gp_filesystem_list_folders(), gp_list_free(), gp_list_new(), GP_OK, lookup_folder(), _CameraFilesystem::remove_dir_func, and _CameraFilesystem::rootfolder.

Referenced by gp_camera_folder_remove_dir().

◆ gp_filesystem_reset()

int gp_filesystem_reset ( CameraFilesystem fs)

Clear the filesystem.

Parameters
fsthe filesystem to be cleared

Resets the filesystem. All cached information including the folder tree will get lost and will be queried again on demand.

Returns
a gphoto2 error code.

Definition at line 631 of file gphoto2-filesys.c.

References CR, delete_all_files(), delete_all_folders(), _CameraFilesystemFolder::files_dirty, _CameraFilesystemFolder::folders_dirty, gp_filesystem_lru_clear(), GP_OK, and _CameraFilesystem::rootfolder.

Referenced by gp_camera_exit(), and gp_filesystem_free().

◆ gp_filesystem_scan()

static int gp_filesystem_scan ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
GPContext context 
)
static

◆ gp_filesystem_set_file_noop()

◆ gp_filesystem_set_funcs()

◆ gp_filesystem_set_info()

int gp_filesystem_set_info ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
CameraFileInfo  info,
GPContext context 
)

◆ gp_filesystem_set_info_noop()

int gp_filesystem_set_info_noop ( CameraFilesystem fs,
const char *  folder,
const char *  filename,
CameraFileInfo  info,
GPContext context 
)

Store the file information in the virtual fs.

Parameters
fsa CameraFilesystem
folderthe foldername
infothe CameraFileInfo to store
contexta GPContext

In contrast to gp_filesystem_set_info, gp_filesystem_set_info_noop will only change the file information in the fs. Typically, camera drivers will use this function in case they get file information "for free" on gp_camera_capture or gp_camera_folder_list_files.

Returns
a gphoto2 error code

Definition at line 2339 of file gphoto2-filesys.c.

References CA, CC, CR, GP_OK, _CameraFilesystemFile::info, _CameraFilesystemFile::info_dirty, and lookup_folder_file().

◆ internal_append()

static int internal_append ( CameraFilesystem fs,
CameraFilesystemFolder f,
const char *  filename,
GPContext context 
)
static

Append a file to a folder in a filesystem.

Parameters
fsa CameraFilesystem
folderthe folder where to put the file in
filenamefilename of the file
contexta GPContext

Tells the fs that there is a file called filename in folder called folder. Usually camera drivers will call this function after capturing an image in order to tell the fs about the new file. A front-end should not use this function.

Returns
a gphoto2 error code.

Definition at line 718 of file gphoto2-filesys.c.

References _CameraFilesystemFolder::files, GP_ERROR_FILE_EXISTS, GP_ERROR_NO_MEMORY, GP_OK, and _CameraFilesystemFolder::name.

Referenced by gp_filesystem_append(), and gp_filesystem_list_files().

◆ lookup_folder()

◆ lookup_folder_file()

◆ recurse_delete_folder()

static int recurse_delete_folder ( CameraFilesystem fs,
CameraFilesystemFolder folder 
)
static

◆ recursive_folder_scan()

static int recursive_folder_scan ( CameraFilesystemFolder folder,
const char *  lookforfile,
char **  foldername 
)
static

◆ recursive_fs_dump()

Variable Documentation

◆ pictures_to_keep

int pictures_to_keep = -1
static

The current number of pictures to keep in the internal cache, either from PICTURES_TO_KEEP or from the settings.

Definition at line 107 of file gphoto2-filesys.c.

Referenced by gp_filesystem_lru_update().