亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cramfs_cb.c

?? 在win(2000/2003)下面制作CRAMFS映像文件 專門用于嵌入式Linux開發(fā) 由于網(wǎng)絡(luò)上沒(méi)有類似的軟件 索性自己寫了一個(gè) 經(jīng)過(guò)測(cè)試OK 全部源代碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
#ifndef CRAMFS_CB_C
#define CRAMFS_CB_C
//---------------------------------------------------------
/* Exit codes used by mkfs-type programs */
#define MKFS_OK          0      /* No errors */
#define MKFS_ERROR       8      /* Operational error */
#define MKFS_USAGE       16     /* Usage or syntax error */

/* The kernel only supports PAD_SIZE of 0 and 512. */
#define PAD_SIZE 512

/* The kernel assumes PAGE_CACHE_SIZE as block size. */
#define PAGE_CACHE_SIZE (4096)

/*
 * The longest filename component to allow for in the input directory tree.
 * ext2fs (and many others) allow up to 255 bytes.  A couple of filesystems
 * allow longer (e.g. smbfs 1024), but there isn't much use in supporting
 * >255-byte names in the input directory tree given that such names get
 * truncated to CRAMFS_MAXPATHLEN (252 bytes) when written to cramfs.
 *
 * Old versions of mkcramfs generated corrupted filesystems if any input
 * filenames exceeded CRAMFS_MAXPATHLEN (252 bytes), however old
 * versions of cramfsck seem to have been able to detect the corruption.
 */
#define MAX_INPUT_NAMELEN 255

/*
 * Maximum size fs you can create is roughly 256MB.  (The last file's
 * data must begin within 256MB boundary but can extend beyond that.)
 *
 * Note that if you want it to fit in a ROM then you're limited to what the
 * hardware and kernel can support.
 */
#define MAXFSLEN ((((1 << CRAMFS_OFFSET_WIDTH) - 1) << 2) /* offset */ \
                  + (1 << CRAMFS_SIZE_WIDTH) - 1 /* filesize */ \
                  + (1 << CRAMFS_SIZE_WIDTH) * 4 / PAGE_CACHE_SIZE /* block pointers */ )

static const char *progname = "mkcramfs";
static unsigned int blksize = PAGE_CACHE_SIZE;
static long total_blocks = 0, total_nodes = 1; /* pre-count the root node */
static int image_length = 0;

/*
 * If opt_holes is set, then mkcramfs can create explicit holes in the
 * data, which saves 26 bytes per hole (which is a lot smaller a
 * saving than most most filesystems).
 *
 * Note that kernels up to at least 2.3.39 don't support cramfs holes,
 * which is why this is turned off by default.
 *
 * If opt_verbose is 1, be verbose.  If it is higher, be even more verbose.
 */
static u32 opt_edition = 0;
static int opt_errors = 0;
static int opt_holes = 0;
static int opt_pad = 0;
static int opt_verbose = 0;
static char *opt_image = NULL;
static char *opt_name = NULL;

static int warn_dev, warn_gid, warn_namelen, warn_skip, warn_size, warn_uid;
//---------------------------------------------------------
/* In-core version of inode / directory entry. */
struct entry {
        /* stats */
        unsigned char *name;
        unsigned int mode, size, uid, gid;

        /* these are only used for non-empty files */
        char *path;             /* always null except non-empty files */
        int fd;                 /* temporarily open files while mmapped */

        HANDLE fh;      /*append by mordecay, for file mmap in winNT*/
        HANDLE fm;      /*append by mordecay, for file mmap in winNT*/

        /* FS data */
        void *uncompressed;
        /* points to other identical file */
        struct entry *same;
        unsigned int offset;            /* pointer to compressed data in archive */
        unsigned int dir_offset;        /* Where in the archive is the directory entry? */

