tools/build-R2_19_3/mkfs.jffs2/mkfs.jffs2.c File Reference

#include <sys/types.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <dirent.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <stdint.h>
#include <libgen.h>
#include <ctype.h>
#include <time.h>
#include <getopt.h>
#include <byteswap.h>
#include <zlib.h>
#include "crc32.h"
#include "mtd/jffs2-user.h"
#include "compr.h"

Include dependency graph for mkfs.jffs2.c:

Go to the source code of this file.

Data Structures

struct  filesystem_entry

Defines

#define _GNU_SOURCE
#define crc32   __complete_crap
#define mkfs_debug_msg(a...)   { }
#define min(x, y)   ({ typeof((x)) _x = (x); typeof((y)) _y = (y); (_x>_y)?_y:_x; })
#define PAD(x)   (((x)+3)&~3)
#define SCANF_PREFIX   "511"
#define SCANF_STRING(s)   (s = malloc(512))
#define GETCWD_SIZE   -1
#define JFFS2_MAX_FILE_SIZE   0xFFFFFFFF
#define JFFS2_MAX_SYMLINK_LEN   254
#define write_xattr_entry(x)

Functions

static void verror_msg (const char *s, va_list p)
static void error_msg (const char *s,...)
static void error_msg_and_die (const char *s,...)
static void vperror_msg (const char *s, va_list p)
static void perror_msg (const char *s,...)
static void perror_msg_and_die (const char *s,...)
void * xmalloc (size_t size)
void * xcalloc (size_t nmemb, size_t size)
void * xrealloc (void *ptr, size_t size)
char * xstrdup (const char *s)
char * xreadlink (const char *path)
static FILE * xfopen (const char *path, const char *mode)
static struct filesystem_entryfind_filesystem_entry (struct filesystem_entry *dir, char *fullname, uint32_t type)
static struct filesystem_entryadd_host_filesystem_entry (char *name, char *path, unsigned long uid, unsigned long gid, unsigned long mode, dev_t rdev, struct filesystem_entry *parent)
static struct filesystem_entryrecursive_add_host_directory (struct filesystem_entry *parent, char *targetpath, char *hostpath)
int snprintf (char *str, size_t n, const char *fmt,...)
static int interpret_table_entry (struct filesystem_entry *root, char *line)
static int parse_device_table (struct filesystem_entry *root, FILE *file)
static void cleanup (struct filesystem_entry *dir)
static void full_write (int fd, const void *buf, int len)
static void padblock (void)
static void pad (int req)
static void padword (void)
static void pad_block_if_less_than (int req)
static void write_dirent (struct filesystem_entry *e)
static unsigned int write_regular_file (struct filesystem_entry *e)
static void write_symlink (struct filesystem_entry *e)
static void write_pipe (struct filesystem_entry *e)
static void write_special_file (struct filesystem_entry *e)
static void recursive_populate_directory (struct filesystem_entry *dir)
static void create_target_filesystem (struct filesystem_entry *root)
int load_next_block ()
void process_buffer (int inp_size)
void parse_image ()
int main (int argc, char **argv)

Variables

static int out_fd = -1
static int in_fd = -1
static char default_rootdir [] = "."
static char * rootdir = default_rootdir
static int verbose = 0
static int squash_uids = 0
static int squash_perms = 0
static int fake_times = 0
int target_endian = __BYTE_ORDER
static const char *const app_name = "mkfs.jffs2"
static const char *const memory_exhausted = "memory exhausted"
static uint32_t ino = 0
static uint8_t * file_buffer = NULL
static int out_ofs = 0
static int erase_block_size = 65536
static int pad_fs_size = 0
static int add_cleanmarkers = 1
static struct jffs2_unknown_node cleanmarker
static int cleanmarker_size = sizeof(cleanmarker)
static unsigned char ffbuf [16]
int page_size = 4096
static struct option long_options []
static char * helptext
static char * revtext = "$Revision: 1.1.1.1 $"


Define Documentation

#define _GNU_SOURCE

Definition at line 52 of file mkfs.jffs2.c.

#define crc32   __complete_crap

Definition at line 74 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), png_calculate_crc(), png_reset_crc(), write_dirent(), write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

#define GETCWD_SIZE   -1

