コード例 #1
0
ファイル: priv_dic.c プロジェクト: xorgy/anthy
void
anthy_ask_scan(void (*request_scan)(struct textdict *, void *),
	       void *arg)
{
  DIR *dir;
  struct dirent *de;
  int size = 0;
  request_scan(anthy_private_text_dic, arg);
  request_scan(anthy_imported_text_dic, arg);
  dir = opendir(imported_dic_dir);
  if (!dir) {
    return ;
  }
  while ((de = readdir(dir))) {
    struct stat st_buf;
    struct textdict *td;
    char *fn = malloc(strlen(imported_dic_dir) +
		      strlen(de->d_name) + 3);
    if (!fn) {
      break;
    }
    sprintf(fn, "%s/%s", imported_dic_dir, de->d_name);
    if (stat(fn, &st_buf)) {
      free(fn);
      continue;
    }
    if (!S_ISREG(st_buf.st_mode)) {
      free(fn);
      continue;
    }
    size += st_buf.st_size;
    if (size > MAX_DICT_SIZE) {
      free(fn);
      break;
    }
    td = anthy_textdict_open(fn);
    request_scan(td, arg);
    anthy_textdict_close(td);
    free(fn);
  }
  closedir(dir);
}
コード例 #2
0
int autoscan_notify_scan(struct wpa_supplicant *wpa_s,
			 struct wpa_scan_results *scan_res)
{
	int interval;

	if (wpa_s->autoscan && wpa_s->autoscan_priv) {
		interval = wpa_s->autoscan->notify_scan(wpa_s->autoscan_priv,
							scan_res);

		if (interval <= 0)
			return -1;

		wpa_s->scan_interval = interval;
		wpa_s->sched_scan_interval = interval;

		request_scan(wpa_s);
	}

	return 0;
}
コード例 #3
0
ファイル: mib.c プロジェクト: jameshilliard/WECB-BH-GPL
/**
  *	access_mib	-access mib parameters
  *	@pmib: mib structure pointer
  *	@flag: ACCESS_MIB_SET, ACCESS_MIB_GET, 
  *				ACCESS_MIB_BY_NAME, ACCESS_MIB_BY_ID, ACCESS_MIB_ACTION
  *	@nameid: if ACCESS_MIB_BY_NAME, pointer to mib name
  *				if ACCESS_MIB_BY_ID, pointer to mib id
  *	@data1: if ACCESS_MIB_SET, set data of 1st argument
  *				if ACCESS_MIB_GET, read data for return
  *	@data2: if ACCESS_MIB_SET, set data of 2nd argument
  *			
  *
  *	Get/Set mib value from/to pmib structure.  
  *		Success: return 0 for ACCESS_MIB_SET command
  *						return read mib length for ACCESS_MIB_GET command
  *		Failure: return -1
  *		Action command: return 1 
  */