        /* organization */
        struct entry *child; /* null for non-directories and empty directories */
        struct entry *next;
};
//---------------------------------------------------------
/* Input status of 0 to print help and exit without an error. */
static void usage(int status)
{
        /*
        FILE *stream = status ? stderr : stdout;

        fprintf(stream, "usage: %s [-h] [-e edition] [-i file] [-n name] dirname outfile\n"
                " -h         print this help\n"
                " -E         make all warnings errors (non-zero exit status)\n"
                " -e edition set edition number (part of fsid)\n"
                " -i file    insert a file image into the filesystem (requires >= 2.4.0)\n"
                " -n name    set name of cramfs filesystem\n"
                " -p         pad by %d bytes for boot code\n"
                " -s         sort directory entries (old option, ignored)\n"
                " -v         be more verbose\n"
                " -z         make explicit holes (requires >= 2.3.39)\n"
                " dirname    root of the directory tree to be compressed\n"
                " outfile    output file\n", progname, PAD_SIZE);

        */

        exit(status);
}
//---------------------------------------------------------
static void die(int status, int syserr, const char *fmt, ...)
{
        va_list arg_ptr;
        char stext[512];

        va_start(arg_ptr, fmt);
        vsprintf(stext, fmt, arg_ptr);
        va_end(arg_ptr);

        ShowMessage(stext);

        exit(status);
}
//---------------------------------------------------------
static void map_entry(struct entry *entry)
{
        /*
        if (entry->path) {
                entry->fd = open(entry->path, O_RDONLY);
                if (entry->fd < 0) {
                        die(MKFS_ERROR, 1, "open failed: %s", entry->path);
                }
                entry->uncompressed = mmap(NULL, entry->size, PROT_READ, MAP_PRIVATE, entry->fd, 0);
                if (entry->uncompressed == MAP_FAILED) {
                        die(MKFS_ERROR, 1, "mmap failed: %s", entry->path);
                }
        }
        */

        if(entry->path)
        {
                DWORD f_size;

                DWORD Access = GENERIC_READ;
                DWORD AShare = FILE_SHARE_READ;
                DWORD Create = OPEN_EXISTING;
                DWORD Attrib = FILE_FLAG_SEQUENTIAL_SCAN;

                entry->fh = CreateFile(
                        entry->path, Access, AShare, 0, Create, Attrib, 0);

                if(entry->fh == INVALID_HANDLE_VALUE)
                {
                        die(MKFS_ERROR, 1, "open failed: %s", entry->path);
                }

                f_size = SetFilePointer(entry->fh, 0, 0, FILE_END);

                         SetFilePointer(entry->fh, 0, 0, FILE_BEGIN);

                entry->fd = (int)entry->fh;

                entry->fm = CreateFileMapping(
                        entry->fh, NULL, PAGE_READONLY, 0, f_size, NULL);

                if(entry->fm == INVALID_HANDLE_VALUE)
                {
                        die(MKFS_ERROR, 1, "fmap failed: %s", entry->path);
                }

                entry->uncompressed = MapViewOfFile(
                        entry->fm, FILE_MAP_READ, 0, 0, f_size);

                if(entry->uncompressed == NULL)
                {
                        die(MKFS_ERROR, 1, "mapv failed: %s", entry->path);
                }
        }
}
//---------------------------------------------------------
static void unmap_entry(struct entry *entry)
{
        /*
        if (entry->path) {
                if (munmap(entry->uncompressed, entry->size) < 0) {
                        die(MKFS_ERROR, 1, "munmap failed: %s", entry->path);
                }
                close(entry->fd);
        }
        */

        if(entry->path)
        {
                UnmapViewOfFile(entry->uncompressed);

                CloseHandle(entry->fm);
                CloseHandle(entry->fh);

                entry->fm = INVALID_HANDLE_VALUE;
                entry->fh = INVALID_HANDLE_VALUE;
        }
}
//---------------------------------------------------------
static int find_identical_file(struct entry *orig, struct entry *newfile)
{
        if (orig == newfile)
                return 1;
        if (!orig)
                return 0;
        if (orig->size == newfile->size && (orig->path || orig->uncompressed))
        {
                map_entry(orig);
                map_entry(newfile);
                if (!memcmp(orig->uncompressed, newfile->uncompressed, orig->size))
                {
                        newfile->same = orig;
                        unmap_entry(newfile);
                        unmap_entry(orig);
                        return 1;
                }
                unmap_entry(newfile);
                unmap_entry(orig);
        }
        return (find_identical_file(orig->child, newfile) ||
                find_identical_file(orig->next, newfile));
}
//---------------------------------------------------------
static void eliminate_doubles(struct entry *root, struct entry *orig) {
        if (orig) {
                if (orig->size && (orig->path || orig->uncompressed))
                        find_identical_file(root, orig);
                eliminate_doubles(root, orig->child);
                eliminate_doubles(root, orig->next);
        }
}
//---------------------------------------------------------
/*
 * We define our own sorting function instead of using alphasort which
 * uses strcoll and changes ordering based on locale information.
 */
