⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgbuild.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
字号:
/*  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. *  * This software may be freely used, copied, modified, and distributed * provided that the above copyright notice is preserved in all copies of the * software. *//* -*-C-*- * * $Revision: 1.3 $ *     $Date: 1999/11/01 13:31:38 $ * * * msgbuild.c - utilities for assembling and interpreting ADP messages * */#include <stdarg.h>     /* ANSI varargs support */#ifdef TARGET# include "angel.h"# include "devconf.h"#else# include "host.h"# include "hostchan.h"#endif#include "channels.h"#include "buffers.h"#include "angel_endian.h"     /* Endianness support macros */#include "msgbuild.h"   /* Header file for this source code */#ifndef UNUSED# define UNUSED(x) ((x)=(x))#endif#ifndef TARGETextern unsigned int Armsd_BufferSize;#endif /* ndef TARGET */unsigned int vmsgbuild(unsigned char *buffer, const char *format, va_list args){    unsigned int blen = 0;    int ch;    /* Step through the format string */    while ((ch = *format++) != '\0')    {        if (ch != '%')        {            if (buffer != NULL)                *buffer++ = (unsigned char)ch;            blen++;        }        else        {            switch (ch = *format++)            {              case 'w':              case 'W':              /* 32bit pointer */              case 'p':              case 'P':              {                  /* 32bit word / 32bit pointer */                  unsigned int na = va_arg(args, unsigned int);                  if (buffer != NULL)                  {                      PUT32LE(buffer, na);                      buffer += sizeof(unsigned int);                  }                  blen += sizeof(unsigned int);                  break;              }              case 'h':              case 'H':              {                  /* 16bit value */                  unsigned int na = va_arg(args, unsigned int);                  if (buffer != NULL)                  {                      PUT16LE(buffer, na);                      buffer += sizeof(unsigned short);                  }                  blen += sizeof(unsigned short);                  break;              }              case 'c':              case 'C':              case 'b':              case 'B':                  /* 8bit character / 8bit byte */                  ch = va_arg(args, int);                  /*                   * XXX                   *                   * fall through to the normal character processing                   */              case '%':              default:                  /* normal '%' character, or a different normal character */                  if (buffer != NULL)                      *buffer++ = (unsigned char)ch;                  blen++;                  break;            }        }    }    return blen;}/* * msgbuild * -------- * Simple routine to aid in construction of Angel messages. See the * "msgbuild.h" header file for a detailed description of the operation * of this routine. */unsigned int msgbuild(unsigned char *buffer, const char *format, ...){    va_list args;    unsigned int blen;    va_start(args, format);    blen = vmsgbuild(buffer, format, args);    va_end(args);    return blen;}#if !defined(JTAG_ADP_SUPPORTED) && !defined(MSG_UTILS_ONLY)/* * This routine allocates a buffer, puts the data supplied as * parameters into the buffer and sends the message. It does *NOT* * wait for a reply. */extern int msgsend(ChannelID chan, const char *format,...){    unsigned int length;    p_Buffer buffer;    va_list args;# ifndef TARGET    Packet *packet;    packet = DevSW_AllocatePacket(Armsd_BufferSize);    buffer = packet->pk_buffer;# else    buffer = angel_ChannelAllocBuffer(Angel_ChanBuffSize);# endif    if (buffer != NULL)    {        va_start(args, format);        length = vmsgbuild(BUFFERDATA(buffer), format, args);# ifdef TARGET        angel_ChannelSend(CH_DEFAULT_DEV, chan, buffer, length);# else        packet->pk_length = length;        Adp_ChannelWrite(chan, packet);# endif        va_end(args);        return 0;    }    else        return -1;}#endif /* ndef JTAG_ADP_SUPPORTED && ndef MSG_UTILS_ONLY *//* * unpack_message * -------------- */extern unsigned int unpack_message(unsigned char *buffer, const char *format, ...){    va_list args;    unsigned int blen = 0;    int ch;    char *chp = NULL;    va_start(args, format);    /* Step through the format string. */    while ((ch = *format++) != '\0')    {        if (ch != '%')        {            if (buffer != NULL)                ch = (unsigned char)*buffer++;            blen++;        }        else        {            switch (ch = *format++)            {              case 'w':              case 'W':              {                  /* 32bit word. */                  unsigned int *nap = va_arg(args, unsigned int*);                  if (buffer != NULL)                  {                      *nap = PREAD32(LE, buffer);                      buffer += sizeof(unsigned int);                  }                  blen += sizeof(unsigned int);                  break;              }              case 'h':              case 'H':              {                  /* 16bit value. */                  unsigned int *nap = va_arg(args, unsigned int*);                  if (buffer != NULL)                  {                      *nap = PREAD16(LE,buffer);                      buffer += sizeof(unsigned short);                  }                  blen += sizeof(unsigned short);                  break;              }              case 'c':              case 'C':              case 'b':              case 'B':                  /* 8-bit character, or 8-bit byte */                  chp = va_arg(args, char*);                  /*                   * XXX                   *                   * fall through to the normal character processing.                   */              case '%':              default:                  /* normal '%' character, or a different normal character */                  if (buffer != NULL)                      *chp = (unsigned char)*buffer++;                  blen++;                  break;            }        }    }    va_end(args);    return(blen);}/* EOF msgbuild.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -