Ticket #8303: 120-cygwin_fixes.patch

File 120-cygwin_fixes.patch, 13.5 KB (added by Brady Zhu <bradyzhu@…>, 6 years ago)
  • Makefile

    a b ifeq ($(WITHOUT_XATTR), 1) 
    77  CPPFLAGS += -DWITHOUT_XATTR 
    88endif 
    99 
     10ifeq ($(shell uname -o),Cygwin) 
     11  CPPFLAGS += -I./include/cygwin 
     12endif 
     13 
     14ifneq ($(shell uname -o),Cygwin) 
    1015SUBDIRS = ubi-utils mkfs.ubifs 
    1116 
    1217TARGETS = ftl_format flash_erase flash_eraseall nanddump doc_loadbios \ 
    TARGETS = ftl_format flash_erase nanddum 
    1722        rfddump rfdformat \ 
    1823        serve_image recv_image \ 
    1924        sumtool #jffs2reader 
     25else 
     26SUBDIRS = 
     27TARGETS = mkfs.jffs2 
     28endif 
    2029 
    2130SYMLINKS = 
    2231 
  • mkfs.ubifs/Makefile

    a b  
    33CPPFLAGS += $(ZLIBCPPFLAGS) $(LZOCPPFLAGS) 
    44 
    55ALL_SOURCES=*.[ch] hashtable/*.[ch] 
     6 
     7ifeq ($(shell uname -o),Cygwin) 
     8  CPPFLAGS += -I../include/cygwin 
     9endif 
    610 
    711TARGETS = mkfs.ubifs 
    812 
  • new file include/cygwin/bits-byteswap.h

    - +  
     1/* Macros to swap the order of bytes in integer values. 
     2   Copyright (C) 1997, 1998, 2000, 2002 Free Software Foundation, Inc. 
     3   This file is part of the GNU C Library. 
     4 
     5   The GNU C Library is free software; you can redistribute it and/or 
     6   modify it under the terms of the GNU Lesser General Public 
     7   License as published by the Free Software Foundation; either 
     8   version 2.1 of the License, or (at your option) any later version. 
     9 
     10   The GNU C Library is distributed in the hope that it will be useful, 
     11   but WITHOUT ANY WARRANTY; without even the implied warranty of 
     12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
     13   Lesser General Public License for more details. 
     14 
     15   You should have received a copy of the GNU Lesser General Public 
     16   License along with the GNU C Library; if not, write to the Free 
     17   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
     18   02111-1307 USA.  */ 
     19 
     20#if !defined _BYTESWAP_H && !defined _NETINET_IN_H 
     21# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." 
     22#endif 
     23 
     24#ifndef _BITS_BYTESWAP_H 
     25#define _BITS_BYTESWAP_H 1 
     26 
     27/* Swap bytes in 16 bit value.  */ 
     28#define __bswap_constant_16(x) \ 
     29     ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) 
     30 
     31#ifdef __GNUC__ 
     32# if __GNUC__ >= 2 
     33#  define __bswap_16(x) \ 
     34     (__extension__                                                           \ 
     35      ({ register unsigned short int __v, __x = (x);                          \ 
     36         if (__builtin_constant_p (__x))                                      \ 
     37           __v = __bswap_constant_16 (__x);                                   \ 
     38         else                                                                 \ 
     39           __asm__ ("rorw $8, %w0"                                            \ 
     40                    : "=r" (__v)                                              \ 
     41                    : "0" (__x)                                               \ 
     42                    : "cc");                                                  \ 
     43         __v; })) 
     44# else 
     45/* This is better than nothing.  */ 
     46#  define __bswap_16(x) \ 
     47     (__extension__                                                           \ 
     48      ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); })) 
     49# endif 
     50#else 
     51static __inline unsigned short int 
     52__bswap_16 (unsigned short int __bsx) 
     53{ 
     54  return __bswap_constant_16 (__bsx); 
     55} 
     56#endif 
     57 
     58/* Swap bytes in 32 bit value.  */ 
     59#define __bswap_constant_32(x) \ 
     60     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) |               \ 
     61      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24)) 
     62 
     63#ifdef __GNUC__ 
     64# if __GNUC__ >= 2 
     65/* To swap the bytes in a word the i486 processors and up provide the 
     66   `bswap' opcode.  On i386 we have to use three instructions.  */ 
     67#  if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__ 
     68#   define __bswap_32(x)                                                      \ 
     69     (__extension__                                                           \ 
     70      ({ register unsigned int __v, __x = (x);                                \ 
     71         if (__builtin_constant_p (__x))                                      \ 
     72           __v = __bswap_constant_32 (__x);                                   \ 
     73         else                                                                 \ 
     74           __asm__ ("rorw $8, %w0;"                                           \ 
     75                    "rorl $16, %0;"                                           \ 
     76                    "rorw $8, %w0"                                            \ 
     77                    : "=r" (__v)                                              \ 
     78                    : "0" (__x)                                               \ 
     79                    : "cc");                                                  \ 
     80         __v; })) 
     81#  else 
     82#   define __bswap_32(x) \ 
     83     (__extension__                                                           \ 
     84      ({ register unsigned int __v, __x = (x);                                \ 
     85         if (__builtin_constant_p (__x))                                      \ 
     86           __v = __bswap_constant_32 (__x);                                   \ 
     87         else                                                                 \ 
     88           __asm__ ("bswap %0" : "=r" (__v) : "0" (__x));                     \ 
     89         __v; })) 
     90#  endif 
     91# else 
     92#  define __bswap_32(x) \ 
     93     (__extension__                                                           \ 
     94      ({ register unsigned int __x = (x); __bswap_constant_32 (__x); })) 
     95# endif 
     96#else 
     97static __inline unsigned int 
     98__bswap_32 (unsigned int __bsx) 
     99{ 
     100  return __bswap_constant_32 (__bsx); 
     101} 
     102#endif 
     103 
     104 
     105#if defined __GNUC__ && __GNUC__ >= 2 
     106/* Swap bytes in 64 bit value.  */ 
     107#define __bswap_constant_64(x) \ 
     108     ((((x) & 0xff00000000000000ull) >> 56)                                   \ 
     109      | (((x) & 0x00ff000000000000ull) >> 40)                                 \ 
     110      | (((x) & 0x0000ff0000000000ull) >> 24)                                 \ 
     111      | (((x) & 0x000000ff00000000ull) >> 8)                                  \ 
     112      | (((x) & 0x00000000ff000000ull) << 8)                                  \ 
     113      | (((x) & 0x0000000000ff0000ull) << 24)                                 \ 
     114      | (((x) & 0x000000000000ff00ull) << 40)                                 \ 
     115      | (((x) & 0x00000000000000ffull) << 56)) 
     116 
     117# define __bswap_64(x) \ 
     118     (__extension__                                                           \ 
     119      ({ union { __extension__ unsigned long long int __ll;                   \ 
     120                 unsigned long int __l[2]; } __w, __r;                        \ 
     121         if (__builtin_constant_p (x))                                        \ 
     122           __r.__ll = __bswap_constant_64 (x);                                \ 
     123         else                                                                 \ 
     124           {                                                                  \ 
     125             __w.__ll = (x);                                                  \ 
     126             __r.__l[0] = __bswap_32 (__w.__l[1]);                            \ 
     127             __r.__l[1] = __bswap_32 (__w.__l[0]);                            \ 
     128           }                                                                  \ 
     129         __r.__ll; })) 
     130#endif 
     131 
     132#endif /* _BITS_BYTESWAP_H */ 
  • new file include/cygwin/byteswap.h

    - +  
     1/* Copyright (C) 1997 Free Software Foundation, Inc. 
     2   This file is part of the GNU C Library. 
     3 
     4   The GNU C Library is free software; you can redistribute it and/or 
     5   modify it under the terms of the GNU Lesser General Public 
     6   License as published by the Free Software Foundation; either 
     7   version 2.1 of the License, or (at your option) any later version. 
     8 
     9   The GNU C Library is distributed in the hope that it will be useful, 
     10   but WITHOUT ANY WARRANTY; without even the implied warranty of 
     11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
     12   Lesser General Public License for more details. 
     13 
     14   You should have received a copy of the GNU Lesser General Public 
     15   License along with the GNU C Library; if not, write to the Free 
     16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
     17   02111-1307 USA.  */ 
     18 
     19#ifndef _BYTESWAP_H 
     20#define _BYTESWAP_H     1 
     21 
     22/* Get the machine specific, optimized definitions.  */ 
     23#include "bits-byteswap.h" 
     24 
     25 
     26/* The following definitions must all be macros since otherwise some 
     27   of the possible optimizations are not possible.  */ 
     28 
     29/* Return a value with all bytes in the 16 bit argument swapped.  */ 
     30#define bswap_16(x) __bswap_16 (x) 
     31 
     32/* Return a value with all bytes in the 32 bit argument swapped.  */ 
     33#define bswap_32(x) __bswap_32 (x) 
     34 
     35#if defined __GNUC__ && __GNUC__ >= 2 
     36/* Return a value with all bytes in the 64 bit argument swapped.  */ 
     37# define bswap_64(x) __bswap_64 (x) 
     38#endif 
     39 
     40#endif /* byteswap.h */ 
  • new file include/cygwin/endian.h

    - +  
     1#ifndef _CYGENDIAN_H_ 
     2#define _CYGENDIAN_H_ 
     3 
     4#ifdef __CYGWIN__ 
     5 
     6#include <sys/param.h> 
     7 
     8#ifndef __BIG_ENDIAN 
     9#define __BIG_ENDIAN 4321 
     10#endif 
     11 
     12#ifndef __LITTLE_ENDIAN 
     13#define __LITTLE_ENDIAN 1234 
     14#endif 
     15 
     16#ifndef __BYTE_ORDER 
     17#define __BYTE_ORDER    __LITTLE_ENDIAN 
     18#endif 
     19 
     20#ifndef BYTE_ORDER 
     21#define BYTE_ORDER      __LITTLE_ENDIAN 
     22#endif 
     23 
     24#endif /* __CYGWIN__ */ 
     25 
     26#endif /* _CYGENDIAN_H_ */ 
  • new file include/cygwin/ioctl.h

    - +  
     1#ifndef _CYGIOCTL_H_ 
     2#define _CYGIOCTL_H_ 
     3 
     4#ifdef __CYGWIN__ 
     5 
     6#define _IOC_NRBITS     8 
     7#define _IOC_TYPEBITS   8 
     8#define _IOC_SIZEBITS   14 
     9#define _IOC_DIRBITS    2 
     10  
     11#define _IOC_NRMASK     ((1 << _IOC_NRBITS)-1) 
     12#define _IOC_TYPEMASK   ((1 << _IOC_TYPEBITS)-1) 
     13#define _IOC_SIZEMASK   ((1 << _IOC_SIZEBITS)-1) 
     14#define _IOC_DIRMASK    ((1 << _IOC_DIRBITS)-1) 
     15  
     16#define _IOC_NRSHIFT    0 
     17#define _IOC_TYPESHIFT  (_IOC_NRSHIFT+_IOC_NRBITS) 
     18#define _IOC_SIZESHIFT  (_IOC_TYPESHIFT+_IOC_TYPEBITS) 
     19#define _IOC_DIRSHIFT   (_IOC_SIZESHIFT+_IOC_SIZEBITS) 
     20  
     21#define _IOC_NONE       0U 
     22#define _IOC_WRITE      1U 
     23#define _IOC_READ       2U 
     24  
     25#define _IOC(dir,type,nr,size) \ 
     26        (((dir)  << _IOC_DIRSHIFT) | \ 
     27        ((type) << _IOC_TYPESHIFT) | \ 
     28        ((nr)   << _IOC_NRSHIFT) | \ 
     29        ((size) << _IOC_SIZESHIFT)) 
     30 
     31#define _IO(type,nr)            _IOC(_IOC_NONE,(type),(nr),0) 
     32#define _IOR(type,nr,size)      _IOC(_IOC_READ,(type),(nr),sizeof(size)) 
     33#define _IOW(type,nr,size)      _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) 
     34#define _IOWR(type,nr,size)     _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) 
     35 
     36#endif /* __CYGWIN__ */ 
     37 
     38#endif /* _CYGIOCTL_H_ */ 
  • new file include/cygwin/pread.c

    - +  
     1#ifdef __CYGWIN__ 
     2 
     3#include <errno.h> 
     4 
     5ssize_t 
     6pread(int fd, void *p, size_t n, off_t off) 
     7{ 
     8        off_t ooff; 
     9        int oerrno; 
     10 
     11        if ((ooff  = lseek(fd, off, SEEK_SET)) == -1) 
     12                return -1; 
     13 
     14        n = read(fd, p, n); 
     15 
     16        oerrno = errno; 
     17        lseek(fd, ooff, SEEK_SET); 
     18        errno = oerrno; 
     19 
     20        return n; 
     21} 
     22 
     23ssize_t 
     24pwrite(int fd, const void *p, size_t n, off_t off) 
     25{ 
     26        off_t ooff; 
     27        int oerrno; 
     28 
     29        if ((ooff  = lseek(fd, off, SEEK_SET)) == -1) 
     30                return -1; 
     31 
     32        n = write(fd, p, n); 
     33 
     34        oerrno = errno; 
     35        lseek(fd, ooff, SEEK_SET); 
     36        errno = oerrno; 
     37 
     38        return n; 
     39} 
     40 
     41#endif /* __CYGWIN__ */ 
  • new file lnconf.sh

    - +  
     1#!/bin/sh 
     2# 
     3# Generic configure replacement. 
     4# 
     5# $Id: lnconf.sh,v 1.1 2004/04/05 21:55:59 igor Exp $  
     6# 
     7# Copies all files from the script directory to the current one. 
     8# Intended to replace 'configure' for packages that don't have one, to 
     9# allow building outside of the source tree. 
     10# 
     11# Note: this does not do any fancy things with detecting shells and 
     12# supporting other platforms.  But it should work on Cygwin. 
     13 
     14# find out where the script is located 
     15tdir=`echo "$0" | sed 's%[\\/][^\\/][^\\/]*$%%'` 
     16test "x$tdir" = "x$0" && tdir=. 
     17 
     18a_srcdir=`cd $tdir; pwd` 
     19a_destdir=`pwd` 
     20 
     21# sanity checks: 
     22# are we in the script directory? 
     23test "x$a_srcdir" = "x$a_destdir" && exit 0 
     24# is there any chance that this is the script directory? 
     25test "x`cd "$a_srcdir" && /bin/ls -id`" = "x`/bin/ls -id`" && exit 0 
     26 
     27# try to find lndir and use it if it's available 
     28LNDIR="`which lndir 2>/dev/null`" 
     29if [ "x$LNDIR" = "x" ]; then 
     30  lndir() { 
     31    test "x$1" = "x" && return 1 
     32    # be careful of the current directory 
     33    DINODE=`find . -maxdepth 0 -ls | sed 's/ .*$//'`  
     34    case "`pwd`" in 
     35      "`cd "$1" && pwd`"/*) CUR="-type d -inum $DINODE -prune -o";; 
     36    esac 
     37    # duplicate the directory structure 
     38    (cd "$1" && find . $CUR -type d -mindepth 1 -print) | xargs -tr mkdir -p 
     39    # copy all symbolic links 
     40    (cd "$1" && find . $CUR -type l -mindepth 1 -print) | xargs -ri sh -c "ln -s \"\`readlink "$1/{}"\`\" \"{}\"" 
     41    # or simply 
     42    #(cd "$1" && find . $CUR -type l -mindepth 1 -print) | xargs -ri ln -s "$1"/{} {} 
     43    # link all files 
     44    (cd "$1" && find . $CUR -type f -mindepth 1 -print) | xargs -ri ln -s "$1"/{} {} 
     45  } 
     46else 
     47  lndir() { 
     48    "$LNDIR" "$@" 
     49  } 
     50fi 
     51 
     52lndir "$tdir" 
     53 
  • mkfs.jffs2.c

    a b  
    7676 
    7777#include "common.h" 
    7878 
     79#ifdef __CYGWIN__ 
     80#include <cygwin/ioctl.h> 
     81#include <cygwin/endian.h> 
     82#include <cygwin/pread.c> 
     83# define IFTODT(mode)          (((mode) & 0170000) >> 12) 
     84# define DTTOIF(dirtype)       ((dirtype) << 12) 
     85#endif /* __CYGWIN__ */ 
     86 
    7987/* Do not use the weird XPG version of basename */ 
    8088#undef basename 
    8189 
    static struct filesystem_entry *recursiv 
    375383   the following macros use it if available or use a hacky workaround... 
    376384 */ 
    377385 
    378 #ifdef __GNUC__ 
     386#if defined __GNUC__ && !defined __CYGWIN__ 
    379387#define SCANF_PREFIX "a" 
    380388#define SCANF_STRING(s) (&s) 
    381389#define GETCWD_SIZE 0 
    static int interpret_table_entry(struct  
    458466        } 
    459467        entry = find_filesystem_entry(root, name, mode); 
    460468        if (entry) { 
     469                /* Check the type */ 
     470                if ((mode & S_IFMT) != (entry->sb.st_mode & S_IFMT)) { 
     471                        error_msg ("skipping device_table entry '%s': type mismatch!", name); 
     472                        free(name); 
     473                        free(hostpath); 
     474                        return 1; 
     475                } 
     476 
    461477                /* Ok, we just need to fixup the existing entry 
    462478                 * and we will be all done... */ 
    463479                entry->sb.st_uid = uid; 
    static int interpret_table_entry(struct  
    467483                        entry->sb.st_rdev = makedev(major, minor); 
    468484                } 
    469485        } else { 
     486                if (type == 'f' || type == 'l') { 
     487                        error_msg ("skipping device_table entry '%s': file does not exist!", name); 
     488                        free(name); 
     489                        free(hostpath); 
     490                        return 1; 
     491                } 
    470492                /* If parent is NULL (happens with device table entries), 
    471493                 * try and find our parent now) */ 
    472494                tmp = strdup(name); 
    473495                dir = dirname(tmp); 
    474                 parent = find_filesystem_entry(root, dir, S_IFDIR); 
     496                if (!strcmp(dir, "/")) { 
     497                        parent = root; 
     498                } else { 
     499                        parent = find_filesystem_entry(root, dir, S_IFDIR); 
     500                } 
    475501                free(tmp); 
    476502                if (parent == NULL) { 
    477503                        errmsg ("skipping device_table entry '%s': no parent directory!", name); 
    static int interpret_table_entry(struct  
    485511                                add_host_filesystem_entry(name, hostpath, uid, gid, mode, 0, parent); 
    486512                                break; 
    487513                        case 'f': 
     514                        case 'l': 
    488515                                add_host_filesystem_entry(name, hostpath, uid, gid, mode, 0, parent); 
    489516                                break; 
    490517                        case 'p': 
  • ubi-utils/src/libubi.c

    a b  
    3030#include <sys/ioctl.h> 
    3131#include <sys/stat.h> 
    3232#include <sys/types.h> 
     33#ifdef __CYGWIN__ 
     34#include <cygwin/ioctl.h> 
     35#endif 
    3336#include <libubi.h> 
    3437#include "libubi_int.h" 
    3538#include "common.h"