- (djm) Support in bsd-snprintf.c for long long conversions from
Ben Lindstrom <mouring@pconline.com> - (djm) Cleanup NeXT support from Ben Lindstrom <mouring@pconline.com>
This commit is contained in:
parent
bea034a5bf
commit
3dfb0dd7fd
|
@ -38,6 +38,10 @@
|
||||||
* missing. Some systems only have snprintf() but not vsnprintf(), so
|
* missing. Some systems only have snprintf() but not vsnprintf(), so
|
||||||
* the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
|
* the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
|
||||||
*
|
*
|
||||||
|
* Ben Lindstrom <mouring@pconline.com> 09/27/00 for OpenSSH
|
||||||
|
* Welcome to the world of %lld and %qd support. With other
|
||||||
|
* long long support. This is needed for sftp-server to work
|
||||||
|
* right.
|
||||||
**************************************************************/
|
**************************************************************/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -111,9 +115,10 @@ static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
|
||||||
#define DP_F_UNSIGNED (1 << 6)
|
#define DP_F_UNSIGNED (1 << 6)
|
||||||
|
|
||||||
/* Conversion Flags */
|
/* Conversion Flags */
|
||||||
#define DP_C_SHORT 1
|
#define DP_C_SHORT 1
|
||||||
#define DP_C_LONG 2
|
#define DP_C_LONG 2
|
||||||
#define DP_C_LDOUBLE 3
|
#define DP_C_LDOUBLE 3
|
||||||
|
#define DP_C_LONG_LONG 4
|
||||||
|
|
||||||
#define char_to_int(p) (p - '0')
|
#define char_to_int(p) (p - '0')
|
||||||
#ifndef MAX
|
#ifndef MAX
|
||||||
|
@ -222,7 +227,6 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
state = DP_S_MOD;
|
state = DP_S_MOD;
|
||||||
break;
|
break;
|
||||||
case DP_S_MOD:
|
case DP_S_MOD:
|
||||||
/* Currently, we don't support Long Long, bummer */
|
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
case 'h':
|
case 'h':
|
||||||
|
@ -232,7 +236,15 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
case 'l':
|
case 'l':
|
||||||
cflags = DP_C_LONG;
|
cflags = DP_C_LONG;
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
|
if (ch == 'l') {
|
||||||
|
cflags = DP_C_LONG_LONG;
|
||||||
|
ch = *format++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'q':
|
||||||
|
cflags = DP_C_LONG_LONG;
|
||||||
|
ch = *format++;
|
||||||
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
cflags = DP_C_LDOUBLE;
|
cflags = DP_C_LDOUBLE;
|
||||||
ch = *format++;
|
ch = *format++;
|
||||||
|
@ -251,6 +263,8 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
value = va_arg (args, short int);
|
value = va_arg (args, short int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = va_arg (args, long int);
|
value = va_arg (args, long int);
|
||||||
|
else if (cflags == DP_C_LONG_LONG)
|
||||||
|
value = va_arg (args, long long);
|
||||||
else
|
else
|
||||||
value = va_arg (args, int);
|
value = va_arg (args, int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
||||||
|
@ -261,6 +275,8 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
value = va_arg (args, unsigned short int);
|
value = va_arg (args, unsigned short int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = va_arg (args, unsigned long int);
|
value = va_arg (args, unsigned long int);
|
||||||
|
else if (cflags == DP_C_LONG_LONG)
|
||||||
|
value = va_arg (args, unsigned long long);
|
||||||
else
|
else
|
||||||
value = va_arg (args, unsigned int);
|
value = va_arg (args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
|
fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
|
||||||
|
@ -271,6 +287,8 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
value = va_arg (args, unsigned short int);
|
value = va_arg (args, unsigned short int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = va_arg (args, unsigned long int);
|
value = va_arg (args, unsigned long int);
|
||||||
|
else if (cflags == DP_C_LONG_LONG)
|
||||||
|
value = va_arg (args, unsigned long long);
|
||||||
else
|
else
|
||||||
value = va_arg (args, unsigned int);
|
value = va_arg (args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
|
||||||
|
@ -283,6 +301,8 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
value = va_arg (args, unsigned short int);
|
value = va_arg (args, unsigned short int);
|
||||||
else if (cflags == DP_C_LONG)
|
else if (cflags == DP_C_LONG)
|
||||||
value = va_arg (args, unsigned long int);
|
value = va_arg (args, unsigned long int);
|
||||||
|
else if (cflags == DP_C_LONG_LONG)
|
||||||
|
value = va_arg (args, unsigned long long);
|
||||||
else
|
else
|
||||||
value = va_arg (args, unsigned int);
|
value = va_arg (args, unsigned int);
|
||||||
fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
|
fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
|
||||||
|
@ -337,6 +357,12 @@ static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
|
||||||
num = va_arg (args, long int *);
|
num = va_arg (args, long int *);
|
||||||
*num = currlen;
|
*num = currlen;
|
||||||
}
|
}
|
||||||
|
else if (cflags == DP_C_LONG_LONG)
|
||||||
|
{
|
||||||
|
long long *num;
|
||||||
|
num = va_arg (args, long long *);
|
||||||
|
*num = currlen;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int *num;
|
int *num;
|
||||||
|
@ -747,9 +773,11 @@ int main (void)
|
||||||
"%+22.33d",
|
"%+22.33d",
|
||||||
"%01.3d",
|
"%01.3d",
|
||||||
"%4d",
|
"%4d",
|
||||||
|
"%lld",
|
||||||
|
"%qd",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
|
long long int_nums[] = { -1, 134, 91340, 341, 0203, 0, 9999999 };
|
||||||
int x, y;
|
int x, y;
|
||||||
int fail = 0;
|
int fail = 0;
|
||||||
int num = 0;
|
int num = 0;
|
||||||
|
|
59
next-posix.c
59
next-posix.c
|
@ -1,3 +1,25 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||||
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
|
|
||||||
#ifdef HAVE_NEXT
|
#ifdef HAVE_NEXT
|
||||||
|
@ -8,46 +30,32 @@
|
||||||
pid_t
|
pid_t
|
||||||
posix_wait(int *status)
|
posix_wait(int *status)
|
||||||
{
|
{
|
||||||
#undef wait /* Use NeXT's wait() function */
|
|
||||||
union wait statusp;
|
union wait statusp;
|
||||||
pid_t wait_pid;
|
pid_t wait_pid;
|
||||||
|
|
||||||
|
#undef wait /* Use NeXT's wait() function */
|
||||||
wait_pid = wait(&statusp);
|
wait_pid = wait(&statusp);
|
||||||
status = (int *) statusp.w_status;
|
status = (int *) statusp.w_status;
|
||||||
|
|
||||||
return wait_pid;
|
return wait_pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pid_t
|
||||||
int
|
waitpid(int pid, int *stat_loc, int options)
|
||||||
posix_utime(char *filename,struct utimbuf *buf)
|
|
||||||
{
|
{
|
||||||
time_t timep[2];
|
union wait statusp;
|
||||||
|
pid_t wait_pid;
|
||||||
|
|
||||||
timep[0] = buf->actime;
|
|
||||||
timep[1] = buf->modtime;
|
|
||||||
|
|
||||||
#undef utime /* Use NeXT's utime() function */
|
|
||||||
return utime(filename,timep);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
waitpid(int pid, int *stat_loc, int options)
|
|
||||||
{
|
|
||||||
if (pid <= 0) {
|
if (pid <= 0) {
|
||||||
if (pid != -1) {
|
if (pid != -1) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
pid = 0; /* wait4() expects pid=0 for indiscriminate wait. */
|
pid = 0; /* wait4() wants pid=0 for indiscriminate wait. */
|
||||||
}
|
}
|
||||||
return wait4(pid, (union wait *)stat_loc, options, NULL);
|
wait_pid = wait4(pid, &statusp, options, NULL);
|
||||||
}
|
stat_loc = (int *)statusp.w_status;
|
||||||
|
return wait_pid;
|
||||||
pid_t setsid(void)
|
|
||||||
{
|
|
||||||
return setpgrp(0, getpid());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -81,10 +89,7 @@ tcsetattr(int fd, int opt, const struct termios *t)
|
||||||
|
|
||||||
int tcsetpgrp(int fd, pid_t pgrp)
|
int tcsetpgrp(int fd, pid_t pgrp)
|
||||||
{
|
{
|
||||||
int s;
|
return (ioctl(fd, TIOCSPGRP, &pgrp));
|
||||||
|
|
||||||
s = pgrp;
|
|
||||||
return (ioctl(fd, TIOCSPGRP, &s));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
speed_t cfgetospeed(const struct termios *t)
|
speed_t cfgetospeed(const struct termios *t)
|
||||||
|
|
45
next-posix.h
45
next-posix.h
|
@ -1,5 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Defines and prototypes specific to NeXT system
|
* 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.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _NEXT_POSIX_H
|
#ifndef _NEXT_POSIX_H
|
||||||
|
@ -9,15 +28,9 @@
|
||||||
|
|
||||||
#include <sys/dir.h>
|
#include <sys/dir.h>
|
||||||
|
|
||||||
/* readdir() returns struct direct (BSD) not struct dirent (POSIX) */
|
/* NeXT's Readdir() is BSD (struct direct) not POSIX (struct dirent) */
|
||||||
#define dirent direct
|
#define dirent direct
|
||||||
|
|
||||||
/* POSIX utime() struct */
|
|
||||||
struct utimbuf {
|
|
||||||
time_t actime;
|
|
||||||
time_t modtime;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* FILE */
|
/* FILE */
|
||||||
#define O_NONBLOCK 00004 /* non-blocking open */
|
#define O_NONBLOCK 00004 /* non-blocking open */
|
||||||
|
|
||||||
|
@ -31,19 +44,14 @@ struct utimbuf {
|
||||||
#define WIFSIGNALED(w) (!WIFEXITED(w) && !WIFSTOPPED(w))
|
#define WIFSIGNALED(w) (!WIFEXITED(w) && !WIFSTOPPED(w))
|
||||||
#define WEXITSTATUS(w) (int)(WIFEXITED(w) ? (((w) >> 8) & 0377) : -1)
|
#define WEXITSTATUS(w) (int)(WIFEXITED(w) ? (((w) >> 8) & 0377) : -1)
|
||||||
#define WTERMSIG(w) (int)(WIFSIGNALED(w) ? ((w) & 0177) : -1)
|
#define WTERMSIG(w) (int)(WIFSIGNALED(w) ? ((w) & 0177) : -1)
|
||||||
#define WCOREFLAG 0x80
|
|
||||||
#define WCOREDUMP(w) ((w) & WCOREFLAG)
|
|
||||||
|
|
||||||
/* POSIX "wrapper" functions to replace to BSD functions */
|
/* Swap out the next 'BSDish' wait() for a more POSIX complient one */
|
||||||
int posix_utime(char *filename, struct utimbuf *buf); /* new utime() */
|
pid_t posix_wait(int *status);
|
||||||
#define utime posix_utime
|
#define wait(a) posix_wait(a)
|
||||||
|
|
||||||
pid_t posix_wait(int *status); /* new wait() */
|
|
||||||
#define wait posix_wait
|
|
||||||
|
|
||||||
/* MISC functions */
|
/* MISC functions */
|
||||||
int waitpid(int pid, int *stat_loc, int options);
|
#define setsid() setpgrp(0, getpid())
|
||||||
pid_t setsid(void);
|
pid_t waitpid(int pid, int *stat_loc, int options);
|
||||||
|
|
||||||
/* TERMCAP */
|
/* TERMCAP */
|
||||||
int tcgetattr(int fd, struct termios *t);
|
int tcgetattr(int fd, struct termios *t);
|
||||||
|
@ -54,5 +62,4 @@ speed_t cfgetispeed(const struct termios *t);
|
||||||
int cfsetospeed(struct termios *t, int speed);
|
int cfsetospeed(struct termios *t, int speed);
|
||||||
|
|
||||||
#endif /* HAVE_NEXT */
|
#endif /* HAVE_NEXT */
|
||||||
|
|
||||||
#endif /* _NEXT_POSIX_H */
|
#endif /* _NEXT_POSIX_H */
|
||||||
|
|
2
sshd.c
2
sshd.c
|
@ -1263,7 +1263,7 @@ do_ssh1_kex()
|
||||||
if (len < 0 || len > sizeof(session_key))
|
if (len < 0 || len > sizeof(session_key))
|
||||||
fatal("do_connection: bad len from %s: session_key_int %d > sizeof(session_key) %d",
|
fatal("do_connection: bad len from %s: session_key_int %d > sizeof(session_key) %d",
|
||||||
get_remote_ipaddr(),
|
get_remote_ipaddr(),
|
||||||
len, sizeof(session_key));
|
len, (int) sizeof(session_key));
|
||||||
memset(session_key, 0, sizeof(session_key));
|
memset(session_key, 0, sizeof(session_key));
|
||||||
BN_bn2bin(session_key_int, session_key + sizeof(session_key) - len);
|
BN_bn2bin(session_key_int, session_key + sizeof(session_key) - len);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue