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
This commit is contained in:
darylm503 2012-02-01 00:17:05 +00:00
parent 79b3ce7e99
commit 4883124668
2 changed files with 129 additions and 104 deletions

View File

@ -1,6 +1,15 @@
/* $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.<BR>
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.
*
@ -29,16 +38,26 @@
* SUCH DAMAGE.
*
* @(#)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 <sys/featuretest.h>
#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.
@ -60,18 +79,11 @@ struct tcphdr {
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;
};
#pragma pack()
#define TCPOPT_EOL 0
#define TCPOPT_NOP 1
@ -95,8 +107,7 @@ struct tcphdr {
#define MAX_TCPOPTLEN 40 /* max # bytes that go in options */
/*
* Default maximum segment size for TCP.
/* Default maximum segment size for TCP.
* This is defined by RFC 1112 Sec 4.2.2.6.
*/
#define TCP_MSS 536
@ -109,23 +120,23 @@ struct tcphdr {
#define TCP_MAXBURST 4 /* maximum segments in a burst */
#endif /* _NETBSD_SOURCE */
/*
* User-settable options (used with setsockopt).
*/
/* 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 */
#endif
#define TCP_KEEPINTVL 5
#define TCP_KEEPCNT 6
#define TCP_KEEPINIT 7
#ifdef notyet
#define TCP_NOOPT 8 /* reserved for FreeBSD compat */
#endif
#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */
#define TCP_CONGCTL 0x20 /* selected congestion control */

View File

@ -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(
EFIAPI
va_Utimes(
const char *path,
const struct timeval *times
...
)
{
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);
}