aboutsummaryrefslogtreecommitdiffstats
path: root/lib-src/pop.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib-src/pop.c')
-rw-r--r--lib-src/pop.c147
1 files changed, 42 insertions, 105 deletions
diff --git a/lib-src/pop.c b/lib-src/pop.c
index 64488e7e3ea..26a992fa0b0 100644
--- a/lib-src/pop.c
+++ b/lib-src/pop.c
@@ -108,24 +108,16 @@ extern int h_errno;
108#endif 108#endif
109#endif 109#endif
110 110
111#ifndef __P 111static int socket_connection (char *, int);
112# ifdef __STDC__ 112static int pop_getline (popserver, char **);
113# define __P(a) a 113static int sendline (popserver, char *);
114# else 114static int fullwrite (int, char *, int);
115# define __P(a) () 115static int getok (popserver);
116# endif /* __STDC__ */
117#endif /* ! __P */
118
119static int socket_connection __P((char *, int));
120static int pop_getline __P((popserver, char **));
121static int sendline __P((popserver, char *));
122static int fullwrite __P((int, char *, int));
123static int getok __P((popserver));
124#if 0 116#if 0
125static int gettermination __P((popserver)); 117static int gettermination (popserver);
126#endif 118#endif
127static void pop_trash __P((popserver)); 119static void pop_trash (popserver);
128static char *find_crlf __P((char *, int)); 120static char *find_crlf (char *, int);
129 121
130#define ERROR_MAX 160 /* a pretty arbitrary size, but needs 122#define ERROR_MAX 160 /* a pretty arbitrary size, but needs
131 to be bigger than the original 123 to be bigger than the original
@@ -174,11 +166,7 @@ int pop_debug = 0;
174 * explanation of the error. 166 * explanation of the error.
175 */ 167 */
176popserver 168popserver
177pop_open (host, username, password, flags) 169pop_open (char *host, char *username, char *password, int flags)
178 char *host;
179 char *username;
180 char *password;
181 int flags;
182{ 170{
183 int sock; 171 int sock;
184 popserver server; 172 popserver server;
@@ -345,10 +333,7 @@ pop_open (host, username, password, flags)
345 * connection impossible. 333 * connection impossible.
346 */ 334 */
347int 335int
348pop_stat (server, count, size) 336pop_stat (popserver server, int *count, int *size)
349 popserver server;
350 int *count;
351 int *size;
352{ 337{
353 char *fromserver; 338 char *fromserver;
354 char *end_ptr; 339 char *end_ptr;
@@ -421,11 +406,7 @@ pop_stat (server, count, size)
421 * connection impossible. 406 * connection impossible.
422 */ 407 */
423int 408int
424pop_list (server, message, IDs, sizes) 409pop_list (popserver server, int message, int **IDs, int **sizes)
425 popserver server;
426 int message;
427 int **IDs;
428 int **sizes;
429{ 410{
430 int how_many, i; 411 int how_many, i;
431 char *fromserver; 412 char *fromserver;
@@ -484,7 +465,7 @@ pop_list (server, message, IDs, sizes)
484 return (-1); 465 return (-1);
485 } 466 }
486 (*IDs)[0] = atoi (&fromserver[4]); 467 (*IDs)[0] = atoi (&fromserver[4]);
487 fromserver = index (&fromserver[4], ' '); 468 fromserver = strchr (&fromserver[4], ' ');
488 if (! fromserver) 469 if (! fromserver)
489 { 470 {
490 strcpy (pop_error, 471 strcpy (pop_error,
@@ -515,7 +496,7 @@ pop_list (server, message, IDs, sizes)
515 return (-1); 496 return (-1);
516 } 497 }
517 (*IDs)[i] = atoi (fromserver); 498 (*IDs)[i] = atoi (fromserver);
518 fromserver = index (fromserver, ' '); 499 fromserver = strchr (fromserver, ' ');
519 if (! fromserver) 500 if (! fromserver)
520 { 501 {
521 strcpy (pop_error, 502 strcpy (pop_error,
@@ -567,11 +548,7 @@ pop_list (server, message, IDs, sizes)
567 * Side effects: May kill connection on error. 548 * Side effects: May kill connection on error.
568 */ 549 */
569int 550int
570pop_retrieve (server, message, markfrom, msg_buf) 551pop_retrieve (popserver server, int message, int markfrom, char **msg_buf)
571 popserver server;
572 int message;
573 int markfrom;
574 char **msg_buf;
575{ 552{
576 int *IDs, *sizes, bufsize, fromcount = 0, cp = 0; 553 int *IDs, *sizes, bufsize, fromcount = 0, cp = 0;
577 char *ptr, *fromserver; 554 char *ptr, *fromserver;
@@ -635,7 +612,7 @@ pop_retrieve (server, message, markfrom, msg_buf)
635 } 612 }
636 ptr[cp++] = '>'; 613 ptr[cp++] = '>';
637 } 614 }
638 bcopy (fromserver, &ptr[cp], ret); 615 memcpy (&ptr[cp], fromserver, ret);
639 cp += ret; 616 cp += ret;
640 ptr[cp++] = '\n'; 617 ptr[cp++] = '\n';
641 } 618 }
@@ -645,10 +622,7 @@ pop_retrieve (server, message, markfrom, msg_buf)
645} 622}
646 623
647int 624int
648pop_retrieve_first (server, message, response) 625pop_retrieve_first (popserver server, int message, char **response)
649 popserver server;
650 int message;
651 char **response;
652{ 626{
653 sprintf (pop_error, "RETR %d", message); 627 sprintf (pop_error, "RETR %d", message);
654 return (pop_multi_first (server, pop_error, response)); 628 return (pop_multi_first (server, pop_error, response));
@@ -663,25 +637,19 @@ pop_retrieve_first (server, message, response)
663 */ 637 */
664 638
665int 639int
666pop_retrieve_next (server, line) 640pop_retrieve_next (popserver server, char **line)
667 popserver server;
668 char **line;
669{ 641{
670 return (pop_multi_next (server, line)); 642 return (pop_multi_next (server, line));
671} 643}
672 644
673int 645int
674pop_retrieve_flush (server) 646pop_retrieve_flush (popserver server)
675 popserver server;
676{ 647{
677 return (pop_multi_flush (server)); 648 return (pop_multi_flush (server));
678} 649}
679 650
680int 651int
681pop_top_first (server, message, lines, response) 652pop_top_first (popserver server, int message, int lines, char **response)
682 popserver server;
683 int message, lines;
684 char **response;
685{ 653{
686 sprintf (pop_error, "TOP %d %d", message, lines); 654 sprintf (pop_error, "TOP %d %d", message, lines);
687 return (pop_multi_first (server, pop_error, response)); 655 return (pop_multi_first (server, pop_error, response));
@@ -696,25 +664,19 @@ pop_top_first (server, message, lines, response)
696 */ 664 */
697 665
698int 666int
699pop_top_next (server, line) 667pop_top_next (popserver server, char **line)
700 popserver server;
701 char **line;
702{ 668{
703 return (pop_multi_next (server, line)); 669 return (pop_multi_next (server, line));
704} 670}
705 671
706int 672int
707pop_top_flush (server) 673pop_top_flush (popserver server)
708 popserver server;
709{ 674{
710 return (pop_multi_flush (server)); 675 return (pop_multi_flush (server));
711} 676}
712 677
713int 678int
714pop_multi_first (server, command, response) 679pop_multi_first (popserver server, char *command, char **response)
715 popserver server;
716 char *command;
717 char **response;
718{ 680{
719 if (server->in_multi) 681 if (server->in_multi)
720 { 682 {
@@ -757,9 +719,7 @@ pop_multi_first (server, command, response)
757 0, LINE is set to null. */ 719 0, LINE is set to null. */
758 720
759int 721int
760pop_multi_next (server, line) 722pop_multi_next (popserver server, char **line)
761 popserver server;
762 char **line;
763{ 723{
764 char *fromserver; 724 char *fromserver;
765 int ret; 725 int ret;
@@ -797,8 +757,7 @@ pop_multi_next (server, line)
797} 757}
798 758
799int 759int
800pop_multi_flush (server) 760pop_multi_flush (popserver server)
801 popserver server;
802{ 761{
803 char *line; 762 char *line;
804 int ret; 763 int ret;
@@ -829,9 +788,7 @@ pop_multi_flush (server)
829 * otherwise. 788 * otherwise.
830 */ 789 */
831int 790int
832pop_delete (server, message) 791pop_delete (popserver server, int message)
833 popserver server;
834 int message;
835{ 792{
836 if (server->in_multi) 793 if (server->in_multi)
837 { 794 {
@@ -861,8 +818,7 @@ pop_delete (server, message)
861 * Side effects: Closes connection on error. 818 * Side effects: Closes connection on error.
862 */ 819 */
863int 820int
864pop_noop (server) 821pop_noop (popserver server)
865 popserver server;
866{ 822{
867 if (server->in_multi) 823 if (server->in_multi)
868 { 824 {
@@ -891,8 +847,7 @@ pop_noop (server)
891 * Side effects: Closes the connection on error. 847 * Side effects: Closes the connection on error.
892 */ 848 */
893int 849int
894pop_last (server) 850pop_last (popserver server)
895 popserver server;
896{ 851{
897 char *fromserver; 852 char *fromserver;
898 853
@@ -949,8 +904,7 @@ pop_last (server)
949 * Side effects: Closes the connection on error. 904 * Side effects: Closes the connection on error.
950 */ 905 */
951int 906int
952pop_reset (server) 907pop_reset (popserver server)
953 popserver server;
954{ 908{
955 if (pop_retrieve_flush (server)) 909 if (pop_retrieve_flush (server))
956 { 910 {
@@ -978,8 +932,7 @@ pop_reset (server)
978 * function is called, even if an error occurs. 932 * function is called, even if an error occurs.
979 */ 933 */
980int 934int
981pop_quit (server) 935pop_quit (popserver server)
982 popserver server;
983{ 936{
984 int ret = 0; 937 int ret = 0;
985 938
@@ -1023,9 +976,7 @@ static int have_winsock = 0;
1023 * into pop_error. 976 * into pop_error.
1024 */ 977 */
1025static int 978static int
1026socket_connection (host, flags) 979socket_connection (char *host, int flags)
1027 char *host;
1028 int flags;
1029{ 980{
1030#ifdef HAVE_GETADDRINFO 981#ifdef HAVE_GETADDRINFO
1031 struct addrinfo *res, *it; 982 struct addrinfo *res, *it;
@@ -1069,7 +1020,7 @@ socket_connection (host, flags)
1069 } 1020 }
1070#endif 1021#endif
1071 1022
1072 bzero ((char *) &addr, sizeof (addr)); 1023 memset (&addr, 0, sizeof (addr));
1073 addr.sin_family = AF_INET; 1024 addr.sin_family = AF_INET;
1074 1025
1075 /** "kpop" service is never used: look for 20060515 to see why **/ 1026 /** "kpop" service is never used: look for 20060515 to see why **/
@@ -1145,8 +1096,7 @@ socket_connection (host, flags)
1145 if (it->ai_addrlen == sizeof (addr)) 1096 if (it->ai_addrlen == sizeof (addr))
1146 { 1097 {
1147 struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr; 1098 struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr;
1148 bcopy (&in_a->sin_addr, (char *) &addr.sin_addr, 1099 memcpy (&addr.sin_addr, &in_a->sin_addr, sizeof (addr.sin_addr));
1149 sizeof (addr.sin_addr));
1150 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) 1100 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
1151 break; 1101 break;
1152 } 1102 }
@@ -1174,8 +1124,7 @@ socket_connection (host, flags)
1174 1124
1175 while (*hostent->h_addr_list) 1125 while (*hostent->h_addr_list)
1176 { 1126 {
1177 bcopy (*hostent->h_addr_list, (char *) &addr.sin_addr, 1127 memcpy (&addr.sin_addr, *hostent->h_addr_list, hostent->h_length);
1178 hostent->h_length);
1179 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr))) 1128 if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
1180 break; 1129 break;
1181 hostent->h_addr_list++; 1130 hostent->h_addr_list++;
@@ -1335,9 +1284,7 @@ socket_connection (host, flags)
1335 * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS! 1284 * THE RETURNED LINE MAY CONTAIN EMBEDDED NULLS!
1336 */ 1285 */
1337static int 1286static int
1338pop_getline (server, line) 1287pop_getline (popserver server, char **line)
1339 popserver server;
1340 char **line;
1341{ 1288{
1342#define GETLINE_ERROR "Error reading from server: " 1289#define GETLINE_ERROR "Error reading from server: "
1343 1290
@@ -1369,8 +1316,8 @@ pop_getline (server, line)
1369 } 1316 }
1370 else 1317 else
1371 { 1318 {
1372 bcopy (server->buffer + server->buffer_index, 1319 memmove (server->buffer, server->buffer + server->buffer_index,
1373 server->buffer, server->data); 1320 server->data);
1374 /* Record the fact that we've searched the data already in 1321 /* Record the fact that we've searched the data already in
1375 the buffer for a CRLF, so that when we search below, we 1322 the buffer for a CRLF, so that when we search below, we
1376 don't have to search the same data twice. There's a "- 1323 don't have to search the same data twice. There's a "-
@@ -1467,9 +1414,7 @@ pop_getline (server, line)
1467 * Side effects: Closes the connection on error. 1414 * Side effects: Closes the connection on error.
1468 */ 1415 */
1469static int 1416static int
1470sendline (server, line) 1417sendline (popserver server, char *line)
1471 popserver server;
1472 char *line;
1473{ 1418{
1474#define SENDLINE_ERROR "Error writing to POP server: " 1419#define SENDLINE_ERROR "Error writing to POP server: "
1475 int ret; 1420 int ret;
@@ -1516,10 +1461,7 @@ sendline (server, line)
1516 * Return value: Same as write. Pop_error is not set. 1461 * Return value: Same as write. Pop_error is not set.
1517 */ 1462 */
1518static int 1463static int
1519fullwrite (fd, buf, nbytes) 1464fullwrite (int fd, char *buf, int nbytes)
1520 int fd;
1521 char *buf;
1522 int nbytes;
1523{ 1465{
1524 char *cp; 1466 char *cp;
1525 int ret = 0; 1467 int ret = 0;
@@ -1549,8 +1491,7 @@ fullwrite (fd, buf, nbytes)
1549 * Side effects: On failure, may make the connection unusable. 1491 * Side effects: On failure, may make the connection unusable.
1550 */ 1492 */
1551static int 1493static int
1552getok (server) 1494getok (popserver server)
1553 popserver server;
1554{ 1495{
1555 char *fromline; 1496 char *fromline;
1556 1497
@@ -1621,8 +1562,7 @@ gettermination (server)
1621 * since the last pop_reset) may be lost. 1562 * since the last pop_reset) may be lost.
1622 */ 1563 */
1623void 1564void
1624pop_close (server) 1565pop_close (popserver server)
1625 popserver server;
1626{ 1566{
1627 pop_trash (server); 1567 pop_trash (server);
1628 free ((char *) server); 1568 free ((char *) server);
@@ -1638,8 +1578,7 @@ pop_close (server)
1638 * pop_close or pop_quit after this function has been called. 1578 * pop_close or pop_quit after this function has been called.
1639 */ 1579 */
1640static void 1580static void
1641pop_trash (server) 1581pop_trash (popserver server)
1642 popserver server;
1643{ 1582{
1644 if (server->file >= 0) 1583 if (server->file >= 0)
1645 { 1584 {
@@ -1671,9 +1610,7 @@ pop_trash (server)
1671 null, or 0 if it does not contain one. */ 1610 null, or 0 if it does not contain one. */
1672 1611
1673static char * 1612static char *
1674find_crlf (in_string, len) 1613find_crlf (char *in_string, int len)
1675 char *in_string;
1676 int len;
1677{ 1614{
1678 while (len--) 1615 while (len--)
1679 { 1616 {