env_get_prm.c
来自「minix操作系统最新版本(3.1.1)的源代码」· C语言 代码 · 共 98 行
C
98 行
#include "sysutil.h"#include <minix/config.h>#include <string.h>PRIVATE int argc = 0;PRIVATE char **argv = NULL;FORWARD _PROTOTYPE( char *find_key, (const char *params, const char *key));/*===========================================================================* * env_setargs * *===========================================================================*/PUBLIC void env_setargs(arg_c, arg_v)int arg_c;char *arg_v[];{ argc= arg_c; argv= arg_v;}/*===========================================================================* * env_get_param * *===========================================================================*/PUBLIC int env_get_param(key, value, max_len)char *key; /* which key to look up */char *value; /* where to store value */int max_len; /* maximum length of value */{ message m; static char mon_params[128*sizeof(char *)]; /* copy parameters here */ char *key_value; int i, s, keylen; if (key == NULL) return EINVAL; keylen= strlen(key); for (i= 1; i<argc; i++) { if (strncmp(argv[i], key, keylen) != 0) continue; if (strlen(argv[i]) <= keylen) continue; if (argv[i][keylen] != '=') continue; key_value= argv[i]+keylen+1; if (strlen(key_value)+1 > EP_BUF_SIZE) return(E2BIG); strcpy(value, key_value); return OK; } /* Get copy of boot monitor parameters. */ m.m_type = SYS_GETINFO; m.I_REQUEST = GET_MONPARAMS; m.I_PROC_NR = SELF; m.I_VAL_LEN = sizeof(mon_params); m.I_VAL_PTR = mon_params; if ((s=_taskcall(SYSTASK, SYS_GETINFO, &m)) != OK) { printf("SYS_GETINFO: %d (size %u)\n", s, sizeof(mon_params)); return(s); } /* We got a copy, now search requested key. */ if ((key_value = find_key(mon_params, key)) == NULL) return(ESRCH); /* Value found, make the actual copy (as far as possible). */ strncpy(value, key_value, max_len); /* See if it fits in the client's buffer. */ if ((strlen(key_value)+1) > max_len) return(E2BIG); return(OK);}/*==========================================================================* * find_key * *==========================================================================*/PRIVATE char *find_key(params,name)const char *params;const char *name;{ register const char *namep; register char *envp; for (envp = (char *) params; *envp != 0;) { for (namep = name; *namep != 0 && *namep == *envp; namep++, envp++) ; if (*namep == '\0' && *envp == '=') return(envp + 1); while (*envp++ != 0) ; } return(NULL);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?