NetSurf
Data Structures | Macros | Functions | Variables
filename.c File Reference

Provides a central method of obtaining unique filenames. More...

#include <assert.h>
#include <sys/types.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include "utils/dirent.h"
#include "utils/errors.h"
#include "utils/file.h"
#include "utils/filename.h"
#include "utils/log.h"
#include "utils/utils.h"
Include dependency graph for filename.c:

Go to the source code of this file.

Data Structures

struct  directory
 

Macros

#define FULL_WORD   (unsigned int)0xffffffffu
 
#define START_PREFIX   ('0' + '0' * 10)
 

Functions

static struct directoryfilename_create_directory (const char *prefix)
 Creates a new directory. More...
 
static bool filename_flush_directory (const char *folder, int depth)
 Deletes some files in a directory that are not accounted for. More...
 
const char * filename_request (void)
 Request a new, unique, filename. More...
 
bool filename_claim (const char *filename)
 Claim a specific filename. More...
 
void filename_release (const char *filename)
 Releases a filename for future use. More...
 
bool filename_initialise (void)
 Initialise the filename provider. More...
 
void filename_flush (void)
 Deletes all files in the cache directory that are not accounted for. More...
 

Variables

static struct directoryroot = NULL
 
static char filename_buffer [12]
 
static char filename_directory [256]
 

Detailed Description

Provides a central method of obtaining unique filenames.

A maximum of 2^24 files can be allocated at any point in time.

Definition in file filename.c.

Macro Definition Documentation

◆ FULL_WORD

#define FULL_WORD   (unsigned int)0xffffffffu

Definition at line 43 of file filename.c.

◆ START_PREFIX

#define START_PREFIX   ('0' + '0' * 10)

Definition at line 44 of file filename.c.

Function Documentation

◆ filename_claim()

bool filename_claim ( const char *  filename)

Claim a specific filename.

Parameters
filenamethe filename to claim
Returns
whether the claim was successful

Definition at line 115 of file filename.c.

References filename_create_directory(), directory::high_used, directory::low_used, and START_PREFIX.

Here is the call graph for this function:

◆ filename_create_directory()

static struct directory * filename_create_directory ( const char *  prefix)
static

Creates a new directory.

Parameters
prefixthe prefix to use, or NULL to allocate a new one
Returns
a new directory structure, or NULL on memory exhaustion or creation failure

Empty directories are never deleted, except by an explicit call to filename_flush().

Definition at line 401 of file filename.c.

References filename_directory, directory::high_used, is_dir(), directory::low_used, directory::next, NSLOG, nsmkdir, directory::numeric_prefix, directory::prefix, root, SLEN, START_PREFIX, and TEMP_FILENAME_PREFIX.

Referenced by filename_claim(), and filename_request().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ filename_flush()

void filename_flush ( void  )

Deletes all files in the cache directory that are not accounted for.

Definition at line 219 of file filename.c.

References filename_flush_directory(), and TEMP_FILENAME_PREFIX.

Here is the call graph for this function:

◆ filename_flush_directory()

bool filename_flush_directory ( const char *  folder,
int  depth 
)
static

Deletes some files in a directory that are not accounted for.

A single call to this function may not delete all the files in a directory. It should be called until it returns false.

Parameters
folderthe folder to search
depththe folder depth
Returns
whether further calls may be needed

Definition at line 235 of file filename.c.

References filename_flush_directory(), directory::high_used, directory::low_used, netsurf_recursive_rm(), directory::next, NSERROR_OK, NSLOG, directory::numeric_prefix, parent, directory::prefix, root, and START_PREFIX.

Referenced by filename_flush(), and filename_flush_directory().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ filename_initialise()

bool filename_initialise ( void  )

Initialise the filename provider.

Definition at line 178 of file filename.c.

References NSLOG, nsmkdir, and TEMP_FILENAME_PREFIX.

Referenced by gui_init().

Here is the caller graph for this function:

◆ filename_release()

void filename_release ( const char *  filename)

Releases a filename for future use.

Parameters
filenamethe filename to release

Definition at line 151 of file filename.c.

References directory::high_used, directory::low_used, directory::next, directory::numeric_prefix, root, and START_PREFIX.

◆ filename_request()

const char * filename_request ( void  )

Request a new, unique, filename.

Returns
a pointer to a shared buffer containing the new filename, NULL on failure

Definition at line 68 of file filename.c.

References filename_buffer, filename_create_directory(), FULL_WORD, directory::high_used, directory::low_used, directory::next, NSLOG, directory::prefix, and root.

Referenced by nsbeos_gui_view_source(), and ro_gui_view_source().

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ filename_buffer

char filename_buffer[12]
static

Definition at line 56 of file filename.c.

Referenced by filename_request().

◆ filename_directory

char filename_directory[256]
static

Definition at line 57 of file filename.c.

Referenced by filename_create_directory().

◆ root

struct directory* root = NULL
static

Definition at line 55 of file filename.c.

Referenced by box_normalise_block(), box_normalise_flex(), box_normalise_inline_container(), box_normalise_table(), box_normalise_table_row(), box_normalise_table_row_group(), box_normalise_table_spans(), browser_window_callback(), browser_window_console_log(), browser_window_content_ready(), browser_window_convert_to_download(), browser_window_download(), browser_window_frame_resize_start(), browser_window_get_position(), browser_window_set_pointer(), convert_xml_to_box(), cookie_manager_find_entry(), cookie_manager_find_folder(), CookieWindow::CookieWindow(), fb_redraw_text(), fb_redraw_text_button(), fbtk_click(), fbtk_enable_oskb(), fbtk_event(), fbtk_get_caret(), fbtk_get_nsfb(), fbtk_get_redraw_pending(), fbtk_init(), fbtk_input(), fbtk_redraw(), fbtk_set_caret(), fbtk_set_focus(), fbtk_set_ptr(), fbtk_tgrab_pointer(), fbtk_warp_pointer(), filename_create_directory(), filename_flush_directory(), filename_release(), filename_request(), gui_resize(), hscroll_redraw(), layout_position_relative(), ns_computed_display(), save_complete_libdom_treewalk(), treeview_create_node_root(), treeview_redraw_search(), treeview_redraw_tree(), treeview_walk(), treeview_walk_internal(), urldb_count_urls(), urldb_destroy_host_tree(), urldb_destroy_path_tree(), urldb_destroy_search_tree(), urldb_iterate_partial_host(), urldb_search_find(), urldb_search_insert(), urldb_search_insert_internal(), urldb_search_skew(), urldb_search_split(), vscroll_redraw(), and window_scroll_by().