uae_u32 flags = 15, days, mins, ticks;
struct stat statbuf;
int fsdb_can = fsdb_cando (unit);
+ uae_u16 uid = 0, gid = 0;
memset(&statbuf, 0, sizeof statbuf);
if (unit->volflags & MYVOLUMEINFO_ARCHIVE)
size += strlen (comment) + 1;
size = (size + 3) & ~3;
}
+ if (control >= 7) {
+ size2 += 4;
+ uid = 0;
+ gid = 0;
+ }
i = get_long (control + 0);
while (i > 0) {
size2++;
}
}
+ if (control >= 7) {
+ put_word (exp + 36, uid);
+ put_word (exp + 38, gid);
+ }
put_long (control + 0, get_long (control + 0) + 1);
return 1;
}
ok = 0;
- //write_log ("exall: %08x %08x-%08x %d %d %08x\n", lock, exalldata, exalldata + exalldatasize, exalldatasize, type, control);
- //write_log ("exall: MatchString %08x, MatchFunc %08x\n", get_long (control + 8), get_long (control + 12));
+#if 0
+ write_log ("exall: %08x %08x-%08x %d %d %08x\n",
+ lock, exalldata, exalldata + exalldatasize, exalldatasize, type, control);
+ write_log ("exall: MatchString %08x, MatchFunc %08x\n",
+ get_long (control + 8), get_long (control + 12));
+#endif
put_long (control + 0, 0); /* eac_Entries */
if (kickstart_version < 36)
return 0;
- if (type == 0 || type > 6) {
+ if (type == 0 || type > 7) {
doserr = ERROR_BAD_NUMBER;
goto fail;
}
return result;
}
-void deinit_socket_layer(void)
+static void close_selectget_threads(void)
{
int i;
+ for (i = 0; i < MAX_SELECT_THREADS; i++) {
+ if (bsd->hEvents[i]) {
+ HANDLE h = bsd->hEvents[i];
+ bsd->hEvents[i] = NULL;
+ CloseHandle (h);
+ }
+ if (bsd->hThreads[i]) {
+ CloseHandle (bsd->hThreads[i]);
+ bsd->hThreads[i] = NULL;
+ }
+ }
+
+ for (i = 0; i < MAX_GET_THREADS; i++) {
+ if (bsd->hGetThreads[i]) {
+ HANDLE h = bsd->hGetThreads[i];
+ bsd->hGetThreads[i] = NULL;
+ CloseHandle (h);
+ }
+ if (bsd->hGetEvents[i]) {
+ CloseHandle (bsd->hGetEvents[i]);
+ bsd->hGetEvents[i] = NULL;
+ }
+ bsd->threadGetargs_inuse[i] = 0;
+ }
+
+}
+
+void deinit_socket_layer(void)
+{
if (!bsd)
return;
WSACleanup();
DestroyWindow (bsd->hSockWnd);
bsd->hSockWnd = NULL;
}
- for (i = 0; i < MAX_SELECT_THREADS; i++) {
- if (bsd->hThreads[i]) {
- CloseHandle (bsd->hThreads[i]);
- bsd->hThreads[i] = NULL;
- }
- if (bsd->hEvents[i]) {
- CloseHandle (bsd->hEvents[i]);
- bsd->hEvents[i] = NULL;
- }
- }
- for (i = 0; i < MAX_GET_THREADS; i++) {
- if (bsd->hGetThreads[i]) {
- CloseHandle (bsd->hGetThreads[i]);
- bsd->hGetThreads[i] = NULL;
- }
- if (bsd->hGetEvents[i]) {
- CloseHandle (bsd->hGetEvents[i]);
- bsd->hGetEvents[i] = NULL;
- }
- bsd->threadGetargs_inuse[i] = 0;
- }
+ close_selectget_threads ();
}
#ifdef BSDSOCKET
void host_closesocketquick(SOCKET s)
{
- BOOL true = 1;
+ BOOL b = 1;
if(s) {
- setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(char *)&true,sizeof(true));
- shutdown(s,1);
+ setsockopt(s, SOL_SOCKET, SO_DONTLINGER, (char *)&b, sizeof(b));
+ shutdown(s, 1);
closesocket(s);
}
}
{
int i;
+ if (!sb) {
+ close_selectget_threads ();
+ return;
+ }
+
for (i = 0; i < MAXPENDINGASYNC; i++) {
if (bsd->asyncsb[i] == sb)
bsd->asyncsb[i] = NULL;
bsd->asyncsb[(sb->mtable[i] - 0xb000) / 2] = NULL;
}
- shutdown(sb->sockAbort,1);
+ shutdown(sb->sockAbort, 1);
closesocket(sb->sockAbort);
free(sb->mtable);
}
TRACE(("accept(%d,%d,%d) -> ",sd,name,hlenuae));
- s = (SOCKET)getsock(sb, (int)sd);
+ s = getsock(sb, (int)sd);
if (s != INVALID_SOCKET) {
BEGINBLOCKING;
if (!addr_valid("host_connect", name, namelen))
return;
- s = (SOCKET)getsock(sb,(int)sd);
+ s = getsock(sb,(int)sd);
if (s != INVALID_SOCKET) {
if (namelen <= MAXADDRLEN) {
static unsigned int thread_WaitSelect2(void *indexp)
{
int index = *((int*)indexp);
- unsigned int result = 0;
+ unsigned int result = 0, resultval;
long nfds;
uae_u32 readfds, writefds, exceptfds;
uae_u32 timeout;
SB;
- for (;;) {
- WaitForSingleObject(bsd->hEvents[index], INFINITE);
+ while (bsd->hEvents[index]) {
+ if (WaitForSingleObject(bsd->hEvents[index], INFINITE) == WAIT_ABANDONED)
+ break;
+ if (bsd->hEvents[index] == NULL)
+ break;
if ((args = bsd->threadargsw[index]) != NULL) {
sb = args->sb;
TRACE(("-> "));
- sb->resultval = select(nfds+1, &readsocks, writefds ? &writesocks : NULL,
+ resultval = select(nfds+1, &readsocks, writefds ? &writesocks : NULL,
exceptfds ? &exceptsocks : NULL, timeout ? &tv : 0);
+ if (bsd->hEvents[index] == NULL)
+ break;
+ sb->resultval = resultval;
if (sb->resultval == SOCKET_ERROR) {
// select was stopped by sb->sockAbort
if (readsocks.fd_count > 1) {
tv.tv_sec = 0;
tv.tv_usec = 10000;
// Check for 10ms if data is available
- sb->resultval = select(nfds+1, &readsocks, writefds ? &writesocks : NULL,exceptfds ? &exceptsocks : NULL,&tv);
+ resultval = select(nfds+1, &readsocks, writefds ? &writesocks : NULL,exceptfds ? &exceptsocks : NULL,&tv);
+ if (bsd->hEvents[index] == NULL)
+ break;
+ sb->resultval = resultval;
if (sb->resultval == 0) { // Now timeout -> really no data available
if (GetLastError() != 0) {
sb->resultval = SOCKET_ERROR;
SetEvent(sb->hEvent);
}
}
+ write_log ("BSDSOCK: thread_WaitSelect2 terminated\n");
THREADEND(result);
return result;
}
char *name_rp;
SB;
- for (;;) {
+ while (bsd->hGetEvents[index]) {
- WaitForSingleObject(bsd->hGetEvents[index], INFINITE);
+ if (WaitForSingleObject(bsd->hGetEvents[index], INFINITE) == WAIT_ABANDONED)
+ break;
+ if (bsd->hGetEvents[index] == NULL)
+ break;
if (bsd->threadGetargs_inuse[index] == -1)
bsd->threadGetargs_inuse[index] = 0;
}
}
- THREADEND(result);
+ write_log ("BSDSOCK: thread_get2 terminated\n");
+ THREADEND(result);
return result;
}
bFirst = TRUE;
iPos = ListView_GetNextItem(hListView, -1, LVNI_SELECTED);
while (iPos != -1) {
- if (bFirst) {
+ if (bFirst) {
// For the first selected item,
// we simply create a single-line drag image
hDragImageList = ListView_CreateDragImage(hListView, iPos, &p);
// we create a single-line drag image, then
// append it to the bottom of the complete drag image
hOneImageList = ListView_CreateDragImage(hListView, iPos, &p);
- hTempImageList = ImageList_Merge(hDragImageList,
- 0, hOneImageList, 0, 0, iHeight);
+ hTempImageList = ImageList_Merge(hDragImageList, 0, hOneImageList, 0, 0, iHeight);
ImageList_Destroy(hDragImageList);
ImageList_Destroy(hOneImageList);
hDragImageList = hTempImageList;
pt = ((NM_LISTVIEW*) ((LPNMHDR)lParam))->ptAction;
ClientToScreen(hListView, &pt);
- ImageList_DragEnter(GetDesktopWindow(), pt.x, pt.y);
+ ImageList_DragEnter(NULL, pt.x, pt.y);
bDragging = TRUE;