Example #1
0
File: gs.c Project: eligo/mul
int so_write(int sid, const char *buf, size_t len) {
	uint32_t fz = 0;
	struct so_t * so = _grabWAndLock(sid);
	if (!so)
		return -1;

	if (so->mState != so_e_rw) {
		_unlockW(so);
		return -2;
	}
	
	fz = buf_fz(so->mWBuf);
	if (fz < len) {
		buf_expand(so->mWBuf, len - fz);
	}

	memcpy(so->mWBuf->mBuf + so->mWBuf->mCur, buf, len);
	so->mWBuf->mCur += len;
	if (!so->mInq) {
		_pushWQ(so);
		so->mInq = 1;
	}
	_unlockW(so);
	return len;
}
Example #2
0
File: buf.c Project: MrBad/http
int buf_append(buf_t *buf, char *src, size_t n)
{
	if(buf->size < buf->len + n) {
		if(buf_expand(buf, buf->len + n) < 0) {
			fprintf(stderr, "buf_append: error expanding buffer\n");
			return -1;
		}
	}
	memcpy(buf->data+buf->len, src, n);	
	buf->len += n;
	return 0;
}
Example #3
0
/*-----------------------------------------------------------------------------
*
* ID: var_add 07.11.06 0.0.A.
*
* Summary: Добавление локальной переменной в таблицу
*
-----------------------------------------------------------------------------*/
uint STDCALL var_add( phashiuint hidn, ps_descid descvar )
{
   pfvar cvar;

   buf_expand( &fd.bvars, sizeof( fvar ));
   cvar = (pfvar)(fd.bvars.data + fd.bvars.use);
   fd.bvars.use += sizeof( fvar );

   cvar->hidn = hidn;
   cvar->type = descvar->idtype;
   cvar->oftype = descvar->oftype;
   cvar->msr = descvar->msr;
   cvar->num = fd.varcount;
   cvar->flg = 0;
   cvar->oldoffbvar = 0;

   if ( ( descvar->flgdesc & DESCID_VAR || ( descvar->flgdesc == DESCID_PARSUBFUNC )) &&
         !fd.curcount )
   {  //Формируем загрузку нового блока
      if ( descvar->flgdesc == DESCID_VAR )
      {
         buf_appenduint( &fd.bblinit, CVarsInit );
         buf_appenduint( &fd.bblinit, fd.blcount );
      }
      fd.blcount++;
      if ( fd.lastcurcount )
      {  //Закрытие блока данных
         buf_appenduint( &fd.bhead, fd.lastcurcount );
         fd.lastcurcount = 0;
      }
   }

   if ( descvar->flgdesc != DESCID_SUBFUNC )
   {
   //Добавляем в заголовок функции
      create_varmode( descvar->flgdesc == DESCID_PARFUNC  ? &fd.bhead : &fd.bvardef, 0, descvar );
      fd.curcount++;
      return fd.varcount++;
   }
   return 0;
}
Example #4
0
File: buf.c Project: MrBad/http
int buf_sprintf(buf_t *buf, char *format, ...) 
{
	va_list args;
	int len;
	// compute needed len //
	va_start(args, format);
	len = vsnprintf(NULL, 0, format, args);
	if(buf->size < buf->len + len + 1) {
		if(buf_expand(buf, buf->len + len + 1) < 0) {
			fprintf(stderr, "buf_sprintf: error expanding buffer\n");
			return -1;
		}
	}
	va_end(args);
	va_start(args, format);
	if(vsnprintf((buf->data + buf->len), len+1, format, args) != len) {
		fprintf(stderr, "buf_sprintf: error in snprintf\n");
		return -1;
	}
	va_end(args);
	buf->len += len;
	buf->data[buf->len] = 0; // expect string //
	return len;
}