[core] builtin: streams bugfix;

v0.5.xx
Alexander Vdolainen 9 years ago
parent c6b795039a
commit ba630086e9

@ -53,7 +53,7 @@ static int __flag_check(int s_flag, int d_flag)
{ {
int i; int i;
for(i = 1; i < 7; i++) for(i = 1; i < 6; i++)
if((d_flag & (1 << i)) && !(s_flag & (1 << i))) return 1; if((d_flag & (1 << i)) && !(s_flag & (1 << i))) return 1;
return 0; return 0;
@ -100,7 +100,7 @@ static sxstream_t *__stream_open(sxlink_t *link, sxchnl_t *channel, const char *
if(r != SXE_RAPIDMSG) { if(r != SXE_RAPIDMSG) {
errno = r; errno = r;
goto __fini; goto __fini;
} } else r = 0;
/* time to get the special id, put it to the link and clean up all */ /* time to get the special id, put it to the link and clean up all */
buf = sxmsg_rapidbuf(msg); buf = sxmsg_rapidbuf(msg);
@ -117,7 +117,6 @@ static sxstream_t *__stream_open(sxlink_t *link, sxchnl_t *channel, const char *
if(idx && idx < 2) sid = strtoul(isx->val, NULL, 0); if(idx && idx < 2) sid = strtoul(isx->val, NULL, 0);
if(idx >= 2) r = SXE_BADPROTO; if(idx >= 2) r = SXE_BADPROTO;
} }
destroy_sexp(sx); destroy_sexp(sx);
if(!r) { if(!r) {
@ -186,10 +185,12 @@ sxstream_t *sxstream_open(sxlink_t *link, const char *opt, int stid, int flags)
flags |= SXE_O_OCHANNELED; flags |= SXE_O_OCHANNELED;
ss = __stream_open(link, channel, opt, s_desc, stid, flags); ss = __stream_open(link, channel, opt, s_desc, stid, flags);
r = errno;
__fini: __fini:
errno = r; if(r) errno = r;
if(!ss && channel) sxchannel_close(channel); if(!ss && channel) sxchannel_close(channel);
errno = r;
return ss; return ss;
} }
@ -219,7 +220,7 @@ sxstream_t *sxstream_openwch(sxlink_t *link, sxchnl_t *channel, const char *opt,
ss = __stream_open(link, channel, opt, s_desc, stid, flags); ss = __stream_open(link, channel, opt, s_desc, stid, flags);
__fini: __fini:
errno = r; if(r) errno = r;
return ss; return ss;
} }
@ -430,7 +431,7 @@ list_head_t *sxstream_read(sxstream_t *stream)
} else list_add2tail(stream->entries, &listentry->node); } else list_add2tail(stream->entries, &listentry->node);
SEXP_ITERATE_LIST(isx, iisx, iidx) { SEXP_ITERATE_LIST(isx, iisx, iidx) {
if(isx->ty == SEXP_LIST) goto __badproto; if(iisx->ty == SEXP_LIST) goto __badproto;
if(!(entry = __alloc_entry((const char *)iisx->val))) goto __enomem; if(!(entry = __alloc_entry((const char *)iisx->val))) goto __enomem;
else list_add2tail(listentry->list, &entry->node); else list_add2tail(listentry->list, &entry->node);
} }
@ -564,7 +565,7 @@ int _builtin_stream_open(void *m, sexp_t *sx)
default: goto __badproto; break; default: goto __badproto; break;
} }
} }
} else goto __badproto; } else if(idx) goto __badproto;
} }
/* check availability */ /* check availability */

Loading…
Cancel
Save