[SCM] an open source computer algebra system branch, cleanedupstream, updated. 6125e540ca6d66c307958938a9d53b245507c323
Bernhard R. Link
brlink at debian.org
Tue Apr 24 15:53:24 UTC 2012
The following commit has been merged in the cleanedupstream branch:
commit 203a84f9e202b26e781b397f88415b96b2d65ce7
Author: Hans Schoenemann <hannes at mathematik.uni-kl.de>
Date: Wed Feb 22 13:53:21 2012 +0100
fix: waitfirst and ungetc_buf
diff --git a/Singular/ssiLink.cc b/Singular/ssiLink.cc
index bf835b8..2a0ce15 100644
--- a/Singular/ssiLink.cc
+++ b/Singular/ssiLink.cc
@@ -213,8 +213,8 @@ void ssiWriteRing(ssiInfo *d,const ring r)
case ringorder_aa:
{
int ii;
- for(ii=r->block0[i];ii<=r->block1[i];ii++)
- fprintf(d->f_write,"%d ",r->wvhdl[i][ii-r->block0[i]]);
+ for(ii=r->block0[i];ii<=r->block1[i];ii++)
+ fprintf(d->f_write,"%d ",r->wvhdl[i][ii-r->block0[i]]);
}
break;
@@ -223,7 +223,7 @@ void ssiWriteRing(ssiInfo *d,const ring r)
case ringorder_L:
case ringorder_IS:
Werror("ring oder not implemented for ssi:%d",r->order[i]);
- break;
+ break;
default: break;
}
@@ -491,8 +491,8 @@ ring ssiReadRing(ssiInfo *d)
{
wvhdl[i]=(int*)omAlloc((block1[i]-block0[i]+1)*sizeof(int));
int ii;
- for(ii=block0[i];ii<=block1[i];ii++)
- fscanf(d->f_read,"%d",&(wvhdl[i][ii-block0[i]]));
+ for(ii=block0[i];ii<=block1[i];ii++)
+ fscanf(d->f_read,"%d",&(wvhdl[i][ii-block0[i]]));
}
break;
@@ -501,7 +501,7 @@ ring ssiReadRing(ssiInfo *d)
case ringorder_L:
case ringorder_IS:
Werror("ring oder not implemented for ssi:%d",ord[i]);
- break;
+ break;
default: break;
}
@@ -955,7 +955,7 @@ BOOLEAN ssiOpen(si_link l, short flag, leftv u)
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
-
+
sscanf(l->name,"%255[^:]:%d",host,&portno);
//Print("connect to host %s, port %d\n",host,portno);mflush();
if (portno!=0)
@@ -978,7 +978,7 @@ BOOLEAN ssiOpen(si_link l, short flag, leftv u)
d->f_write=fdopen(sockfd,"w");
d->fd_write=sockfd;
SI_LINK_SET_RW_OPEN_P(l);
- d->send_quit_at_exit=1;
+ d->send_quit_at_exit=1;
omFree(host);
}
else
@@ -994,7 +994,7 @@ BOOLEAN ssiOpen(si_link l, short flag, leftv u)
// normal link to a file
FILE *outfile;
char *filename=l->name;
-
+
if(filename[0]=='>')
{
if (filename[1]=='>')
@@ -1064,7 +1064,7 @@ BOOLEAN ssiClose(si_link l)
}
}
if (d->send_quit_at_exit)
- {
+ {
fputs("99\n",d->f_write);fflush(d->f_write);
}
}
@@ -1406,7 +1406,6 @@ int slStatusSsiL(lists L, int timeout)
FD_ZERO(&fdmask);
FD_ZERO(&mask);
int max_fd=0; /* 1 + max fd in fd_set */
- int already_ready=0;
/* timeout */
#ifdef HAVE_PSELECT
@@ -1452,6 +1451,7 @@ int slStatusSsiL(lists L, int timeout)
char fdmaskempty;
/* check the links and fill in fdmask */
+ /* check ssi links for ungetc_buf */
for(i=L->nr; i>=0; i--)
{
if (L->m[i].Typ()!=DEF_CMD)
@@ -1474,13 +1474,13 @@ int slStatusSsiL(lists L, int timeout)
{
d=(ssiInfo*)l->data;
d_fd=d->fd_read;
- if (d->ungetc_buf=='\0')
- {
- FD_SET(d_fd, &fdmask);
+ if (d->ungetc_buf=='\0')
+ {
+ FD_SET(d_fd, &fdmask);
if (d_fd > max_fd) max_fd=d_fd;
- }
- else
- already_ready++;
+ }
+ else
+ return i+1;
}
else
{
@@ -1497,6 +1497,8 @@ int slStatusSsiL(lists L, int timeout)
FD_SET(d_fd, &fdmask);
if (d_fd > max_fd) max_fd=d_fd;
}
+ else
+ return i+1;
#endif
}
}
@@ -1513,25 +1515,21 @@ do_select:
}
}
- if (max_fd>1)
- {
- /* check with select: chars waiting: no -> not ready */
- #ifdef HAVE_PSELECT
- s = pselect(max_fd, &mask, NULL, NULL, wt_ptr, &sigmask);
- #else
- SSI_BLOCK_CHLD;
- s = select(max_fd, &mask, NULL, NULL, wt_ptr);
- SSI_UNBLOCK_CHLD;
- #endif
- }
- else s=0;
+ /* check with select: chars waiting: no -> not ready */
+ #ifdef HAVE_PSELECT
+ s = pselect(max_fd, &mask, NULL, NULL, wt_ptr, &sigmask);
+ #else
+ SSI_BLOCK_CHLD;
+ s = select(max_fd, &mask, NULL, NULL, wt_ptr);
+ SSI_UNBLOCK_CHLD;
+ #endif
if (s==-1)
{
WerrorS("error in select call");
return -2; /*error*/
}
- if ((s==0)&&(already_ready==0))
+ if (s==0)
{
return 0; /*poll: not ready */
}
@@ -1556,17 +1554,16 @@ do_select:
{
d=(ssiInfo*)l->data;
d_fd=d->fd_read;
- if((j==d_fd)||(d->ungetc_buf)) break;
+ if(j==d_fd) break;
}
#else
d=(ssiInfo*)l->data;
d_fd=d->fd_read;
- if((j==d_fd)||(d->ungetc_buf)) break;
+ if(j==d_fd) break;
#endif
}
}
// only ssi links:
- if (d->ungetc_buf) return i+1;
loop
{
/* yes: read 1 char*/
--
an open source computer algebra system
More information about the debian-science-commits
mailing list