Mercurial > hg > xemacs-beta
view netinstall/simpsock.cc @ 4874:4c3f5e1ecbeb
ChangeLog for previous patch: regenerate intl-auto-encap-win32.c
(fix build problems when building --with-msw=no on Cygwin)
-------------------- ChangeLog entries follow: --------------------
lib-src/ChangeLog addition:
2010-01-15 Ben Wing <ben@xemacs.org>
* make-mswin-unicode.pl:
Various fixes to get this to work when using the Cygwin header files
in /usr/include/w32api instead of the VC++ ones:
-- Use /usr/include/w32api as default; don't assume that a passed-in
directory always ends in .../include.
-- Add `const' to list of known type modifiers.
-- If function already seen, warn but don't generate twice.
-- Eliminate `extern' from return type modifiers.
-- Cosmetic: When eliminating APIENTRY, also eliminate following
whitespace.
src/ChangeLog addition:
2010-01-15 Ben Wing <ben@xemacs.org>
* intl-auto-encap-win32.c:
* intl-auto-encap-win32.c (qxeExtractAssociatedIcon):
* intl-auto-encap-win32.c (qxeShellExecuteEx):
* intl-auto-encap-win32.c (qxeSHFileOperation):
* intl-auto-encap-win32.c (qxeSHQueryRecycleBin):
* intl-auto-encap-win32.c (qxeSHEmptyRecycleBin):
* intl-auto-encap-win32.c (qxeWNetAddConnection):
* intl-auto-encap-win32.c (qxeWNetAddConnection2):
* intl-auto-encap-win32.c (qxeWNetAddConnection3):
* intl-auto-encap-win32.c (qxeWNetCancelConnection):
* intl-auto-encap-win32.c (qxeWNetCancelConnection2):
* intl-auto-encap-win32.c (qxeWNetGetConnection):
* intl-auto-encap-win32.c (qxeWNetUseConnection):
* intl-auto-encap-win32.c (qxeWNetConnectionDialog1):
* intl-auto-encap-win32.c (qxeWNetDisconnectDialog1):
* intl-auto-encap-win32.c (qxeWNetOpenEnum):
* intl-auto-encap-win32.c (qxeWNetEnumResource):
* intl-auto-encap-win32.c (qxeWNetGetUniversalName):
* intl-auto-encap-win32.c (qxeWNetGetUser):
* intl-auto-encap-win32.c (qxeWNetGetProviderName):
* intl-auto-encap-win32.c (qxeWNetGetNetworkInformation):
* intl-auto-encap-win32.c (qxeWNetGetLastError):
* intl-auto-encap-win32.c (qxeMultinetGetConnectionPerformance):
* intl-auto-encap-win32.c (qxeAppendMenu):
* intl-auto-encap-win32.c (qxeCopyAcceleratorTable):
* intl-auto-encap-win32.c (qxeDlgDirSelectComboBoxEx):
* intl-auto-encap-win32.c (qxeEnumDesktops):
* intl-auto-encap-win32.c (qxeEnumWindowStations):
* intl-auto-encap-win32.c (qxeGetClassInfo):
* intl-auto-encap-win32.c (qxeGetClassLong):
* intl-auto-encap-win32.c (qxeGetClassName):
* intl-auto-encap-win32.c (qxeGetKeyboardLayoutName):
* intl-auto-encap-win32.c (qxeGetWindowLong):
* intl-auto-encap-win32.c (qxeGetUserObjectInformation):
* intl-auto-encap-win32.c (qxeGetWindowTextLength):
* intl-auto-encap-win32.c (qxeGrayString):
* intl-auto-encap-win32.c (qxeInsertMenu):
* intl-auto-encap-win32.c (qxeSetProp):
* intl-auto-encap-win32.c (qxeEnumICMProfiles):
* intl-auto-encap-win32.c (qxeExtTextOut):
* intl-auto-encap-win32.c (qxeSetICMProfile):
* intl-auto-encap-win32.c (qxeTextOut):
* intl-auto-encap-win32.c (qxeSHGetPathFromIDList):
* intl-auto-encap-win32.c (qxeFindText):
* intl-auto-encap-win32.c (qxeReplaceText):
* intl-auto-encap-win32.c (qxeImmInstallIME):
* intl-auto-encap-win32.c (qxeImmGetDescription):
* intl-auto-encap-win32.c (qxeImmGetIMEFileName):
* intl-auto-encap-win32.c (qxeImmGetCompositionString):
* intl-auto-encap-win32.c (qxeImmGetCandidateListCount):
* intl-auto-encap-win32.c (qxeImmGetCandidateList):
* intl-auto-encap-win32.c (qxeImmGetGuideLine):
* intl-auto-encap-win32.c (qxeImmConfigureIME):
* intl-auto-encap-win32.c (qxeImmEscape):
* intl-auto-encap-win32.c (qxeImmGetConversionList):
* intl-auto-encap-win32.c (qxeImmRegisterWord):
* intl-auto-encap-win32.c (qxeImmUnregisterWord):
* intl-auto-encap-win32.c (qxeImmEnumRegisterWord):
* intl-auto-encap-win32.c (qxesndPlaySound):
* intl-auto-encap-win32.c (qxePlaySound):
* intl-auto-encap-win32.c (qxewaveOutGetErrorText):
* intl-auto-encap-win32.c (qxewaveInGetErrorText):
* intl-auto-encap-win32.c (qxemidiOutGetErrorText):
* intl-auto-encap-win32.c (qxemidiInGetErrorText):
* intl-auto-encap-win32.c (qxemmioStringToFOURCC):
* intl-auto-encap-win32.c (qxemmioInstallIOProc):
* intl-auto-encap-win32.c (qxemmioOpen):
* intl-auto-encap-win32.c (qxemmioRename):
* intl-auto-encap-win32.c (qxemciSendCommand):
* intl-auto-encap-win32.c (qxemciSendString):
* intl-auto-encap-win32.c (qxemciGetDeviceID):
* intl-auto-encap-win32.c (qxemciGetErrorString):
* intl-auto-encap-win32.h:
* intl-auto-encap-win32.h (qxemciGetErrorString):
Regenerate these files from Cygwin headers.
* intl-encap-win32.c:
Bracket more functions in HAVE_MS_WINDOWS, to fix build problems
when building --with-msw=no on Cygwin.
Fixes for Cygwin headers:
-- Comment out IME.H, non-existent in Cygwin.
-- Make MessageBoxIndirect a `no' (don't encapsulate but generate
error if used) because it has a structure parameter that needs
to be A/W split but is declared as FOO*, and our parser can't
split this.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Fri, 15 Jan 2010 05:12:07 -0600 |
parents | 3078fd1074e8 |
children |
line wrap: on
line source
/* * Copyright (c) 2000, Red Hat, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * A copy of the GNU General Public License can be found at * http://www.gnu.org/ * * Written by DJ Delorie <dj@cygnus.com> * */ /* Simplified socket access functions */ #include "win32.h" #include <winsock.h> #include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include "simpsock.h" #include "msg.h" #define SSBUFSZ 1024 SimpleSocket::SimpleSocket (char *hostname, int port) { static int initted = 0; if (!initted) { initted = 1; WSADATA d; WSAStartup (MAKEWORD (1,1), &d); } s = INVALID_SOCKET; buf = (char *) malloc (SSBUFSZ + 3); putp = getp = 0; int i1, i2, i3, i4; unsigned char ip[4]; if (sscanf (hostname, "%d.%d.%d.%d", &i1, &i2, &i3, &i4) == 4) { ip[0] = i1; ip[1] = i2; ip[2] = i3; ip[3] = i4; } else { struct hostent *he; he = gethostbyname (hostname); if (!he) { msg ("Can't resolve `%s'\n", hostname); return; } memcpy (ip, he->h_addr_list[0], 4); } s = socket (AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) { msg ("Can't create socket, %d", WSAGetLastError ()); return; } struct sockaddr_in name; memset (&name, 0, sizeof (name)); name.sin_family = AF_INET; name.sin_port = htons (port); memcpy (&name.sin_addr, ip, 4); if (connect (s, (sockaddr *)&name, sizeof(name))) { msg ("Can't connect to %s:%d", hostname, port); closesocket (s); s = INVALID_SOCKET; return; } return; } SimpleSocket::~SimpleSocket () { if (s != INVALID_SOCKET) closesocket (s); s = INVALID_SOCKET; if (buf) free (buf); buf = 0; } int SimpleSocket::ok () { if (s == INVALID_SOCKET) return 0; return 1; } int SimpleSocket::printf (char *fmt, ...) { char localbuf[SSBUFSZ]; va_list args; va_start (args, fmt); vsprintf (localbuf, fmt, args); return send (s, localbuf, strlen (localbuf), 0); } int SimpleSocket::write (char *localbuf, int len) { return send (s, localbuf, len, 0); } int SimpleSocket::fill () { if (putp == getp) putp = getp = 0; int n = SSBUFSZ - putp; if (n == 0) return 0; int r = recv (s, buf + putp, n, 0); if (r > 0) { putp += r; return r; } return 0; } char * SimpleSocket::gets () { if (getp > 0 && putp > getp) { memmove (buf, buf+getp, putp-getp); putp -= getp; getp = 0; } if (putp == getp) fill(); // getp is zero, always, here, and putp is the count char *nl; while ((nl = (char *)memchr (buf, '\n', putp)) == NULL && putp < SSBUFSZ) if (fill () <= 0) break; if (nl) { getp = nl - buf + 1; while ((*nl == '\n' || *nl == '\r') && nl >= buf) *nl-- = 0; } else { getp = putp; nl = buf + putp; nl[1] = 0; } return buf; } #define MIN(a,b) ((a) < (b) ? (a) : (b)) int SimpleSocket::read (char *ubuf, int ulen) { int n, rv=0; if (putp > getp) { n = MIN (ulen, putp-getp); memmove (ubuf, buf+getp, n); getp += n; ubuf += n; ulen -= n; rv += n; } while (ulen > 0) { n = recv (s, ubuf, ulen, 0); if (n <= 0) return rv; ubuf += n; ulen -= n; rv += n; } return rv; }