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

📄 rommon_var.c

📁 思科路由器仿真器,用来仿7200系列得,可以在电脑上模拟路由器
💻 C
字号:
/* * Cisco router simulation platform. * Copyright (c) 2007 Christophe Fillot (cf@utc.fr) * * ROMMON Environment Variables. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include "utils.h"#include "rommon_var.h"#define DEBUG_OPEN  0/* Load file containing ROMMON variables */int rommon_load_file(struct rommon_var_list *rvl){   char buffer[512];   FILE *fd;   if (!rvl->filename)      return(-1);   if (!(fd = fopen(rvl->filename,"r"))) {#if DEBUG_OPEN      fprintf(stderr,"%s: unable to open file %s (%s)\n",              __func__,rvl->filename,strerror(errno));#endif      return(-1);   }   while(!feof(fd)) {      if (m_fgets(buffer,sizeof(buffer),fd))         rommon_var_add_str(rvl,buffer);   }   fclose(fd);   return(0);}/* Write a file with all ROMMON variables */int rommon_var_update_file(struct rommon_var_list *rvl){   struct rommon_var *var;   FILE *fd;   if (!rvl->filename)      return(-1);   if (!(fd = fopen(rvl->filename,"w"))) {      fprintf(stderr,"%s: unable to create file %s (%s)\n",              __func__,rvl->filename,strerror(errno));      return(-1);   }   for(var=rvl->var_list;var;var=var->next)      fprintf(fd,"%s=%s\n",var->name,var->value ? var->value : "");   fclose(fd);   return(0);}/* Find the specified variable */struct rommon_var *rommon_var_find(struct rommon_var_list *rvl,char *name){   struct rommon_var *var;   for(var=rvl->var_list;var;var=var->next)      if (!strcmp(var->name,name))         return var;   return NULL;}/* Create a new variable */static struct rommon_var *rommon_var_create(char *name){   struct rommon_var *var;   if (!(var = malloc(sizeof(*var))))      return NULL;   var->next  = NULL;   var->value = NULL;   var->name  = strdup(name);   if (!var->name) {      free(var);      return NULL;   }   return var;}/* Set value for a variable */static int rommon_var_set(struct rommon_var *var,char *value){   char *new_value;   if (!(new_value = strdup(value)))      return(-1);   /* free old value */   if (var->value)      free(var->value);   var->value = new_value;   return(0);}/* Add a new variable */int rommon_var_add(struct rommon_var_list *rvl,char *name,char *value){   struct rommon_var *var;   /* if the variable already exists, overwrite it */   if (!(var = rommon_var_find(rvl,name))) {      var = rommon_var_create(name);      if (!var) return(-1);      if (rommon_var_set(var,value) == -1)         return(-1);      var->next = rvl->var_list;      rvl->var_list = var;   } else {      rommon_var_set(var,value);   }      /* synchronize disk file */   return(rommon_var_update_file(rvl));}/*  * Add a new variable, specified at the format: var=value. * The string is modified. */int rommon_var_add_str(struct rommon_var_list *rvl,char *str){   char *eq_sym;   if (!(eq_sym = strchr(str,'=')))      return(-1);      /* The variable cannot be null */   if (str == eq_sym)      return(-1);   *eq_sym = 0;   return(rommon_var_add(rvl,str,eq_sym+1));}/* Get the specified variable */int rommon_var_get(struct rommon_var_list *rvl,char *name,                   char *buffer,size_t len){   struct rommon_var *var;      if (!(var = rommon_var_find(rvl,name)) || !var->value)      return(-1);   strncpy(buffer,var->value,len-1);   buffer[len-1] = '\0';   return(0);}

⌨️ 快捷键说明

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