struct dirent
{
        int d_ino;
        int d_off;

        short           d_reclen;
        unsigned char   d_type;
        char            d_name[256];

} g_dirent_array[65536];

static int cramsort(const void *a, const void *b)
{
        return strcmp ((*(const struct dirent **) a)->d_name,
                       (*(const struct dirent **) b)->d_name);
}

static int scandir(const char *path,
        struct dirent ***name_list,
        int (*select)(const void *),
        int (*compar)(const void *, const void *))
{
        int i = 1;

        TSearchRec search_rec;
        AnsiString search_str;

        search_str.sprintf("%s\\*.*",path);

        if(FindFirst(search_str, faAnyFile, search_rec) == 0)
        {
                (*name_list) = (struct dirent **)
                        malloc(sizeof(long[65536]));

                (*name_list)[0] = g_dirent_array;

                StrPLCopy(g_dirent_array->d_name,
                        search_rec.Name, 255);

                while(0 == FindNext(search_rec))
                {
                    (*name_list)[i] = g_dirent_array + i;

                    StrPLCopy(g_dirent_array[i].d_name,
                            search_rec.Name, 255);

                    if((i ++) >= 65535)
                        break;
                };

                FindClose(search_rec);

                qsort((*name_list), i, sizeof(long), compar);

                return(i);
        }

        return(-1);
}
//---------------------------------------------------------
struct stat
{
        DWORD st_dev;
        DWORD st_ino;

        DWORD st_mode;
        DWORD st_nlink;

        DWORD st_uid;
        DWORD st_gid;

        DWORD st_rdev;
        DWORD st_size;

        DWORD st_blksize;
        DWORD st_blocks;

        DWORD  st_atime;
        DWORD  st_mtime;
        DWORD  st_ctime;
};
//---------------------------------------------------------
#define S_IFMT  0170000
#define S_IFDIR 0040000
#define S_IFREG 0100000

