123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- --- a/Makefile
- +++ b/Makefile
- @@ -12,6 +12,11 @@ else
- LZOLDLIBS = -llzo2
- endif
-
- +ifeq ($(shell uname -o),Cygwin)
- +CPPFLAGS += -I./include/cygwin
- +endif
- +
- +ifneq ($(shell uname -o),Cygwin)
- SUBDIRS = lib ubi-utils mkfs.ubifs
- TESTS = tests
-
- @@ -23,6 +28,10 @@ TARGETS = ftl_format flash_erase nanddum
- rfddump rfdformat \
- serve_image recv_image \
- sumtool #jffs2reader
- +else
- +SUBDIRS =
- +TARGETS = mkfs.jffs2
- +endif
- SCRIPTS = flash_eraseall
-
- SYMLINKS =
- --- /dev/null
- +++ b/include/cygwin/bits-byteswap.h
- @@ -0,0 +1,132 @@
- +/* Macros to swap the order of bytes in integer values.
- + Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
- + This file is part of the GNU C Library.
- +
- + The GNU C 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.1 of the License, or (at your option) any later version.
- +
- + The GNU C 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 the GNU C Library; if not, write to the Free
- + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- + 02111-1307 USA. */
- +
- +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
- +# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
- +#endif
- +
- +#ifndef _BITS_BYTESWAP_H
- +#define _BITS_BYTESWAP_H 1
- +
- +/* Swap bytes in 16 bit value. */
- +#define __bswap_constant_16(x) \
- + ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
- +
- +#ifdef __GNUC__
- +# if __GNUC__ >= 2
- +# define __bswap_16(x) \
- + (__extension__ \
- + ({ register unsigned short int __v, __x = (x); \
- + if (__builtin_constant_p (__x)) \
- + __v = __bswap_constant_16 (__x); \
- + else \
- + __asm__ ("rorw $8, %w0" \
- + : "=r" (__v) \
- + : "0" (__x) \
- + : "cc"); \
- + __v; }))
- +# else
- +/* This is better than nothing. */
- +# define __bswap_16(x) \
- + (__extension__ \
- + ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); }))
- +# endif
- +#else
- +static __inline unsigned short int
- +__bswap_16 (unsigned short int __bsx)
- +{
- + return __bswap_constant_16 (__bsx);
- +}
- +#endif
- +
- +/* Swap bytes in 32 bit value. */
- +#define __bswap_constant_32(x) \
- + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
- + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
- +
- +#ifdef __GNUC__
- +# if __GNUC__ >= 2
- +/* To swap the bytes in a word the i486 processors and up provide the
- + `bswap' opcode. On i386 we have to use three instructions. */
- +# if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__
- +# define __bswap_32(x) \
- + (__extension__ \
- + ({ register unsigned int __v, __x = (x); \
- + if (__builtin_constant_p (__x)) \
- + __v = __bswap_constant_32 (__x); \
- + else \
- + __asm__ ("rorw $8, %w0;" \
- + "rorl $16, %0;" \
- + "rorw $8, %w0" \
- + : "=r" (__v) \
- + : "0" (__x) \
- + : "cc"); \
- + __v; }))
- +# else
- +# define __bswap_32(x) \
- + (__extension__ \
- + ({ register unsigned int __v, __x = (x); \
- + if (__builtin_constant_p (__x)) \
- + __v = __bswap_constant_32 (__x); \
- + else \
- + __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); \
- + __v; }))
- +# endif
- +# else
- +# define __bswap_32(x) \
- + (__extension__ \
- + ({ register unsigned int __x = (x); __bswap_constant_32 (__x); }))
- +# endif
- +#else
- +static __inline unsigned int
- +__bswap_32 (unsigned int __bsx)
- +{
- + return __bswap_constant_32 (__bsx);
- +}
- +#endif
- +
- +
- +#if defined __GNUC__ && __GNUC__ >= 2
- +/* Swap bytes in 64 bit value. */
- +#define __bswap_constant_64(x) \
- + ((((x) & 0xff00000000000000ull) >> 56) \
- + | (((x) & 0x00ff000000000000ull) >> 40) \
- + | (((x) & 0x0000ff0000000000ull) >> 24) \
- + | (((x) & 0x000000ff00000000ull) >> 8) \
- + | (((x) & 0x00000000ff000000ull) << 8) \
- + | (((x) & 0x0000000000ff0000ull) << 24) \
- + | (((x) & 0x000000000000ff00ull) << 40) \
- + | (((x) & 0x00000000000000ffull) << 56))
- +
- +# define __bswap_64(x) \
- + (__extension__ \
- + ({ union { __extension__ unsigned long long int __ll; \
- + unsigned long int __l[2]; } __w, __r; \
- + if (__builtin_constant_p (x)) \
- + __r.__ll = __bswap_constant_64 (x); \
- + else \
- + { \
- + __w.__ll = (x); \
- + __r.__l[0] = __bswap_32 (__w.__l[1]); \
- + __r.__l[1] = __bswap_32 (__w.__l[0]); \
- + } \
- + __r.__ll; }))
- +#endif
- +
- +#endif /* _BITS_BYTESWAP_H */
- --- /dev/null
- +++ b/include/cygwin/byteswap.h
- @@ -0,0 +1,40 @@
- +/* Copyright (C) 1997 Free Software Foundation, Inc.
- + This file is part of the GNU C Library.
- +
- + The GNU C 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.1 of the License, or (at your option) any later version.
- +
- + The GNU C 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 the GNU C Library; if not, write to the Free
- + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- + 02111-1307 USA. */
- +
- +#ifndef _BYTESWAP_H
- +#define _BYTESWAP_H 1
- +
- +/* Get the machine specific, optimized definitions. */
- +#include "bits-byteswap.h"
- +
- +
- +/* The following definitions must all be macros since otherwise some
- + of the possible optimizations are not possible. */
- +
- +/* Return a value with all bytes in the 16 bit argument swapped. */
- +#define bswap_16(x) __bswap_16 (x)
- +
- +/* Return a value with all bytes in the 32 bit argument swapped. */
- +#define bswap_32(x) __bswap_32 (x)
- +
- +#if defined __GNUC__ && __GNUC__ >= 2
- +/* Return a value with all bytes in the 64 bit argument swapped. */
- +# define bswap_64(x) __bswap_64 (x)
- +#endif
- +
- +#endif /* byteswap.h */
- --- /dev/null
- +++ b/include/cygwin/endian.h
- @@ -0,0 +1,26 @@
- +#ifndef _CYGENDIAN_H_
- +#define _CYGENDIAN_H_
- +
- +#ifdef __CYGWIN__
- +
- +#include <sys/param.h>
- +
- +#ifndef __BIG_ENDIAN
- +#define __BIG_ENDIAN 4321
- +#endif
- +
- +#ifndef __LITTLE_ENDIAN
- +#define __LITTLE_ENDIAN 1234
- +#endif
- +
- +#ifndef __BYTE_ORDER
- +#define __BYTE_ORDER __LITTLE_ENDIAN
- +#endif
- +
- +#ifndef BYTE_ORDER
- +#define BYTE_ORDER __LITTLE_ENDIAN
- +#endif
- +
- +#endif /* __CYGWIN__ */
- +
- +#endif /* _CYGENDIAN_H_ */
- --- /dev/null
- +++ b/include/cygwin/ioctl.h
- @@ -0,0 +1,38 @@
- +#ifndef _CYGIOCTL_H_
- +#define _CYGIOCTL_H_
- +
- +#ifdef __CYGWIN__
- +
- +#define _IOC_NRBITS 8
- +#define _IOC_TYPEBITS 8
- +#define _IOC_SIZEBITS 14
- +#define _IOC_DIRBITS 2
- +
- +#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
- +#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
- +#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
- +#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
- +
- +#define _IOC_NRSHIFT 0
- +#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
- +#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
- +#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
- +
- +#define _IOC_NONE 0U
- +#define _IOC_WRITE 1U
- +#define _IOC_READ 2U
- +
- +#define _IOC(dir,type,nr,size) \
- + (((dir) << _IOC_DIRSHIFT) | \
- + ((type) << _IOC_TYPESHIFT) | \
- + ((nr) << _IOC_NRSHIFT) | \
- + ((size) << _IOC_SIZESHIFT))
- +
- +#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
- +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
- +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
- +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
- +
- +#endif /* __CYGWIN__ */
- +
- +#endif /* _CYGIOCTL_H_ */
- --- /dev/null
- +++ b/include/cygwin/pread.c
- @@ -0,0 +1,41 @@
- +#ifdef __CYGWIN__
- +
- +#include <errno.h>
- +
- +ssize_t
- +pread(int fd, void *p, size_t n, off_t off)
- +{
- + off_t ooff;
- + int oerrno;
- +
- + if ((ooff = lseek(fd, off, SEEK_SET)) == -1)
- + return -1;
- +
- + n = read(fd, p, n);
- +
- + oerrno = errno;
- + lseek(fd, ooff, SEEK_SET);
- + errno = oerrno;
- +
- + return n;
- +}
- +
- +ssize_t
- +pwrite(int fd, const void *p, size_t n, off_t off)
- +{
- + off_t ooff;
- + int oerrno;
- +
- + if ((ooff = lseek(fd, off, SEEK_SET)) == -1)
- + return -1;
- +
- + n = write(fd, p, n);
- +
- + oerrno = errno;
- + lseek(fd, ooff, SEEK_SET);
- + errno = oerrno;
- +
- + return n;
- +}
- +
- +#endif /* __CYGWIN__ */
- --- /dev/null
- +++ b/lnconf.sh
- @@ -0,0 +1,53 @@
- +#!/bin/sh
- +#
- +# Generic configure replacement.
- +#
- +# $Id: lnconf.sh,v 1.1 2004/04/05 21:55:59 igor Exp $
- +#
- +# Copies all files from the script directory to the current one.
- +# Intended to replace 'configure' for packages that don't have one, to
- +# allow building outside of the source tree.
- +#
- +# Note: this does not do any fancy things with detecting shells and
- +# supporting other platforms. But it should work on Cygwin.
- +
- +# find out where the script is located
- +tdir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'`
- +test "x$tdir" = "x$0" && tdir=.
- +
- +a_srcdir=`cd $tdir; pwd`
- +a_destdir=`pwd`
- +
- +# sanity checks:
- +# are we in the script directory?
- +test "x$a_srcdir" = "x$a_destdir" && exit 0
- +# is there any chance that this is the script directory?
- +test "x`cd "$a_srcdir" && /bin/ls -id`" = "x`/bin/ls -id`" && exit 0
- +
- +# try to find lndir and use it if it's available
- +LNDIR="`which lndir 2>/dev/null`"
- +if [ "x$LNDIR" = "x" ]; then
- + lndir() {
- + test "x$1" = "x" && return 1
- + # be careful of the current directory
- + DINODE=`find . -maxdepth 0 -ls | sed 's/ .*$//'`
- + case "`pwd`" in
- + "`cd "$1" && pwd`"/*) CUR="-type d -inum $DINODE -prune -o";;
- + esac
- + # duplicate the directory structure
- + (cd "$1" && find . $CUR -type d -mindepth 1 -print) | xargs -tr mkdir -p
- + # copy all symbolic links
- + (cd "$1" && find . $CUR -type l -mindepth 1 -print) | xargs -ri sh -c "ln -s \"\`readlink "$1/{}"\`\" \"{}\""
- + # or simply
- + #(cd "$1" && find . $CUR -type l -mindepth 1 -print) | xargs -ri ln -s "$1"/{} {}
- + # link all files
- + (cd "$1" && find . $CUR -type f -mindepth 1 -print) | xargs -ri ln -s "$1"/{} {}
- + }
- +else
- + lndir() {
- + "$LNDIR" "$@"
- + }
- +fi
- +
- +lndir "$tdir"
- +
- --- a/mkfs.jffs2.c
- +++ b/mkfs.jffs2.c
- @@ -77,6 +77,14 @@
- #include "rbtree.h"
- #include "common.h"
-
- +#ifdef __CYGWIN__
- +#include <cygwin/ioctl.h>
- +#include <cygwin/endian.h>
- +#include <cygwin/pread.c>
- +# define IFTODT(mode) (((mode) & 0170000) >> 12)
- +# define DTTOIF(dirtype) ((dirtype) << 12)
- +#endif /* __CYGWIN__ */
- +
- /* Do not use the weird XPG version of basename */
- #undef basename
-
- @@ -376,7 +384,7 @@ static struct filesystem_entry *recursiv
- the following macros use it if available or use a hacky workaround...
- */
-
- -#ifdef __GNUC__
- +#if defined __GNUC__ && !defined __CYGWIN__
- #define SCANF_PREFIX "a"
- #define SCANF_STRING(s) (&s)
- #define GETCWD_SIZE 0
- @@ -459,6 +467,14 @@ static int interpret_table_entry(struct
- }
- entry = find_filesystem_entry(root, name, mode);
- if (entry && !(count > 0 && (type == 'c' || type == 'b'))) {
- + /* Check the type */
- + if ((mode & S_IFMT) != (entry->sb.st_mode & S_IFMT)) {
- + error_msg ("skipping device_table entry '%s': type mismatch!", name);
- + free(name);
- + free(hostpath);
- + return 1;
- + }
- +
- /* Ok, we just need to fixup the existing entry
- * and we will be all done... */
- entry->sb.st_uid = uid;
- @@ -468,11 +484,21 @@ static int interpret_table_entry(struct
- entry->sb.st_rdev = makedev(major, minor);
- }
- } else {
- + if (type == 'f' || type == 'l') {
- + error_msg ("skipping device_table entry '%s': file does not exist!", name);
- + free(name);
- + free(hostpath);
- + return 1;
- + }
- /* If parent is NULL (happens with device table entries),
- * try and find our parent now) */
- tmp = strdup(name);
- dir = dirname(tmp);
- - parent = find_filesystem_entry(root, dir, S_IFDIR);
- + if (!strcmp(dir, "/")) {
- + parent = root;
- + } else {
- + parent = find_filesystem_entry(root, dir, S_IFDIR);
- + }
- free(tmp);
- if (parent == NULL) {
- errmsg ("skipping device_table entry '%s': no parent directory!", name);
- @@ -486,6 +512,7 @@ static int interpret_table_entry(struct
- add_host_filesystem_entry(name, hostpath, uid, gid, mode, 0, parent);
- break;
- case 'f':
- + case 'l':
- add_host_filesystem_entry(name, hostpath, uid, gid, mode, 0, parent);
- break;
- case 'p':
- --- a/ubi-utils/src/libubi.c
- +++ b/ubi-utils/src/libubi.c
- @@ -32,6 +32,9 @@
- #include <sys/ioctl.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- +#ifdef __CYGWIN__
- +#include <cygwin/ioctl.h>
- +#endif
- #include <libubi.h>
- #include "libubi_int.h"
- #include "common.h"
|