0,
sockaddr_addr(&remote), sockaddr_len(&remote));
if (r==-1) return posixerr(ip,errno,"sendto");
- else if (r!=l) return staticerr(ip,"sendto gave wrong answer");
+ else if (r!=l) return staticerr(ip,"sendto gave wrong answer",0);
return TCL_OK;
}
Tcl_IncrRefCount(invoke);
rc= Tcl_ListObjReplace(ip,invoke,sock->script_llength,0,3,args);
+ for (i=0; i<3; i++) { Tcl_DecrRefCount(args[i]); args[i]= 0; }
if (rc) goto x_rc;
rc= Tcl_EvalObjEx(ip,invoke,TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
- for (i=0; i<3; i++) Tcl_DecrRefCount(args[i]);
- Tcl_DecrRefCount(invoke);
-
- hbytes_free(&message_val);
- sockaddr_free(&peer_val);
-
x_rc:
+ if (invoke) Tcl_DecrRefCount(invoke);
+
if (rc)
Tcl_BackgroundError(ip);
}
sockix= o->internalRep.longValue;
if (sockix >= n_socks || !(sock= socks[sockix]))
- return staticerr(ip,"dgram socket not open");
+ return staticerr(ip,"dgram socket not open",0);
assert(socks[sockix]->ix == sockix);
static void sockid_t_dup(Tcl_Obj *src, Tcl_Obj *dup) {
dup->internalRep= src->internalRep;
+ dup->typePtr= &dgramsockid_type;
}
static void sockid_t_ustr(Tcl_Obj *o) {
char *ep, *str;
str= Tcl_GetStringFromObj(o,0);
- if (memcmp(str,"dgramsock",9)) return staticerr(ip,"bad dgram socket id");
+ if (memcmp(str,"dgramsock",9)) return staticerr(ip,"bad dgram socket id",0);
errno=0; ul=strtoul(str+9,&ep,10);
- if (errno || *ep) return staticerr(ip,"bad dgram socket id number");
- if (ul > INT_MAX) return staticerr(ip,"out of range dgram socket id");
+ if (errno || *ep) return staticerr(ip,"bad dgram socket id number",0);
+ if (ul > INT_MAX) return staticerr(ip,"out of range dgram socket id",0);
objfreeir(o);
o->internalRep.longValue= ul;