Definition at line 450 of file mkfs.jffs2.c.

Referenced by main().

#define JFFS2_MAX_FILE_SIZE   0xFFFFFFFF

Definition at line 659 of file mkfs.jffs2.c.

Referenced by write_regular_file().

#define JFFS2_MAX_SYMLINK_LEN   254

Definition at line 661 of file mkfs.jffs2.c.

Referenced by write_symlink().

#define min ( x,
 )     ({ typeof((x)) _x = (x); typeof((y)) _y = (y); (_x>_y)?_y:_x; })

Definition at line 85 of file mkfs.jffs2.c.

#define mkfs_debug_msg ( a...   )     { }

Definition at line 84 of file mkfs.jffs2.c.

Referenced by write_pipe(), write_regular_file(), and write_symlink().

#define PAD ( x   )     (((x)+3)&~3)

Definition at line 87 of file mkfs.jffs2.c.

Referenced by process_buffer().

#define SCANF_PREFIX   "511"

Definition at line 448 of file mkfs.jffs2.c.

Referenced by interpret_table_entry().

#define SCANF_STRING ( s   )     (s = malloc(512))

Definition at line 449 of file mkfs.jffs2.c.

Referenced by interpret_table_entry().

#define write_xattr_entry ( x   ) 

Definition at line 1268 of file mkfs.jffs2.c.

Referenced by recursive_populate_directory().


Function Documentation

static struct filesystem_entry* add_host_filesystem_entry ( char *  name,
char *  path,
unsigned long  uid,
unsigned long  gid,
unsigned long  mode,
dev_t  rdev,
struct filesystem_entry parent 
) [static]

Definition at line 282 of file mkfs.jffs2.c.

References error_msg_and_die(), fake_times, filesystem_entry::files, free(), filesystem_entry::fullname, filesystem_entry::hostname, filesystem_entry::link, memset(), filesystem_entry::name, filesystem_entry::next, filesystem_entry::parent, filesystem_entry::path, filesystem_entry::prev, filesystem_entry::sb, squash_perms, squash_uids, time, xcalloc(), xreadlink(), and xstrdup().

Referenced by interpret_table_entry(), and recursive_add_host_directory().

static void cleanup ( struct filesystem_entry dir  )  [static]

Definition at line 630 of file mkfs.jffs2.c.

References e, filesystem_entry::files, free(), and filesystem_entry::prev.

Referenced by main().

static void create_target_filesystem ( struct filesystem_entry root  )  [static]

Definition at line 1373 of file mkfs.jffs2.c.

References add_cleanmarkers, cleanmarker, cleanmarker_size, crc32, ffbuf, full_write(), ino, min, out_fd, out_ofs, pad(), pad_fs_size, padblock(), recursive_populate_directory(), and filesystem_entry::sb.

Referenced by main().

static void error_msg ( const char *  s,
  ... 
) [static]

Definition at line 121 of file mkfs.jffs2.c.

References putc(), stderr, and verror_msg().

Referenced by interpret_table_entry(), recursive_add_host_directory(), recursive_populate_directory(), write_regular_file(), and write_symlink().

static void error_msg_and_die ( const char *  s,
  ... 
) [static]

Definition at line 131 of file mkfs.jffs2.c.

References exit, putc(), stderr, and verror_msg().

Referenced by add_host_filesystem_entry(), interpret_table_entry(), main(), xcalloc(), xmalloc(), xrealloc(), and xstrdup().

static struct filesystem_entry* find_filesystem_entry ( struct filesystem_entry dir,
char *  fullname,
uint32_t  type 
) [static]

Definition at line 242 of file mkfs.jffs2.c.

References e, filesystem_entry::files, and filesystem_entry::sb.

Referenced by interpret_table_entry().

static void full_write ( int  fd,
const void *  buf,
int  len 
) [static]

Definition at line 683 of file mkfs.jffs2.c.

References out_ofs, perror_msg_and_die(), and write.

Referenced by create_target_filesystem(), pad(), pad_block_if_less_than(), padblock(), padword(), write_dirent(), write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

static int interpret_table_entry ( struct filesystem_entry root,
char *  line 
) [static]

Definition at line 480 of file mkfs.jffs2.c.

References add_host_filesystem_entry(), error_msg(), error_msg_and_die(), find_filesystem_entry(), free(), mode, name, filesystem_entry::parent, rootdir, filesystem_entry::sb, SCANF_PREFIX, SCANF_STRING, start, and type.

Referenced by parse_device_table().

int load_next_block (  ) 

Definition at line 1477 of file mkfs.jffs2.c.

References erase_block_size, file_buffer, in_fd, and read.

Referenced by parse_image().

int main ( int  argc,
char **  argv 
)

Definition at line 1613 of file mkfs.jffs2.c.

References add_cleanmarkers, cleanmarker, cleanmarker_size, cleanup(), create_target_filesystem(), default_rootdir, erase_block_size, error_msg_and_die(), exit, fake_times, free(), GETCWD_SIZE, in_fd, malloc(), filesystem_entry::next, out_fd, pad_fs_size, page_size, parse_device_table(), parse_image(), perror_msg_and_die(), recursive_add_host_directory(), rootdir, s, squash_perms, squash_uids, stderr, target_endian, units, xfopen(), and xstrdup().

static void pad ( int  req  )  [static]

Definition at line 710 of file mkfs.jffs2.c.

References ffbuf, full_write(), and out_fd.

Referenced by create_target_filesystem(), and pad_block_if_less_than().

static void pad_block_if_less_than ( int  req  )  [inline, static]

Definition at line 730 of file mkfs.jffs2.c.

References add_cleanmarkers, cleanmarker, cleanmarker_size, erase_block_size, full_write(), out_fd, out_ofs, pad(), padblock(), and padword().

Referenced by write_dirent(), write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

static void padblock ( void   )  [static]

Definition at line 702 of file mkfs.jffs2.c.

References erase_block_size, ffbuf, full_write(), min, out_fd, and out_ofs.

Referenced by create_target_filesystem(), and pad_block_if_less_than().

static void padword ( void   )  [inline, static]

Definition at line 723 of file mkfs.jffs2.c.

References ffbuf, full_write(), out_fd, and out_ofs.

Referenced by pad_block_if_less_than(), write_dirent(), write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

static int parse_device_table ( struct filesystem_entry root,
FILE *  file 
) [static]

Definition at line 586 of file mkfs.jffs2.c.

References free(), interpret_table_entry(), length, squash_perms, and squash_uids.

Referenced by main().

void parse_image (  ) 

Definition at line 1591 of file mkfs.jffs2.c.

References erase_block_size, exit, file_buffer, free(), in_fd, load_next_block(), malloc(), out_fd, and process_buffer().

Referenced by main().

static void perror_msg ( const char *  s,
  ... 
) [static]

Definition at line 154 of file mkfs.jffs2.c.

References vperror_msg().

Referenced by xreadlink().

static void perror_msg_and_die ( const char *  s,
  ... 
) [static]

Definition at line 163 of file mkfs.jffs2.c.

References exit, and vperror_msg().

Referenced by full_write(), main(), recursive_add_host_directory(), write_regular_file(), and xfopen().

void process_buffer ( int  inp_size  ) 

Definition at line 1488 of file mkfs.jffs2.c.

References file_buffer, ino, memcpy(), name, PAD, and type.

Referenced by parse_image().

static struct filesystem_entry* recursive_add_host_directory ( struct filesystem_entry parent,
char *  targetpath,
char *  hostpath 
) [static]

Definition at line 369 of file mkfs.jffs2.c.

References add_host_filesystem_entry(), error_msg(), free(), n, filesystem_entry::parent, and perror_msg_and_die().

Referenced by main().

static void recursive_populate_directory ( struct filesystem_entry dir  )  [static]

Definition at line 1271 of file mkfs.jffs2.c.

References e, error_msg(), filesystem_entry::files, filesystem_entry::fullname, write_pipe(), write_regular_file(), write_special_file(), write_symlink(), and write_xattr_entry.

Referenced by create_target_filesystem().

int snprintf ( char *  str,
size_t  n,
const char *  fmt,
  ... 
) [inline]

Definition at line 451 of file mkfs.jffs2.c.

Referenced by _snd_config_evaluate(), open_ctl(), parse_array_def(), safe_strtod(), snd_config_get_ascii(), snd_config_hooks_call(), and snd_func_pcm_args_by_class().

