📄 rcfile.c
字号:
#include "phone.h"#define HOMEENV "HOME"#define USERENV "USER"#define RCNAME ".phonerc"struct alias *aliaslist=0;static int inleft;static unsigned char inbuff[256],*inpoint;static int infile;static void initread(int f){ inleft=0; infile=f;}static int ci(void){ if(!inleft) { inleft=read(infile,inbuff,sizeof(inbuff)); inpoint=inbuff; } if(inleft<=0) return -1; --inleft; return *inpoint++;}int getline(char *put,int len){int n;int ch; n=0; while(len>1) { ch=ci(); if(ch<0) break; ++n; if(ch=='\n') break; *put++=ch; --len; } *put=0; return n;}void addalias(char *from,char *to){struct alias *analias; analias=malloc(sizeof(struct alias)); if(!analias) { printf("Failed to allocate memory for an alias...\n"); nomem(1123); } analias->next=aliaslist; strcpy(analias->from,from); strcpy(analias->to,to); aliaslist=analias;}void listaliases(void){struct alias *analias; analias=aliaslist; while(analias) { printf("%s -> %s\n",analias->from,analias->to); analias=analias->next; }}char *findalias(char *s){struct alias *analias; analias=aliaslist; while(analias) { if(!strcmp(analias->from,s)) break; analias=analias->next; } if(!analias) return 0; return analias->to;}int hexdigit(char c){ if(c>='0' && c<='9') return c-'0'; if(c>='a' && c<='f') return c-'a'+10; if(c>='A' && c<='F') return c-'A'+10; return -1;}void getkey(char *s){int n;int i;unsigned char temp[KEYSIZE+1]; memset(temp,0,KEYSIZE); while((n=hexdigit(*s++))>=0) { temp[KEYSIZE]=n<<4; for(i=0;i<KEYSIZE;++i) temp[i]=(temp[i]<<4) | (temp[i+1]>>4); } memcpy(mykey,temp,KEYSIZE);}void scanrcfile(char *rcname){char *s;char name[256];char directive[64];char data1[MAXNAMESIZE];char data2[MAXNAMESIZE];int f; if(!rcname) { s=getenv(HOMEENV); if(!s) { printf("Could not get %s environment variable\n",HOMEENV); return; } sprintf(name,"%s/%s",s,RCNAME); } else { strncpy(name,rcname,sizeof(name)-1); name[sizeof(name)-1]=0; } if(s=getenv(USERENV)) { strncpy(username,s,sizeof(username)-1); username[sizeof(username)-1]=0; } else { sprintf(username,"nobody-%d",rand()&0xffff); } f=open(name,O_RDONLY); if(f<0) { printf("Could not open rcfile %s\n",name); return; } initread(f); while(getline(name,sizeof(name))) { s=name; token(directive,sizeof(directive),&s); if(!strcmp(directive,"user")) { token(username,sizeof(username),&s); } else if(!strcmp(directive,"pass")) { token(data1,sizeof(data1),&s); getkey(data1); } else if(!strcmp(directive,"alias")) { token(data1,sizeof(data1),&s); token(data2,sizeof(data2),&s); addalias(data1,data2); } } close(f);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -