projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'topic/mm-fixes' of git://208.110.73.182/silc into silc.1.1.branch
[silc.git]
/
lib
/
silcutil
/
silcutil.c
diff --git
a/lib/silcutil/silcutil.c
b/lib/silcutil/silcutil.c
index b0f8e117b264c48c32fb852a8c9284499e19035a..0cb176e7739ba60576e78c86edd08030a0e33f63 100644
(file)
--- a/
lib/silcutil/silcutil.c
+++ b/
lib/silcutil/silcutil.c
@@
-119,8
+119,10
@@
int silc_parse_userfqdn(const char *string,
if (!user && !fqdn)
return 0;
if (!user && !fqdn)
return 0;
- memset(user, 0, user_size);
- memset(fqdn, 0, fqdn_size);
+ if (user)
+ memset(user, 0, user_size);
+ if (user)
+ memset(fqdn, 0, fqdn_size);
if (!string)
return 0;
if (!string)
return 0;
@@
-469,7
+471,7
@@
char *silc_fingerprint(const unsigned char *data, SilcUInt32 data_len)
{
unsigned char *fingerprint, *cp;
unsigned int len, blocks, i;
{
unsigned char *fingerprint, *cp;
unsigned int len, blocks, i;
-
+
if (!data || !data_len)
return NULL;
if (!data || !data_len)
return NULL;
@@
-484,7
+486,7
@@
char *silc_fingerprint(const unsigned char *data, SilcUInt32 data_len)
cp = fingerprint = silc_calloc(len, sizeof(*fingerprint));
if (!cp)
return NULL;
cp = fingerprint = silc_calloc(len, sizeof(*fingerprint));
if (!cp)
return NULL;
-
+
for (i = 0; i < data_len; i++) {
silc_snprintf(cp, len, "%02X", data[i]);
cp += 2;
for (i = 0; i < data_len; i++) {
silc_snprintf(cp, len, "%02X", data[i]);
cp += 2;
@@
-497,7
+499,7
@@
char *silc_fingerprint(const unsigned char *data, SilcUInt32 data_len)
}
i--;
if ((i + 1) % 10 == 0)
}
i--;
if ((i + 1) % 10 == 0)
- *(--cp) = '\0';
+ *(--cp) = '\0';
if ((i + 1) % 2 == 0)
*(--cp) = '\0';
if ((i + 1) % 2 == 0)
*(--cp) = '\0';
@@
-555,13
+557,18
@@
char *silc_get_input(const char *prompt, SilcBool echo_off)
printf("%s", prompt);
fflush(stdout);
printf("%s", prompt);
fflush(stdout);
+ read_again1:
if ((read(fd, input, sizeof(input))) < 0) {
if ((read(fd, input, sizeof(input))) < 0) {
+ if (errno == EAGAIN || errno == EINTR)
+ goto read_again1;
fprintf(stderr, "silc: %s\n", strerror(errno));
fprintf(stderr, "silc: %s\n", strerror(errno));
+ signal(SIGINT, SIG_DFL);
tcsetattr(fd, TCSANOW, &to_old);
return NULL;
}
if (strlen(input) <= 1) {
tcsetattr(fd, TCSANOW, &to_old);
return NULL;
}
if (strlen(input) <= 1) {
+ signal(SIGINT, SIG_DFL);
tcsetattr(fd, TCSANOW, &to_old);
return NULL;
}
tcsetattr(fd, TCSANOW, &to_old);
return NULL;
}
@@
-589,11
+596,19
@@
char *silc_get_input(const char *prompt, SilcBool echo_off)
printf("%s", prompt);
fflush(stdout);
printf("%s", prompt);
fflush(stdout);
+ signal(SIGINT, SIG_IGN);
+
+ read_again2:
if ((read(fd, input, sizeof(input))) < 0) {
if ((read(fd, input, sizeof(input))) < 0) {
+ if (errno == EAGAIN || errno == EINTR)
+ goto read_again2;
fprintf(stderr, "silc: %s\n", strerror(errno));
fprintf(stderr, "silc: %s\n", strerror(errno));
+ signal(SIGINT, SIG_DFL);
return NULL;
}
return NULL;
}
+ signal(SIGINT, SIG_DFL);
+
if (strlen(input) <= 1)
return NULL;
if (strlen(input) <= 1)
return NULL;