static void verror_msg ( const char *  s,
va_list  p 
) [static]

Definition at line 115 of file mkfs.jffs2.c.

References app_name, stderr, and stdout.

Referenced by error_msg(), error_msg_and_die(), and vperror_msg().

static void vperror_msg ( const char *  s,
va_list  p 
) [static]

Definition at line 142 of file mkfs.jffs2.c.

References stderr, and verror_msg().

Referenced by perror_msg(), and perror_msg_and_die().

static void write_dirent ( struct filesystem_entry e  )  [static]

Definition at line 751 of file mkfs.jffs2.c.

References crc32, e, full_write(), memset(), name, out_fd, pad_block_if_less_than(), padword(), and version.

Referenced by write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

static void write_pipe ( struct filesystem_entry e  )  [static]

Definition at line 955 of file mkfs.jffs2.c.

References crc32, e, full_write(), ino, memset(), mkfs_debug_msg, out_fd, pad_block_if_less_than(), padword(), and write_dirent().

Referenced by recursive_populate_directory().

static unsigned int write_regular_file ( struct filesystem_entry e  )  [static]

Definition at line 782 of file mkfs.jffs2.c.

References buf, crc32, e, erase_block_size, error_msg(), fd, free(), full_write(), ino, JFFS2_MAX_FILE_SIZE, memset(), mkfs_debug_msg, out_fd, out_ofs, pad_block_if_less_than(), padword(), page_size, perror_msg_and_die(), read, space, wbuf, write_dirent(), and xmalloc().

Referenced by recursive_populate_directory().

static void write_special_file ( struct filesystem_entry e  )  [static]

Definition at line 996 of file mkfs.jffs2.c.

References crc32, e, full_write(), ino, memset(), out_fd, pad_block_if_less_than(), padword(), and write_dirent().

Referenced by recursive_populate_directory().

static void write_symlink ( struct filesystem_entry e  )  [static]

Definition at line 907 of file mkfs.jffs2.c.

References crc32, e, error_msg(), full_write(), ino, JFFS2_MAX_SYMLINK_LEN, memset(), mkfs_debug_msg, out_fd, pad_block_if_less_than(), padword(), and write_dirent().

Referenced by recursive_populate_directory().

void* xcalloc ( size_t  nmemb,
size_t  size 
)

Definition at line 183 of file mkfs.jffs2.c.

References error_msg_and_die(), memory_exhausted, and ptr.

Referenced by add_host_filesystem_entry().

static FILE* xfopen ( const char *  path,
const char *  mode 
) [static]

Definition at line 234 of file mkfs.jffs2.c.

References fp, and perror_msg_and_die().

Referenced by main().

void* xmalloc ( size_t  size  ) 

Definition at line 174 of file mkfs.jffs2.c.

References error_msg_and_die(), malloc(), memory_exhausted, and ptr.

Referenced by write_regular_file().

char* xreadlink ( const char *  path  ) 

Definition at line 213 of file mkfs.jffs2.c.

References app_name, buf, perror_msg(), and xrealloc().

Referenced by add_host_filesystem_entry().

void* xrealloc ( void *  ptr,
size_t  size 
)

Definition at line 192 of file mkfs.jffs2.c.

References error_msg_and_die(), and memory_exhausted.

Referenced by xreadlink().

char* xstrdup ( const char *  s  ) 

Definition at line 200 of file mkfs.jffs2.c.

References error_msg_and_die(), memory_exhausted, and t.

Referenced by add_host_filesystem_entry(), and main().


Variable Documentation

int add_cleanmarkers = 1 [static]

Definition at line 669 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), main(), and pad_block_if_less_than().

const char* const app_name = "mkfs.jffs2" [static]

Definition at line 112 of file mkfs.jffs2.c.

Referenced by verror_msg(), and xreadlink().

struct jffs2_unknown_node cleanmarker [static]

Definition at line 670 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), main(), and pad_block_if_less_than().

int cleanmarker_size = sizeof(cleanmarker) [static]

Definition at line 671 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), main(), and pad_block_if_less_than().

char default_rootdir[] = "." [static]

Definition at line 105 of file mkfs.jffs2.c.

Referenced by main().

int erase_block_size = 65536 [static]

Definition at line 667 of file mkfs.jffs2.c.

