* Fix errors detected by the GCC compiler (pointer conversions and format mismatches). * Worked around a GCC flow analysis issue in base64.c where the compiler is convinced that there is a path through the code where "input" is used but not initialized. * Added EFIAPI to the file system operation routines for sockets to match the API declaration. Note for GCC, the meaning of "l" and "L" are different in printf and sscanf format strings. The lower case "l" indicates a 32-bit value where the capital "L" indicates a 64-bit value. The native (default) integer size may be represented by a size letter of "n". Signed-off-by: lpleahy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13023 6f19259b-4bc3-4df7-8a09-765794883524
104 lines
3.3 KiB
C
104 lines
3.3 KiB
C
/*
|
|
* Copyright (c) 1986, 1993
|
|
* 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
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
* must display the following acknowledgement:
|
|
* This product includes software developed by the University of
|
|
* California, Berkeley and its contributors.
|
|
* 4. Neither the name of the University nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
#if defined(LIBC_SCCS) && !defined(lint)
|
|
static char sccsid[] = "@(#)ns_ntoa.c 8.1 (Berkeley) 6/4/93";
|
|
#endif /* LIBC_SCCS and not lint */
|
|
|
|
#include <sys/param.h>
|
|
#include <netns/ns.h>
|
|
#include <stdio.h>
|
|
|
|
static char *spectHex();
|
|
|
|
char *
|
|
ns_ntoa(
|
|
struct ns_addr addr
|
|
)
|
|
{
|
|
static char obuf[40];
|
|
union { union ns_net net_e; u_long long_e; } net;
|
|
u_short port = htons(addr.x_port);
|
|
register char *cp;
|
|
char *cp2;
|
|
register u_char *up = addr.x_host.c_host;
|
|
u_char *uplim = up + 6;
|
|
|
|
net.net_e = addr.x_net;
|
|
sprintf(obuf, "%Lx", (u_long)ntohl(net.long_e));
|
|
cp = spectHex(obuf);
|
|
cp2 = cp + 1;
|
|
while (*up==0 && up < uplim) up++;
|
|
if (up == uplim) {
|
|
if (port) {
|
|
sprintf(cp, ".0");
|
|
cp += 2;
|
|
}
|
|
} else {
|
|
sprintf(cp, ".%x", *up++);
|
|
while (up < uplim) {
|
|
while (*cp) cp++;
|
|
sprintf(cp, "%02x", *up++);
|
|
}
|
|
cp = spectHex(cp2);
|
|
}
|
|
if (port) {
|
|
sprintf(cp, ".%x", port);
|
|
spectHex(cp + 1);
|
|
}
|
|
return (obuf);
|
|
}
|
|
|
|
static char *
|
|
spectHex(
|
|
char *p0
|
|
)
|
|
{
|
|
int ok = 0;
|
|
int nonzero = 0;
|
|
register char *p = p0;
|
|
for (; *p; p++) switch (*p) {
|
|
|
|
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
|
|
*p += ('A' - 'a');
|
|
/* fall into . . . */
|
|
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
|
|
ok = 1;
|
|
case '1': case '2': case '3': case '4': case '5':
|
|
case '6': case '7': case '8': case '9':
|
|
nonzero = 1;
|
|
}
|
|
if (nonzero && !ok) { *p++ = 'H'; *p = 0; }
|
|
return (p);
|
|
}
|