#define S_ISDIR(x) (((x) & S_IFDIR) == S_IFDIR)
#define S_ISREG(x) (((x) & S_IFREG) == S_IFREG)
//---------------------------------------------------------
static int lstat(const char *file_name, struct stat *buf)
{
        memset(buf, 0, sizeof(stat));

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情免费视频| 在线免费亚洲电影| 一区二区三区日韩| 精品噜噜噜噜久久久久久久久试看| 成人免费看的视频| 麻豆国产一区二区| 一区二区三区不卡视频在线观看| 精品久久久久99| 欧美日本一区二区| 97精品久久久久中文字幕| 国产专区欧美精品| 日韩不卡一区二区| 一区二区三区四区在线免费观看 | 欧美一区二区三区日韩| 成人短视频下载 | 成人99免费视频| 老汉av免费一区二区三区| 亚洲资源中文字幕| 国产精品第四页| 欧美极品aⅴ影院| 精品国产免费久久| 亚洲图片一区二区| 久久久久久亚洲综合影院红桃| 欧美日韩免费在线视频| 91在线视频播放地址| 豆国产96在线|亚洲| 精品一区二区精品| 蜜臀av性久久久久蜜臀aⅴ| 亚洲国产精品人人做人人爽| 亚洲人精品午夜| 亚洲欧美自拍偷拍色图| 中文字幕精品一区| 国产色91在线| 国产日韩欧美a| 久久久精品天堂| 久久综合999| 久久夜色精品一区| 久久久久国产精品人| 精品久久久久久无| 久久精品亚洲精品国产欧美| 免费看日韩精品| 午夜影视日本亚洲欧洲精品| 亚洲电影第三页| 日韩中文字幕一区二区三区| 亚洲一区精品在线| 亚洲成av人片观看| 日韩国产在线一| 日本欧美大码aⅴ在线播放| 免费一区二区视频| 国内成人免费视频| 国产91色综合久久免费分享| 成人自拍视频在线| 色综合久久综合网欧美综合网| 91网站视频在线观看| 在线观看国产91| 欧美日韩aaaaaa| 日韩一级片网址| 久久人人爽爽爽人久久久| 国产日韩欧美电影| 亚洲精选免费视频| 午夜激情综合网| 国产一区二区三区四区在线观看| 国产精品伊人色| caoporm超碰国产精品| 亚洲精品中文字幕在线观看| 一区二区三区在线视频免费观看| 亚洲一二三四在线| 久久aⅴ国产欧美74aaa| 风间由美一区二区av101| 91久久香蕉国产日韩欧美9色| 9191精品国产综合久久久久久| 欧美一区二区三区白人| 日本精品一区二区三区四区的功能| 欧美日韩激情在线| 91精品国产乱| 亚洲精品在线观| **性色生活片久久毛片| 亚洲成人自拍网| 国内外精品视频| 91在线观看视频| 91精品国产福利| 国产精品欧美极品| 婷婷成人激情在线网| 国产盗摄一区二区| 欧美日本精品一区二区三区| 久久久久97国产精华液好用吗| 亚洲品质自拍视频| 激情亚洲综合在线| 欧美艳星brazzers| 久久久www成人免费无遮挡大片| 一区二区三区日韩精品| 国产乱人伦偷精品视频免下载| 欧洲色大大久久| 国产欧美一二三区| 全部av―极品视觉盛宴亚洲| av亚洲产国偷v产偷v自拍| 日韩亚洲欧美综合| 一区二区三区四区蜜桃| 国产·精品毛片| 在线综合视频播放| 亚洲黄色性网站| 成人的网站免费观看| 欧美sm美女调教| 亚洲3atv精品一区二区三区| 2024国产精品| 日韩av电影一区| 欧美做爰猛烈大尺度电影无法无天| 久久这里只精品最新地址| 亚洲444eee在线观看| 色激情天天射综合网| 亚洲国产成人在线| 国产在线播放一区三区四| 欧美另类z0zxhd电影| 亚洲日本丝袜连裤袜办公室| 国产一区二区三区精品视频| 日韩一区二区不卡| 丝袜诱惑亚洲看片| 欧美视频在线一区二区三区| 最好看的中文字幕久久| 成人免费看视频| 欧美激情一区二区三区蜜桃视频 | 亚洲视频资源在线| 丰满白嫩尤物一区二区| 久久久国产午夜精品| 裸体歌舞表演一区二区| 欧美一级久久久久久久大片| 欧美视频在线一区二区三区| 亚洲视频狠狠干| 91亚洲精品久久久蜜桃| 亚洲丝袜制服诱惑| 91小视频免费看| 综合av第一页| 一本大道久久a久久综合| 自拍偷拍国产精品| 91福利国产精品| 亚洲精品伦理在线| 欧亚洲嫩模精品一区三区| 夜夜精品浪潮av一区二区三区| 在线精品亚洲一区二区不卡| 夜夜嗨av一区二区三区网页| 欧美无人高清视频在线观看| 亚洲一线二线三线久久久| 欧美在线一区二区三区| 亚洲成av人影院| 91精品国产手机| 久久国内精品视频| 久久久不卡影院| 99精品久久久久久| 亚洲国产一区视频| 日韩一二三区视频| 国产一区二区三区日韩| 国产日产欧美一区二区视频| 成人一区在线看| 亚洲美女视频一区| 欧美精品三级在线观看| 久久电影网站中文字幕 | 国产精品免费丝袜| 色综合天天视频在线观看 | 一区二区成人在线观看| 欧美另类久久久品| 国产麻豆视频精品| 亚洲欧美日韩在线播放| 欧美日韩1区2区| 国产在线精品免费| 日韩毛片视频在线看| 欧美女孩性生活视频| 国产精品99久久久久久久vr| 国产精品久久久久精k8 | 久久国产剧场电影| 欧美极品xxx| 在线一区二区三区做爰视频网站| 亚洲国产va精品久久久不卡综合 | 亚洲精选免费视频| 日韩亚洲欧美一区二区三区| 成人网在线免费视频| 亚洲小说欧美激情另类| 久久久亚洲欧洲日产国码αv| 91色视频在线| 免费观看一级欧美片| 国产精品久久久久9999吃药| 欧美精品丝袜久久久中文字幕| 懂色av一区二区三区免费观看| 亚洲国产中文字幕在线视频综合| 久久久精品人体av艺术| 欧美唯美清纯偷拍| 福利一区二区在线| 秋霞午夜av一区二区三区| 成人美女视频在线看| 亚洲一区视频在线观看视频| 久久亚洲精精品中文字幕早川悠里 | 极品少妇一区二区| 亚洲综合一区二区三区| 久久久夜色精品亚洲| 欧美美女激情18p| 99精品一区二区三区| 美国毛片一区二区| 亚洲乱码中文字幕| 国产精品视频一二| 精品奇米国产一区二区三区| 欧美色精品在线视频|