Example #1
0
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//											Helper Functions
//////////////////////////////////////////////////////////////////////////////////////////////////////////
string Application::prompt_primary(){
	string attr_list;			//full command of space delimited primary keys
	vector<string> split_list;		//full command of primary keys in vector
	stringstream ss;		//used for final return including braces and brackets
	
	cout << "-------------------------------------------------------------------------------		" << endl;
	cout << "What key values would you like to use to specify unique entries? " << endl;
	cout << "i.e. two entries cannot have the same name and age	  	" << endl;
	
	cin.ignore(numeric_limits<streamsize>::max(), '\n');	//clear junk from cin
	getline(cin, attr_list);					
	split_list = split_on_spaces(attr_list);		//divide attr_list into a vector

	ss << "PRIMARY KEY (";
	
	//store the divided vector into primary key with commas between values
	for (int i = 0; i < split_list.size(); i++){				
		
		ss << split_list[i];										
		if (i < split_list.size() - 1){
			ss << ", ";
		}

	}
	
	ss << ")";
	return ss.str();			//returns (primary, key, in, this, format)
}
int read_nkn_cfg(char * configfile)
{
  FILE * fp;
  char * p;
  char buf[1024];
  int  len, i;

  if (configfile==NULL) {
    configfile = (char*)NKNSRV_CONF_FILE;
  }

  fp = fopen(configfile,"r");
  if ( fp == NULL ) {
    printf("Unable to open configuration file %s\n", configfile);
    exit(0);
  }

  while( !feof(fp) ) {
    if(fgets(buf, 1024, fp) == NULL) break;

    p=buf;
    if(*p=='#' || *p == '\r' || *p == '\n') continue;
    mark_end_of_line(p);

    int assigned = 0;
    for(i=0; !assigned; i++) {
      NknCfgParamValue *cfgParams = &nknCfgParams[i];
      const char *name = cfgParams->defn.name;
      if ( name == NULL ) break;
      len = strlen(name);
      if ( strncmp( buf, name, len ) == 0 ) {
        p = skip_to_value( &buf[len] );

        switch( cfgParams->defn.type ) 
	{
        case NKN_INT_TYPE:
	  if( (strlen(p)>=3) && (p[0]=='0') && (p[1]=='x') ) {
          	*((int *)cfgParams->pAddr) = convert_hexstr_2_int32(p+2); 
	  }
	  else {
          	*((int *)cfgParams->pAddr) = atoi(p);
	  }
          assigned = 1;
          break;
        case NKN_LONG_TYPE:
	  if( (strlen(p)>=3) && (p[0]=='0') && (p[1]=='x') ) {
          	*((int *)cfgParams->pAddr) = convert_hexstr_2_int64(p+2); 
	  }
	  else {
          	*((long *)cfgParams->pAddr) = atol(p);
	  }
          assigned = 1;
          break;
        case NKN_FLOAT_TYPE:
          *((float *)cfgParams->pAddr) = (float)atof(p);
          assigned = 1;
          break;
        case NKN_DOUBLE_TYPE:
          *((double *)cfgParams->pAddr) = atof(p);
          assigned = 1;
          break;
        case NKN_STR_PTR_TYPE:
          *((char **)cfgParams->pAddr) = nkn_strdup_type(p, mod_mgmta_charbuf);
          assigned = 1;        
          break;
        case NKN_STR_LIST_TYPE:
	  *((char ***)cfgParams->pAddr) = split_on_spaces(p); 
	  assigned = 1;
	  break;
        case NKN_FUNC_TYPE:
	  (*((CfgEntry)cfgParams->pAddr))(p);
	  assigned = 1;
          break;
        case NKN_CB_FUNC_TYPE:
	  (*((CfgEntry)cfgParams->pAddr))(p);
	  assigned = 1;
          break;
        default:
          break;
        }
      }
    }
  }
  fclose(fp);
  return NKN_SUCCESS;
}