int access_mib(struct mib *pmib, int flag, char *nameid, void *data1, void *data2)
{
	int val, i = 0, ret = RET_OK;
#ifdef CMD_LINE	
	int j;
	char *ptr;
#endif	
	unsigned char bVal;
	unsigned short wVal;
	struct mdio_mem32_param	mem_param;
	void *data=NULL;

	if (nameid == NULL) {
		DEBUG_ERR("nameid == NULL!\n");
		return -1;
	}

	while (cmd_table[i].type != LAST_ENTRY) {
		if (
#ifdef CMD_LINE
			((flag & ACCESS_MIB_BY_NAME) && !strcmp(cmd_table[i].name, nameid)) ||
#endif
				 ((flag & ACCESS_MIB_BY_ID) && (cmd_table[i].id == *((int *)nameid)))) {	

			// Do ioctl
			if (cmd_table[i].action == ACT_IOCTL && (flag & ACCESS_MIB_ACTION)) {
				if (cmd_table[i].id == id_write_memory) {
#ifdef CMD_LINE					
					if 	(flag & ACCESS_MIB_BY_NAME) {					
						if (!data1 || !data2) {
							DEBUG_ERR("Invalid argument for id_write_memory!\n");
							return -RET_INVALID_ARG;
						}
						if (sscanf(data1, "%x", (unsigned int *)&mem_param.addr) != 1) {
							DEBUG_ERR("Invalid argument 1 for id_write_memory!\n");
							return -RET_INVALID_ARG;
						}							
						if (sscanf(data2, "%x", (unsigned int *)&mem_param.val) != 1) {
							DEBUG_ERR("Invalid argument 2 for id_write_memory!\n");
							return -RET_INVALID_ARG;
						}						
						DEBUG_OUT("addr=0x%x, value=0x%x\n", (unsigned int)mem_param.addr, (unsigned int)mem_param.val);
						data = &mem_param;	
					}
					else 
#endif				
					{
						memcpy((void *)&mem_param, data1, sizeof(struct mdio_mem32_param));											
						data = (void *)&mem_param;				
					}
				}				
				else if (cmd_table[i].id == id_read_memory) {
#ifdef CMD_LINE					
					if 	(flag & ACCESS_MIB_BY_NAME) {					
						if (!data1) {
							DEBUG_ERR("Invalid argument for id_read_memory!\n");
							return -RET_INVALID_ARG;
						}
						if (sscanf(data1, "%x", (unsigned int *)&mem_param.addr) != 1) {
							DEBUG_ERR("Invalid argument 1 for id_read_memory!\n");
							return -RET_INVALID_ARG;
						}							
						DEBUG_OUT("addr=0x%x\n", (unsigned int)mem_param.addr);						
						data = &mem_param.addr;			
					}
					else 
#endif
					{			
						memcpy((void *)&mem_param.addr, data1, sizeof(int));;
						data = (void *)&mem_param.addr;
					}											
				}
				else if (cmd_table[i].id == id_wlan_mac_addr) {
#ifdef ACCESS_WLAN_IF
					get_wlan_mac_addr(IF_WLAN, data1);
#else
					memset(data1, 0, 6);
#endif
					return 6; //length of mac address
				}
#ifdef RT_WLAN
				else if (cmd_table[i].id == id_get_wlan_info) {
			        return get_wlan_info(data1);
			    }
				else if (cmd_table[i].id == id_request_scan) {
			        return request_scan(data1);
			    }
				else if (cmd_table[i].id == id_get_scan_result) {
			        return get_scan_result(data1);
			    }
				else if (cmd_table[i].id == id_cfgwrite) {
			        return cfgwrite(data1);
			    }
			    else if (cmd_table[i].id == id_cfgread) {
			        return cfgread(data1);
			    }
				else if (cmd_table[i].id == id_priv_shortretry) {
			        return priv_retrylimit(data1, 1);
			    }
				else if (cmd_table[i].id == id_priv_longretry) {
			        return priv_retrylimit(data1, 0);
			    }
#endif
				else {
					DEBUG_ERR("Not supported now!\n");
					return -RET_NOT_SUPPORT_NOW;					
				}
				
				ret = do_mdio_ioctl(cmd_table[i].id, data);				
				
				if (ret > 0 && ((unsigned long)data) != ((unsigned long)data1) && 	 
												(flag & ACCESS_MIB_BY_ID))
					memcpy(data1, data, ret);
				
#ifdef CMD_LINE
				 if (ret >= 0 && cmd_table[i].id == id_read_memory && (flag & ACCESS_MIB_BY_NAME))
				 	printf("0x%s=0x%04x\n", (char *)data1, *((int *)data));
#endif				 
				 return ret;
			}

			// Do MIB R/W
			if  ((cmd_table[i].action == ACT_MIB_RW || cmd_table[i].action == ACT_MIB_RW_IOCTL) &&
						(flag & ACCESS_MIB_GET || flag & ACCESS_MIB_SET)) {
				switch (cmd_table[i].type) {
					case BYTE_T:
						if (flag & ACCESS_MIB_SET) {
#ifdef CMD_LINE							
							if 	(flag & ACCESS_MIB_BY_NAME)
								bVal = (unsigned char)atoi(data1);
							else
#endif								
								bVal = ((unsigned char *)data1)[0];
							if ((cmd_table[i].def=="" || (cmd_table[i].def && val != atoi(cmd_table[i].def))) &&
									(((int)bVal) < cmd_table[i].start || ((int)bVal) > cmd_table[i].end)) {
								DEBUG_ERR("Invalid BYTE_T cmd range [%d, %d, %d])!\n", bVal, cmd_table[i].start, cmd_table[i].end);
								return -RET_INVALID_RANGE;
							}						
							memcpy(((unsigned char *)pmib)+cmd_table[i].offset, &bVal, 1);							
						}
						else {
							memcpy(&bVal, ((unsigned char *)pmib)+cmd_table[i].offset, 1);			
#ifdef CMD_LINE														
							if (flag & ACCESS_MIB_BY_NAME)
								printf("%s=%d\n", cmd_table[i].name, (int)bVal);						
							else
#endif								
								memcpy(data1, &bVal, 1);	
							ret = 1;
						}					
						break;				
						
					case WORD_T:
						if (flag & ACCESS_MIB_SET) {			
#ifdef CMD_LINE
							if 	(flag & ACCESS_MIB_BY_NAME)						
								wVal = (unsigned short)atoi(data1);
							else
#endif		
								memcpy(&wVal, data1, 2);
							if ((cmd_table[i].def=="" || (cmd_table[i].def && val != atoi(cmd_table[i].def))) &&
									(((int)wVal) < cmd_table[i].start || ((int)wVal) > cmd_table[i].end)) {
								DEBUG_ERR("Invalid WORD_T cmd range [%d, %d, %d])!\n", val, cmd_table[i].start, cmd_table[i].end);
								return -RET_INVALID_RANGE;
							}						
							memcpy(((unsigned char *)pmib)+cmd_table[i].offset, &wVal, 2);
						}
						else {
							memcpy(&wVal, ((unsigned char *)pmib)+cmd_table[i].offset, 2);	
#ifdef CMD_LINE														
							if (flag & ACCESS_MIB_BY_NAME)
								printf("%s=%d\n", cmd_table[i].name, (int)wVal);	
							else
#endif								
								memcpy(data1, &wVal, 2);	
							ret = 2;
						}					
						break;				
								
					case INT_T:
					case INT_BIT_T:
						if (flag & ACCESS_MIB_SET) {					
#ifdef CMD_LINE
							if 	(flag & ACCESS_MIB_BY_NAME)							
								val = atoi(data1);
							else
#endif		
								memcpy(&val, data1, 4);							
							if ((cmd_table[i].def=="" || (cmd_table[i].def && val != atoi(cmd_table[i].def))) &&
									(val < cmd_table[i].start || val > cmd_table[i].end)) {
								DEBUG_ERR("Invalid INT_T cmd range [%d, %d, %d])!\n", val, cmd_table[i].start, cmd_table[i].end);
								return -RET_INVALID_RANGE;
							}						
							if ((cmd_table[i].type == INT_BIT_T) && is_more_bit_asserted(val)) {
								DEBUG_ERR("Invalid cmd range [%d, %d, %d])!\n", val, cmd_table[i].start, cmd_table[i].end);
								return -RET_INVALID_RANGE;
							}						
							memcpy(((unsigned char *)pmib)+cmd_table[i].offset, &val, 4);									
						}
						else {
							memcpy(&val, ((unsigned char *)pmib)+cmd_table[i].offset, 4);			
#ifdef CMD_LINE							
							if (flag & ACCESS_MIB_BY_NAME)
								printf("%s=%d\n", cmd_table[i].name, val);						
							else
#endif								
								memcpy(data1, &val, 4);	
							ret = 4;
						}					
						break;				
					
					case STRING_T:
						if (flag & ACCESS_MIB_SET) {
							if ((strlen(data1) > 0) && (strlen(data1) < cmd_table[i].start || strlen(data1) > cmd_table[i].end)) {
								DEBUG_ERR("Invalid STRINT_T cmd range [%d, %d, %d])!\n", strlen(data1), cmd_table[i].start, cmd_table[i].end);
								return -RET_INVALID_RANGE;
							}						
							strcpy(((unsigned char *)pmib)+cmd_table[i].offset, data1);
						}
						else {
#ifdef CMD_LINE
							if (flag & ACCESS_MIB_BY_NAME)
								printf("%s=\"%s\"\n", cmd_table[i].name, ((unsigned char *)pmib)+cmd_table[i].offset);	
							else
#endif
							{
								strcpy(data1, ((unsigned char *)pmib)+cmd_table[i].offset);	
								ret = strlen(data1);
							}
						}
						break;
				
					case BYTE_6_T:
					case BYTE_13_T:				
						if (flag & ACCESS_MIB_SET) {	
#ifdef CMD_LINE
							if (flag & ACCESS_MIB_BY_NAME) {						
								if (strlen(data1) != cmd_table[i].start*2) {
									DEBUG_ERR("Invalid BYTE cmd length [%d, %d])!\n", strlen(data1), cmd_table[i].start);
									return -RET_INVALID_RANGE;
								}						
								for (j=0, ptr=data1; *ptr && j<cmd_table[i].start; j++, ptr+=2) {
									if (!isxdigit((int)*ptr) || !isxdigit((int)*(ptr+1)) ) {
										DEBUG_ERR("%s: Invalid BYTE_T vlaue!\n", __FUNCTION__);
										return -RET_INVALID_RANGE;
									}				
									*(((unsigned char *)pmib)+cmd_table[i].offset+j) = convert_atob(ptr, 16);
								}		
							}
							else 
#endif
								memcpy(((unsigned char *)pmib)+cmd_table[i].offset, data1, cmd_table[i].start);
						}
						else {
#ifdef CMD_LINE							
							if (flag & ACCESS_MIB_BY_NAME) {
								ptr = ((unsigned char *)pmib)+cmd_table[i].offset;
								if (cmd_table[i].type ==BYTE_6_T)
									ret = printf("%s=%02x%02x%02x%02x%02x%02x\n", cmd_table[i].name, 
										*ptr, *(ptr+1),  *(ptr+2),  *(ptr+3),  *(ptr+4),  *(ptr+5));
								else							
									ret = printf("%s=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n",
											cmd_table[i].name,
											*ptr, *(ptr+1),  *(ptr+2),  *(ptr+3),  *(ptr+4),  *(ptr+5), *(ptr+6),
											*(ptr+7),  *(ptr+8),  *(ptr+9),  *(ptr+10),  *(ptr+11), *(ptr+12));
							}
							else 
#endif		
							{
								memcpy(data1, ((unsigned char *)pmib)+cmd_table[i].offset,  cmd_table[i].start);	
								ret =  cmd_table[i].start;	
							}
						}					
						break;
					
					default:
						DEBUG_ERR("Invalid mib type!\n");
						return -RET_NOT_NOW;
				}
			}

			// Do ioctl
			if (cmd_table[i].action == ACT_MIB_RW_IOCTL &&  (flag & ACCESS_MIB_ACTION)) {
				int ret1 = do_mdio_ioctl(cmd_table[i].id, ((unsigned char *)pmib)+cmd_table[i].offset);	
				if (ret1 != RET_OK)
					ret = ret1;
			}
			
			return ret;
		}
		i++;
	}

	DEBUG_ERR("Can't find mib!\n");	
	return -RET_INVALID_CMD_ID;
}
コード例 #4
0
int autoscan_init(struct wpa_supplicant *wpa_s, int req_scan)
{
	const char *name = wpa_s->conf->autoscan;
	const char *params;
	size_t nlen;
	int i;
	const struct autoscan_ops *ops = NULL;

	if (wpa_s->autoscan && wpa_s->autoscan_priv)
		return 0;

	if (name == NULL)
		return 0;

	params = os_strchr(name, ':');
	if (params == NULL) {
		params = "";
		nlen = os_strlen(name);
	} else {
		nlen = params - name;
		params++;
	}

	for (i = 0; autoscan_modules[i]; i++) {
		if (os_strncmp(name, autoscan_modules[i]->name, nlen) == 0) {
			ops = autoscan_modules[i];
			break;
		}
	}

	if (ops == NULL) {
		wpa_printf(MSG_ERROR, "autoscan: Could not find module "
			   "matching the parameter '%s'", name);
		return -1;
	}

	wpa_s->autoscan_params = NULL;

	wpa_s->autoscan_priv = ops->init(wpa_s, params);
	if (wpa_s->autoscan_priv == NULL)
		return -1;
	wpa_s->autoscan = ops;

	wpa_printf(MSG_DEBUG, "autoscan: Initialized module '%s' with "
		   "parameters '%s'", ops->name, params);
	if (!req_scan)
		return 0;

	/*
	 * Cancelling existing scan requests, if any.
	 */
	wpa_supplicant_cancel_sched_scan(wpa_s);
	wpa_supplicant_cancel_scan(wpa_s);

	/*
	 * Firing first scan, which will lead to call autoscan_notify_scan.
	 */
	request_scan(wpa_s);

	return 0;
}