Referenced by load_next_block(), main(), pad_block_if_less_than(), padblock(), parse_image(), and write_regular_file().

int fake_times = 0 [static]

Definition at line 110 of file mkfs.jffs2.c.

Referenced by add_host_filesystem_entry(), and main().

unsigned char ffbuf[16] [static]

Initial value:

        { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
        0xff, 0xff, 0xff, 0xff, 0xff
}

Definition at line 672 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), pad(), padblock(), and padword().

uint8_t* file_buffer = NULL [static]

Definition at line 665 of file mkfs.jffs2.c.

Referenced by load_next_block(), parse_image(), and process_buffer().

char* helptext [static]

Definition at line 1435 of file mkfs.jffs2.c.

int in_fd = -1 [static]

Definition at line 104 of file mkfs.jffs2.c.

Referenced by load_next_block(), main(), and parse_image().

uint32_t ino = 0 [static]

Definition at line 664 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), process_buffer(), write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

struct option long_options[] [static]

Initial value:

 {
        {"pad", 2, NULL, 'p'},
        {"root", 1, NULL, 'r'},
        {"pagesize", 1, NULL, 's'},
        {"eraseblock", 1, NULL, 'e'},
        {"output", 1, NULL, 'o'},
        {"help", 0, NULL, 'h'},
        {"verbose", 0, NULL, 'v'},
        {"version", 0, NULL, 'V'},
        {"big-endian", 0, NULL, 'b'},
        {"little-endian", 0, NULL, 'l'},
        {"no-cleanmarkers", 0, NULL, 'n'},
        {"cleanmarkers", 0, NULL, 0},
        {"cleanmarker", 1, NULL, 'c'},
        {"squash", 0, NULL, 'q'},
        {"squash-uids", 0, NULL, 'U'},
        {"squash-perms", 0, NULL, 'P'},
        {"faketime", 0, NULL, 'f'},
        {"devtable", 1, NULL, 'D'},
        {"compression-mode", 1, NULL, 'm'},
        {"disable-compressor", 1, NULL, 'x'},
        {"test-compression", 0, NULL, 't'},
        {"compressor-priority", 1, NULL, 'y'},
        {"incremental", 1, NULL, 'i'},
        {"with-xattr", 0, NULL, 1000 },
        {"with-selinux", 0, NULL, 1001 },
        {"with-posix-acl", 0, NULL, 1002 },
        {NULL, 0, NULL, 0}
}

Definition at line 1405 of file mkfs.jffs2.c.

const char* const memory_exhausted = "memory exhausted" [static]

Definition at line 113 of file mkfs.jffs2.c.

Referenced by xcalloc(), xmalloc(), xrealloc(), and xstrdup().

int out_fd = -1 [static]

Definition at line 103 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), main(), pad(), pad_block_if_less_than(), padblock(), padword(), parse_image(), write_dirent(), write_pipe(), write_regular_file(), write_special_file(), and write_symlink().

int out_ofs = 0 [static]

Definition at line 666 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), full_write(), pad_block_if_less_than(), padblock(), padword(), and write_regular_file().

int pad_fs_size = 0 [static]

Definition at line 668 of file mkfs.jffs2.c.

Referenced by create_target_filesystem(), and main().

int page_size = 4096

Definition at line 679 of file mkfs.jffs2.c.

Referenced by main(), and write_regular_file().

char* revtext = "$Revision: 1.1.1.1 $" [static]

Definition at line 1475 of file mkfs.jffs2.c.

char* rootdir = default_rootdir [static]

Definition at line 106 of file mkfs.jffs2.c.

Referenced by interpret_table_entry(), and main().

int squash_perms = 0 [static]

Definition at line 109 of file mkfs.jffs2.c.

Referenced by add_host_filesystem_entry(), main(), and parse_device_table().

int squash_uids = 0 [static]

Definition at line 108 of file mkfs.jffs2.c.

Referenced by add_host_filesystem_entry(), main(), and parse_device_table().

int target_endian = __BYTE_ORDER

Definition at line 111 of file mkfs.jffs2.c.

Referenced by main().

int verbose = 0 [static]

Definition at line 107 of file mkfs.jffs2.c.


Generated on Fri Nov 28 00:08:41 2008 for elphel by  doxygen 1.5.1