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

📄 misc.c

📁 这个是LINUX下的GDB调度工具的源码
💻 C
字号:
/*  This file is part of the program psim.    Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.     You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.     */#include <stdio.h>#include <stdarg.h>#include <ctype.h>#include "config.h"#include "misc.h"#ifdef HAVE_STDLIB_H#include <stdlib.h>#endif#ifdef HAVE_STRING_H#include <string.h>#else#ifdef HAVE_STRINGS_H#include <strings.h>#endif#endifvoiderror (char *msg, ...){  va_list ap;  va_start(ap, msg);  vprintf(msg, ap);  va_end(ap);  exit (1);}void *zalloc(long size){  void *memory = malloc(size);  if (memory == NULL)    error("zalloc failed\n");  memset(memory, 0, size);  return memory;}voiddumpf (int indent, char *msg, ...){  va_list ap;  for (; indent > 0; indent--)    printf(" ");  va_start(ap, msg);  vprintf(msg, ap);  va_end(ap);}unsigneda2i(const char *a){  int neg = 0;  int base = 10;  unsigned num = 0;  int looping;  while (isspace (*a))    a++;  if (*a == '-') {    neg = 1;    a++;  }  if (*a == '0') {    if (a[1] == 'x' || a[1] == 'X') {      a += 2;      base = 16;    }    else      base = 8;  }  looping = 1;  while (looping) {    int ch = *a++;    switch (base) {    default:      looping = 0;      break;    case 10:      if (ch >= '0' && ch <= '9') {	num = (num * 10) + (ch - '0');      } else {	looping = 0;      }      break;    case 8:      if (ch >= '0' && ch <= '7') {	num = (num * 8) + (ch - '0');      } else {	looping = 0;      }      break;    case 16:      if (ch >= '0' && ch <= '9') {	num = (num * 16) + (ch - '0');      } else if (ch >= 'a' && ch <= 'f') {	num = (num * 16) + (ch - 'a' + 10);      } else if (ch >= 'A' && ch <= 'F') {	num = (num * 16) + (ch - 'A' + 10);      } else {	looping = 0;      }      break;    }  }  if (neg)    num = - num;  return num;}unsignedtarget_a2i(int ms_bit_nr,	   const char *a){  if (ms_bit_nr)    return (ms_bit_nr - a2i(a));  else    return a2i(a);}unsignedi2target(int ms_bit_nr,	 unsigned bit){  if (ms_bit_nr)    return ms_bit_nr - bit;  else    return bit;}intname2i(const char *names,       const name_map *map){  const name_map *curr;  const char *name = names;  while (*name != '\0') {    /* find our name */    char *end = strchr(name, ',');    char *next;    int len;    if (end == NULL) {      end = strchr(name, '\0');      next = end;    }    else {      next = end + 1;    }    len = end - name;    /* look it up */    curr = map;    while (curr->name != NULL) {      if (strncmp(curr->name, name, len) == 0	  && strlen(curr->name) == len)	return curr->i;      curr++;    }    name = next;  }  /* nothing found, possibly return a default */  curr = map;  while (curr->name != NULL)    curr++;  if (curr->i >= 0)    return curr->i;  else    error("%s contains no valid names\n", names);  return 0;}const char *i2name(const int i,       const name_map *map){  while (map->name != NULL) {    if (map->i == i)      return map->name;    map++;  }  error("map lookup failed for %d\n", i);  return NULL;}

⌨️ 快捷键说明

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