From: darylm503 Date: Wed, 1 Feb 2012 00:17:05 +0000 (+0000) Subject: StdLib: Fix compiler compatibility issues: X-Git-Tag: edk2-stable201903~13667 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=4883124668db0f3c7e3e85537ed36fbd7f9bb508 StdLib: Fix compiler compatibility issues: tcp.h: Fix packed structure syntax. cdefs.h is not included so the existing __packed attribute was not properly expanded. Non-GCC compilers were also not handled correctly. Changing to the pack(n) pragma is compatible between all supported compilers. SysCalls.c: The utimes() function has a fixed number of arguments and calls a function that takes a va_list argument. GCC will not allow the va_start, etc., macros to be used in a function with a fixed number of arguments, even though that is valid C. The workaround was to create a worker function for utimes() that takes a variable number of arguments. The worker function then uses the va_* macros. Signed-off-by: darylm503 Reviewed-by: leegrosenbaum git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12977 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/StdLib/Include/netinet/tcp.h b/StdLib/Include/netinet/tcp.h index 8bb8f61ec9..31948a6a70 100644 --- a/StdLib/Include/netinet/tcp.h +++ b/StdLib/Include/netinet/tcp.h @@ -1,8 +1,17 @@ -/* $NetBSD: tcp.h,v 1.28 2007/12/25 18:33:47 perry Exp $ */ +/** @file + Declarations for TCP. + + Copyright (c) 2012, Intel Corporation. All rights reserved.
+ This program and the accompanying materials are licensed and made available under + the terms and conditions of the BSD License that accompanies this distribution. + The full text of the license may be found at + http://opensource.org/licenses/bsd-license. + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -/* * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,105 +37,107 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)tcp.h 8.1 (Berkeley) 6/10/93 + * @(#)tcp.h 8.1 (Berkeley) 6/10/93 + NetBSD: tcp.h,v 1.28 2007/12/25 18:33:47 perry Exp */ - #ifndef _NETINET_TCP_H_ #define _NETINET_TCP_H_ #include -#if defined(_NETBSD_SOURCE) - typedef u_int32_t tcp_seq; + +/* Flag definitions for tcphdr.th_flags */ +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PUSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 +#define TH_ECE 0x40 +#define TH_CWR 0x80 + +#pragma pack(1) /* * TCP header. * Per RFC 793, September, 1981. * Updated by RFC 3168, September, 2001. */ struct tcphdr { - u_int16_t th_sport; /* source port */ - u_int16_t th_dport; /* destination port */ - tcp_seq th_seq; /* sequence number */ - tcp_seq th_ack; /* acknowledgement number */ + u_int16_t th_sport; /* source port */ + u_int16_t th_dport; /* destination port */ + tcp_seq th_seq; /* sequence number */ + tcp_seq th_ack; /* acknowledgement number */ #if BYTE_ORDER == LITTLE_ENDIAN - /*LINTED non-portable bitfields*/ - u_int8_t th_x2:4, /* (unused) */ - th_off:4; /* data offset */ + /*LINTED non-portable bitfields*/ + u_int8_t th_x2:4, /* (unused) */ + th_off:4; /* data offset */ #endif #if BYTE_ORDER == BIG_ENDIAN - /*LINTED non-portable bitfields*/ - u_int8_t th_off:4, /* data offset */ - th_x2:4; /* (unused) */ + /*LINTED non-portable bitfields*/ + u_int8_t th_off:4, /* data offset */ + th_x2:4; /* (unused) */ #endif - u_int8_t th_flags; -#define TH_FIN 0x01 -#define TH_SYN 0x02 -#define TH_RST 0x04 -#define TH_PUSH 0x08 -#define TH_ACK 0x10 -#define TH_URG 0x20 -#define TH_ECE 0x40 -#define TH_CWR 0x80 - u_int16_t th_win; /* window */ - u_int16_t th_sum; /* checksum */ - u_int16_t th_urp; /* urgent pointer */ -} __packed; - -#define TCPOPT_EOL 0 -#define TCPOPT_NOP 1 -#define TCPOPT_MAXSEG 2 -#define TCPOLEN_MAXSEG 4 -#define TCPOPT_WINDOW 3 -#define TCPOLEN_WINDOW 3 -#define TCPOPT_SACK_PERMITTED 4 /* Experimental */ -#define TCPOLEN_SACK_PERMITTED 2 -#define TCPOPT_SACK 5 /* Experimental */ -#define TCPOPT_TIMESTAMP 8 -#define TCPOLEN_TIMESTAMP 10 -#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ - -#define TCPOPT_TSTAMP_HDR \ + u_int8_t th_flags; + u_int16_t th_win; /* window */ + u_int16_t th_sum; /* checksum */ + u_int16_t th_urp; /* urgent pointer */ +}; +#pragma pack() + +#define TCPOPT_EOL 0 +#define TCPOPT_NOP 1 +#define TCPOPT_MAXSEG 2 +#define TCPOLEN_MAXSEG 4 +#define TCPOPT_WINDOW 3 +#define TCPOLEN_WINDOW 3 +#define TCPOPT_SACK_PERMITTED 4 /* Experimental */ +#define TCPOLEN_SACK_PERMITTED 2 +#define TCPOPT_SACK 5 /* Experimental */ +#define TCPOPT_TIMESTAMP 8 +#define TCPOLEN_TIMESTAMP 10 +#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ + +#define TCPOPT_TSTAMP_HDR \ (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) -#define TCPOPT_SIGNATURE 19 /* Keyed MD5: RFC 2385 */ -#define TCPOLEN_SIGNATURE 18 -#define TCPOLEN_SIGLEN (TCPOLEN_SIGNATURE+2) /* padding */ +#define TCPOPT_SIGNATURE 19 /* Keyed MD5: RFC 2385 */ +#define TCPOLEN_SIGNATURE 18 +#define TCPOLEN_SIGLEN (TCPOLEN_SIGNATURE+2) /* padding */ -#define MAX_TCPOPTLEN 40 /* max # bytes that go in options */ +#define MAX_TCPOPTLEN 40 /* max # bytes that go in options */ -/* - * Default maximum segment size for TCP. - * This is defined by RFC 1112 Sec 4.2.2.6. +/* Default maximum segment size for TCP. + * This is defined by RFC 1112 Sec 4.2.2.6. */ -#define TCP_MSS 536 +#define TCP_MSS 536 -#define TCP_MINMSS 216 +#define TCP_MINMSS 216 -#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ +#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ -#define TCP_MAX_WINSHIFT 14 /* maximum window shift */ +#define TCP_MAX_WINSHIFT 14 /* maximum window shift */ -#define TCP_MAXBURST 4 /* maximum segments in a burst */ +#define TCP_MAXBURST 4 /* maximum segments in a burst */ -#endif /* _NETBSD_SOURCE */ +/* User-settable options (used with setsockopt). */ +#define TCP_NODELAY 1 /* don't delay send to coalesce packets */ +#define TCP_MAXSEG 2 /* set maximum segment size */ +#define TCP_KEEPIDLE 3 -/* - * User-settable options (used with setsockopt). - */ -#define TCP_NODELAY 1 /* don't delay send to coalesce packets */ -#define TCP_MAXSEG 2 /* set maximum segment size */ -#define TCP_KEEPIDLE 3 #ifdef notyet -#define TCP_NOPUSH 4 /* reserved for FreeBSD compat */ +#define TCP_NOPUSH 4 /* reserved for FreeBSD compat */ #endif -#define TCP_KEEPINTVL 5 -#define TCP_KEEPCNT 6 -#define TCP_KEEPINIT 7 + +#define TCP_KEEPINTVL 5 +#define TCP_KEEPCNT 6 +#define TCP_KEEPINIT 7 + #ifdef notyet -#define TCP_NOOPT 8 /* reserved for FreeBSD compat */ +#define TCP_NOOPT 8 /* reserved for FreeBSD compat */ #endif -#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */ -#define TCP_CONGCTL 0x20 /* selected congestion control */ + +#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */ +#define TCP_CONGCTL 0x20 /* selected congestion control */ #endif /* !_NETINET_TCP_H_ */ diff --git a/StdLib/LibC/Uefi/SysCalls.c b/StdLib/LibC/Uefi/SysCalls.c index 90d7277f86..ebae38f3fb 100644 --- a/StdLib/LibC/Uefi/SysCalls.c +++ b/StdLib/LibC/Uefi/SysCalls.c @@ -190,11 +190,11 @@ _closeX (int fd, int NewState) if(Fp->RefCount == 1) { // There should be no other users if(! IsDupFd(fd)) { // Only do the close if no one else is using the FileHandle - if(Fp->f_iflags & FIF_DELCLOSE) { - /* Handle files marked "Delete on Close". */ - if(Fp->f_ops->fo_delete != NULL) { - retval = Fp->f_ops->fo_delete(Fp); - } + if(Fp->f_iflags & FIF_DELCLOSE) { + /* Handle files marked "Delete on Close". */ + if(Fp->f_ops->fo_delete != NULL) { + retval = Fp->f_ops->fo_delete(Fp); + } } else { retval = Fp->f_ops->fo_close( Fp); @@ -875,7 +875,7 @@ rmdir( retval = filp->f_ops->fo_rmdir(filp); filp->f_iflags = 0; // Close this FD filp->RefCount = 0; // No one using this FD - } + } return retval; } @@ -990,8 +990,8 @@ ioctl( } else { /* All other requests. */ - retval = filp->f_ops->fo_ioctl(filp, request, argp); - } + retval = filp->f_ops->fo_ioctl(filp, request, argp); + } } else { errno = EBADF; @@ -1195,25 +1195,25 @@ chdir (const char *path) /* Old Shell does not support Set Current Dir. */ if(gEfiShellProtocol != NULL) { - Cwd = ShellGetCurrentDir(NULL); - if (Cwd != NULL) { - /* We have shell support */ - UnicodePath = AllocatePool(((AsciiStrLen (path) + 1) * sizeof (CHAR16))); - if (UnicodePath == NULL) { - errno = ENOMEM; - return -1; - } - AsciiStrToUnicodeStr(path, UnicodePath); - Status = gEfiShellProtocol->SetCurDir(NULL, UnicodePath); - FreePool(UnicodePath); - if (EFI_ERROR(Status)) { + Cwd = ShellGetCurrentDir(NULL); + if (Cwd != NULL) { + /* We have shell support */ + UnicodePath = AllocatePool(((AsciiStrLen (path) + 1) * sizeof (CHAR16))); + if (UnicodePath == NULL) { + errno = ENOMEM; + return -1; + } + AsciiStrToUnicodeStr(path, UnicodePath); + Status = gEfiShellProtocol->SetCurDir(NULL, UnicodePath); + FreePool(UnicodePath); + if (EFI_ERROR(Status)) { errno = ENOENT; - return -1; - } else { - return 0; + return -1; + } else { + return 0; + } } } - } /* Add here for non-shell */ errno = EPERM; return -1; @@ -1229,17 +1229,16 @@ pid_t getpgrp(void) return ((pid_t)(UINTN)(gImageHandle)); } -/** Set file access and modification times. - - @param[in] path - @param[in] times - - @return -**/ +/* Internal worker function for utimes. + This works around an error produced by GCC when the va_* macros + are used within a function with a fixed number of arguments. +*/ +static int -utimes( - const char *path, - const struct timeval *times +EFIAPI +va_Utimes( + const char *path, + ... ) { struct __filedes *filp; @@ -1256,6 +1255,21 @@ utimes( } va_end(ap); return retval; +} + +/** Set file access and modification times. + @param[in] path + @param[in] times + + @return +**/ +int +utimes( + const char *path, + const struct timeval *times + ) +{ + return va_Utimes(path, times); }