block_logging(bmi, m->pid, label, buf);
next:
- close(m->fd);
+ if (m->fd >= 0)
+ close(m->fd);
}
return ECORE_CALLBACK_RENEW;
}
block_logging_init(bmi);
return RESOURCED_ERROR_NONE;
error:
- if (bmi->mfd) {
+ if (bmi->mfd > 0) {
close(bmi->mfd);
bmi->mfd = 0;
}
E_DBus_Interface *get_edbus_interface(const char *path)
{
int i;
+ int pathlen = strlen(path) + 1;
for (i = 0; i < ARRAY_SIZE(edbus_objects); i++)
- if (!strcmp(path, edbus_objects[i].path))
+ if (!strncmp(path, edbus_objects[i].path, pathlen))
return edbus_objects[i].iface;
return NULL;
if (*offset) {
fi = filemap_to_info(fm, offset);
- if (fi && !strcmp(fi->key, key))
+ if (fi && !strncmp(fi->key, key, keylen+1))
_D("fi for key %s is found using offset", fi->key);
else
fi = NULL;
gslist_for_each_item(iter, modules_list) {
module = (struct module_ops *)iter->data;
- if (!strcmp(module->name, name))
+ if (!strncmp(module->name, name, strlen(module->name)+1))
return module;
}
return NULL;
static inline int equal_name_info(const char *id_a, const char *id_b)
{
- return !strcmp(id_a, id_b);
+ return !strncmp(id_a, id_b, strlen(id_b)+1);
}
int proc_get_svc_state(struct proc_program_info *ppi);
continue;
ret = proc_get_cmdline(pid, appname);
if (ret == RESOURCED_ERROR_NONE) {
- if (!strcmp(cmdline, appname)) {
+ if (!strncmp(cmdline, appname, strlen(appname)+1)) {
foundpid = pid;
break;
}
{
struct meminfo mi;
int r;
+ char error_buf[256];
r = proc_get_meminfo(&mi, MEMINFO_MASK_SWAP_FREE);
if (r < 0) {
_E("Failed to get %s: %s",
meminfo_id_to_string(MEMINFO_ID_SWAP_FREE),
- strerror(-r));
+ strerror_r(-r, error_buf, sizeof(error_buf)));
return 0;
}
int proc_sys_node_trigger(enum sys_node_id sys_node_id)
{
FILE *fp = NULL;
+ char error_buf[256];
if (sys_node_id >= ARRAY_SIZE(sys_node_tables)) {
_E("sys_node_id[%d] is out of range.\n", sys_node_id);
fp = fopen(sys_node_tables[sys_node_id].path, "w");
if (fp == NULL) {
_E("Failed to open: %s: %s\n",
- sys_node_tables[sys_node_id].path, strerror(errno));
+ sys_node_tables[sys_node_id].path,
+ strerror_r(errno, error_buf, sizeof(error_buf)));
sys_node_tables[sys_node_id].valid = 0;
return RESOURCED_ERROR_FAIL;
}
&map->start, &map->end, &map->mode, &map->name);
if (n == 3 && !map->name)
- map->name = strdup("[anon]");
+ map->name = strndup("[anon]", strlen("[anon]"));
else if (n != 4) {
free(map);
r = -EINVAL;
if (!fp)
return ret;
while ((mnt = getmntent(fp))) {
- if (!strcmp(mnt->mnt_dir, path)) {
+ if (!strncmp(mnt->mnt_dir, path, strlen(path)+1)) {
ret = true;
break;
}
*obj_path = strndup(path, strlen(path));
if (!*obj_path) {
- _E("failed to duplicate object path: %s", strerror_r(ENOMEM, buf, sizeof(buf)));
+ str_err = strerror_r(ENOMEM, buf, sizeof(buf));
+ _E("failed to duplicate object path: %s", str_err);
*err_msg = strndup(str_err, strlen(str_err));
if (!*err_msg)
_E("failed to duplicate dbus error message");
#define GBYTE_TO_KBYTE(g) ((g) << 20)
#define GBYTE_TO_MBYTE(g) ((g) << 10)
-#define streq(a,b) (strcmp((a),(b)) == 0)
+#define streq(a,b) (strncmp((a),(b), strlen(b)+1) == 0)
#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
#define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
#define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0)
if (!result)
return -EINVAL;
- if (strcmp(result->section, CPU_CONF_SECTION))
+ if (strncmp(result->section, CPU_CONF_SECTION, strlen(CPU_CONF_SECTION)+1))
return RESOURCED_ERROR_NO_DATA;
- if (!strcmp(result->name, CPU_CONF_PREDEFINE)) {
+ if (!strncmp(result->name, CPU_CONF_PREDEFINE, strlen(CPU_CONF_PREDEFINE)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0) {
cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
} else {
_E("not found appname = %s", result->value);
}
- } else if (!strcmp(result->name, CPU_CONF_BOOTING)) {
+ } else if (!strncmp(result->name, CPU_CONF_BOOTING, strlen(CPU_CONF_BOOTING)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0) {
cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
def_list.control[def_list.num++].type = SET_BOOTING;
setpriority(PRIO_PROCESS, pid, CPU_BACKGROUND_PRI);
}
- } else if (!strcmp(result->name, CPU_CONF_WRT)) {
+ } else if (!strncmp(result->name, CPU_CONF_WRT, strlen(CPU_CONF_WRT)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0) {
cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
setpriority(PRIO_PROCESS, pid, CPU_CONTROL_PRI);
ioprio_set(IOPRIO_WHO_PROCESS, pid, IOPRIO_CLASS_IDLE << IOPRIO_CLASS_SHIFT);
}
- } else if (!strcmp(result->name, CPU_CONF_LAZY)) {
+ } else if (!strncmp(result->name, CPU_CONF_LAZY, strlen(CPU_CONF_LAZY)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0) {
def_list.control[def_list.num].pid = pid;
def_list.control[def_list.num++].type = SET_LAZY;
}
- } else if (!strcmp(result->name, CPU_CONF_SYSTEM)) {
+ } else if (!strncmp(result->name, CPU_CONF_SYSTEM, strlen(CPU_CONF_SYSTEM)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0)
cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
- } else if (!strcmp(result->name, CPU_CONF_HOME)) {
+ } else if (!strncmp(result->name, CPU_CONF_HOME, strlen(CPU_CONF_HOME)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0) {
setpriority(PRIO_PROCESS, pid, CPU_HIGHAPP_PRI);
def_list.control[def_list.num].pid = pid;
def_list.control[def_list.num++].type = SET_BOOTING;
}
- } else if (!strcmp(result->name, "BACKGROUND_CPU_SHARE")) {
+ } else if (!strncmp(result->name, "BACKGROUND_CPU_SHARE", strlen("BACKGROUND_CPU_SHARE")+1)) {
value = atoi(result->value);
if (value) {
cgroup_write_node(CPU_CONTROL_GROUP, CPU_SHARE, value);
}
if (cpu_quota_enabled())
cgroup_write_node(CPU_CONTROL_CPUQUOTA_GROUP, CPU_SHARE, value);
- } else if (!strcmp(result->name, "BACKGROUND_CPU_MAX_QUOTA")) {
+ } else if (!strncmp(result->name, "BACKGROUND_CPU_MAX_QUOTA", strlen("BACKGROUND_CPU_MAX_QUOTA")+1)) {
value = atoi(result->value);
if (value && cpu_quota_enabled()) {
value *= CPU_QUOTA_PERIOD_USEC;
cgroup_write_node(CPU_CONTROL_DOWNLOAD_GROUP,
CPU_CONTROL_BANDWIDTH, value);
}
- } else if (!strcmp(result->name, "BACKGROUND_CPU_MIN_QUOTA")) {
+ } else if (!strncmp(result->name, "BACKGROUND_CPU_MIN_QUOTA", strlen("BACKGROUND_CPU_MIN_QUOTA")+1)) {
value = atoi(result->value);
if (value && cpu_quota_enabled()) {
value *= CPU_QUOTA_PERIOD_USEC;
"req_id: %s, pkgtype: %s, pkgid: %s, key: %s, val: %s",
req_id, pkgtype, pkgid, key, val);
- if (!strcmp(key, APPOPT_STR_START)) {
- if (!strcmp(val, APPOPT_STR_INSTALL))
+ if (!strncmp(key, APPOPT_STR_START, strlen(APPOPT_STR_START)+1)) {
+ if (!strncmp(val, APPOPT_STR_INSTALL, strlen(APPOPT_STR_INSTALL)+1))
pkg_install = 1;
- else if (!strcmp(val, APPOPT_STR_UNINSTALL))
+ else if (!strncmp(val, APPOPT_STR_UNINSTALL, strlen(APPOPT_STR_UNINSTALL)+1))
pkg_uninstall = 1;
- } else if (!strcmp(key, APPOPT_STR_END)) {
- if (!strcmp(val, APPOPT_STR_OK)) {
+ } else if (!strncmp(key, APPOPT_STR_END, strlen(APPOPT_STR_END)+1)) {
+ if (!strncmp(val, APPOPT_STR_OK, strlen(APPOPT_STR_OK)+1)) {
if (pkg_install) {
gettimeofday(&tv, NULL);
ret = heart_appopt_enqueue_insert_cmd(pkgid, tv.tv_sec,
if (!result)
return -EINVAL;
- if (strcmp(result->section, HEART_BATTERY_CONF_SECTION))
+ if (strncmp(result->section, HEART_BATTERY_CONF_SECTION, strlen(HEART_BATTERY_CONF_SECTION)+1))
return RESOURCED_ERROR_NONE;
- if (!strcmp(result->name, "POWER_NORMAL_MODE")) {
+ if (!strncmp(result->name, "POWER_NORMAL_MODE", strlen("POWER_NORMAL_MODE")+1)) {
val = atoi(result->value);
if (val > 0)
default_mode_spc[POWER_NORMAL_MODE] = val;
_D("POWER_NORMAL_MODE SPC: %d", val);
- } else if (!strcmp(result->name, "POWER_SAVING_MODE")) {
+ } else if (!strncmp(result->name, "POWER_SAVING_MODE", strlen("POWER_SAVING_MODE")+1)) {
val = atoi(result->value);
if (val > 0)
default_mode_spc[POWER_SAVING_MODE] = val;
_D("POWER_SAVING_MODE SPC: %d", val);
- } else if (!strcmp(result->name, "ULTRA_SAVING_MODE")) {
+ } else if (!strncmp(result->name, "ULTRA_SAVING_MODE", strlen("ULTRA_SAVING_MODE")+1)) {
val = atoi(result->value);
if (val > 0)
default_mode_spc[ULTRA_SAVING_MODE] = val;
struct heart_memory_data *loop;
loop = g_array_index(send, struct heart_memory_data *, i);
- if (!strcmp(loop->appid, data->appid)) {
+ if (!strncmp(loop->appid, data->appid, strlen(data->appid)+1)) {
md = loop;
break;
}
_cleanup_free_ char *info = NULL;
unsigned int pss = 0, uss = 0;
int ret;
+ char error_buf[256];
/* For write to data crud during period */
/* write memory usage in proc_list */
SMAPS_MASK_SWAP));
if (ret < 0) {
_E("Failed to get PID(%d) smaps: %s",
- p_data->pid, strerror(-ret));
+ p_data->pid,
+ strerror_r(-ret, error_buf, sizeof(error_buf)));
return ret;
}
gslist_for_each_item(iter, heart_module) {
module = (struct heart_module_ops *)iter->data;
- if (!strcmp(module->name, name))
+ if (!strncmp(module->name, name, strlen(name)+1))
return module;
}
return NULL;
if (!result)
return -EINVAL;
- if (strcmp(result->section, HEART_CONF_SECTION))
+ if (strncmp(result->section, HEART_CONF_SECTION, strlen(HEART_CONF_SECTION)+1))
return RESOURCED_ERROR_FAIL;
ops = heart_module_find(result->name);
if (!ops)
return RESOURCED_ERROR_FAIL;
- if (!strcmp(result->value, "ON"))
+ if (!strncmp(result->value, "ON", 3))
*count = *count + 1;
else
heart_module_remove(ops);
static struct logging_module *logging_find_module(char *name)
{
int i;
+ int namelen = strlen(name) + 1;
if (!logging_modules)
return NULL;
for (i = 0; i < logging_modules->len; i++) {
struct logging_module *module = g_array_index(logging_modules,
struct logging_module *, i);
- if (!strcmp(name, module->name)) {
+ if (!strncmp(name, module->name, namelen)) {
return module;
}
}
if (asprintf(&(module->db_path), "%s", path) < 0) {
_E("asprintf failed");
+ free(module->name);
free(module);
return RESOURCED_ERROR_OUT_OF_MEMORY;
}
if (pthread_mutex_init(&module->cache_mutex, NULL) < 0) {
_E("%s module mutex_init failed %d", name, errno);
free(module->name);
+ free(module->db_path);
free(module);
return RESOURCED_ERROR_FAIL;
}
if (!module->cache) {
_E("g_queue_new failed");
free(module->name);
+ free(module->db_path);
free(module);
return RESOURCED_ERROR_OUT_OF_MEMORY;
}
table = g_queue_peek_nth(module->cache, i);
if (table &&
- !strcmp(appid, table->appid))
+ !strncmp(appid, table->appid, strlen(table->appid)+1))
*data = table->data;
}
pthread_mutex_unlock(&(module->cache_mutex));
/* search in cache */
/* true condition, call function */
if (search->appid) {
- if (strcmp(search->appid, data->appid))
+ if (strncmp(search->appid, data->appid, strlen(data->appid)+1))
return;
if (search->start && search->start < data->time)
if (search->end && search->end > data->time)
return;
} else if (search->pkgid) {
- if (strcmp(search->pkgid, data->pkgid))
+ if (strncmp(search->pkgid, data->pkgid, strlen(data->pkgid)+1))
return;
if (search->start && search->start < data->time)
}
while (fgets(line, BUF_MAX, f) != NULL) {
if (sscanf(line, "%s %d", name, &tmp)) {
- if (!strcmp(name, "inactive_anon")) {
+ if (!strncmp(name, "inactive_anon", strlen("inactive_anon")+1)) {
inactive_anon = tmp;
- } else if (!strcmp(name, "active_anon")) {
+ } else if (!strncmp(name, "active_anon", strlen("active_anon")+1)) {
active_anon = tmp;
break;
}
char *str_at = strrchr(fn_a, '_') + 1;
char *str_bt = strrchr(fn_b, '_') + 1;
- return strcmp(str_at, str_bt);
+ return strncmp(str_at, str_bt, strlen(str_bt)+1);
}
static void clear_logs(char *dir)
if (ret == RESOURCED_ERROR_FAIL)
return;
- if (!strcmp("memps", appname) ||
- !strcmp("crash-worker", appname) ||
- !strcmp("system-syspopup", appname)) {
+ if (!strncmp("memps", appname, strlen(appname)+1) ||
+ !strncmp("crash-worker", appname, strlen(appname)+1) ||
+ !strncmp("system-syspopup", appname, strlen(appname)+1)) {
_E("%s(%d) was selected, skip it", appname, pid);
return;
}
continue;
pid = (pid_t)atoi(dentry.d_name);
+ if (pid < 0)
+ continue;
+
pgid = getpgid(pid);
- if (!pgid)
+ if (pgid < 0)
continue;
if (proc_get_oom_score_adj(pid, &oom) < 0) {
if (!result)
return -EINVAL;
- if (strcmp(result->section, MEM_VIP_SECTION))
+ if (strncmp(result->section, MEM_VIP_SECTION, strlen(MEM_VIP_SECTION)+1))
return RESOURCED_ERROR_NONE;
- if (!strcmp(result->name, MEM_VIP_PREDEFINE)) {
+ if (!strncmp(result->name, MEM_VIP_PREDEFINE, strlen(MEM_VIP_PREDEFINE)+1)) {
pid = find_pid_from_cmdline(result->value);
if (pid > 0)
proc_set_oom_score_adj(pid, OOMADJ_SERVICE_MIN);
if (!result)
return -EINVAL;
- if (strcmp(result->section, MEM_POPUP_SECTION))
+ if (strncmp(result->section, MEM_POPUP_SECTION, strlen(MEM_POPUP_SECTION)+1))
return RESOURCED_ERROR_NONE;
- if (!strcmp(result->name, MEM_POPUP_STRING)) {
- if (!strcmp(result->value, "yes"))
+ if (!strncmp(result->name, MEM_POPUP_STRING, strlen(MEM_POPUP_STRING)+1)) {
+ if (!strncmp(result->value, "yes", strlen("yes")+1))
oom_popup_enable = 1;
- else if (!strcmp(result->value, "no"))
+ else if (!strncmp(result->value, "no", strlen("no")+1))
oom_popup_enable = 0;
}
if (!result || !section_name)
return -EINVAL;
- if (strcmp(result->section, section_name))
+ if (strncmp(result->section, section_name, strlen(section_name)+1))
return RESOURCED_ERROR_NONE;
- if (!strcmp(result->name, "ThresholdSwap")) {
+ if (!strncmp(result->name, "ThresholdSwap", strlen("ThresholdSwap")+1)) {
int value = atoi(result->value);
lowmem_memcg_set_threshold(MEMCG_MEMORY, LOWMEM_SWAP, value);
- } else if (!strcmp(result->name, "ThresholdLow")) {
+ } else if (!strncmp(result->name, "ThresholdLow", strlen("ThresholdLow")+1)) {
int value = atoi(result->value);
lowmem_memcg_set_threshold(MEMCG_MEMORY, LOWMEM_LOW, value);
- } else if (!strcmp(result->name, "ThresholdMedium")) {
+ } else if (!strncmp(result->name, "ThresholdMedium", strlen("ThresholdMedium")+1)) {
int value = atoi(result->value);
lowmem_memcg_set_threshold(MEMCG_MEMORY, LOWMEM_MEDIUM, value);
- } else if (!strcmp(result->name, "ThresholdLeave")) {
+ } else if (!strncmp(result->name, "ThresholdLeave", strlen("ThresholdLeave")+1)) {
int value = atoi(result->value);
lowmem_memcg_set_leave_threshold(MEMCG_MEMORY, value);
- } else if (!strcmp(result->name, "ForegroundRatio")) {
+ } else if (!strncmp(result->name, "ForegroundRatio", strlen("ForegroundRatio")+1)) {
float ratio = atof(result->value);
memcg_info_set_limit(memcg_tree[MEMCG_FOREGROUND]->info, ratio, totalram);
- } else if (!strcmp(result->name, "ForegroundUseHierarchy")) {
+ } else if (!strncmp(result->name, "ForegroundUseHierarchy", strlen("ForegroundUseHierarchy")+1)) {
int use_hierarchy = atoi(result->value);
memcg_tree[MEMCG_FOREGROUND]->use_hierarchy = use_hierarchy;
- } else if (!strcmp(result->name, "ForegroundNumCgroups")) {
+ } else if (!strncmp(result->name, "ForegroundNumCgroups", strlen("ForegroundNumCgroups")+1)) {
int num_cgroups = atoi(result->value);
- memcg_add_cgroups(memcg_tree[MEMCG_FOREGROUND],
- num_cgroups);
+ if (num_cgroups > 0)
+ memcg_add_cgroups(memcg_tree[MEMCG_FOREGROUND], num_cgroups);
memcg_show(memcg_tree[MEMCG_FOREGROUND]);
- } else if (!strcmp(result->name, "NumMaxVictims")) {
+ } else if (!strncmp(result->name, "NumMaxVictims", strlen("NumMaxVictims")+1)) {
int value = atoi(result->value);
num_max_victims = value;
- } else if (!strcmp(result->name, "ProactiveThreshold")) {
+ } else if (!strncmp(result->name, "ProactiveThreshold", strlen("ProactiveThreshold")+1)) {
int value = atoi(result->value);
proactive_threshold = value;
- } else if (!strcmp(result->name, "ProactiveLeave")) {
+ } else if (!strncmp(result->name, "ProactiveLeave", strlen("ProactiveLeave")+1)) {
int value = atoi(result->value);
proactive_leave = value;
- } else if (!strcmp(result->name, "DynamicThreshold")) {
+ } else if (!strncmp(result->name, "DynamicThreshold", strlen("DynamicThreshold")+1)) {
int value = atoi(result->value);
dynamic_threshold_min = value;
}
{
char buf[PATH_MAX];
_cleanup_closedir_ DIR *pdir = NULL;
- struct dirent *entry;
+ struct dirent entry;
+ struct dirent *result;
struct stat path_stat;
long usage_swap;
unsigned long usage, usage_with_swap;
+ int ret;
_I("====================================================================");
_I("MEMORY CGROUPS USAGE INFO");
return;
}
- while ((entry = readdir(pdir)) != NULL) {
- sprintf(buf, "%s/%s", MEMCG_PATH, entry->d_name);
+ while (!(ret = readdir_r(pdir, &entry, &result)) && result != NULL) {
+ snprintf(buf, sizeof(buf), "%s/%s", MEMCG_PATH, entry.d_name);
/* If can't stat then ignore */
if (stat(buf, &path_stat) != 0)
continue;
/* If it's not directory or it's parent path then ignore */
if (!(S_ISDIR(path_stat.st_mode) &&
- strcmp(entry->d_name, "..")))
+ strncmp(entry.d_name, "..", 3)))
continue;
usage = get_memcg_usage(buf, false);
usage_swap = 0;
/* Case of root cgroup in hierarchy */
- if (!strcmp(entry->d_name, "."))
+ if (!strncmp(entry.d_name, ".", 2))
_I("%13s Mem %3ld MB (%6ld kB), Mem+Swap %3ld MB (%6ld kB), Swap %3ld MB (%6ld kB) \n",
MEMCG_PATH, BYTE_TO_MBYTE(usage),
BYTE_TO_KBYTE(usage),
BYTE_TO_KBYTE(usage_swap));
else
_I("memcg: %13s Mem %3ld MB (%6ld kB), Mem+Swap %3ld MB (%6ld kB), Swap %3ld MB (%6ld kB)",
- entry->d_name, BYTE_TO_MBYTE(usage),
+ entry.d_name, BYTE_TO_MBYTE(usage),
BYTE_TO_KBYTE(usage),
BYTE_TO_MBYTE(usage_with_swap),
BYTE_TO_KBYTE(usage_with_swap),
continue;
base_name = basename(cmdline);
- if (base_name && !strcmp(base_name, "mem-stress"))
+ if (base_name && !strncmp(base_name, "mem-stress", strlen("mem-stress")+1))
continue;
r = smaps_get(pid, &maps, SMAPS_MASK_DEFAULT);
if (ret)
return ret;
- ret = strcmp(a_key->ifname, b_key->ifname);
+ ret = strncmp(a_key->ifname, b_key->ifname, strlen(b_key->ifname)+1);
if (ret)
return ret;
return (a_key->imsi && b_key->imsi) ?
- strcmp(a_key->imsi, b_key->imsi) : 0;
+ strncmp(a_key->imsi, b_key->imsi, strlen(b_key->imsi)+1) : 0;
}
struct application_stat_tree *create_app_stat_tree(void)
err.name, err.message);
}
- if (app_id && !strcmp(*app_id, null_str))
+ if (app_id && !strncmp(*app_id, null_str, strlen(null_str)+1))
*app_id = NULL;
dbus_error_free(&err);
}
/* following value for ALL is suitable for using in statistics
what's why it's not in get_app_id_by_classid */
if (classid == RESOURCED_ALL_APP_CLASSID)
- return strdup(RESOURCED_ALL_APP);
+ return strndup(RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP));
appid = get_app_id_by_classid(classid, true);
- return !appid ? strdup(UNKNOWN_APP) : appid;
+ return !appid ? strndup(UNKNOWN_APP, strlen(UNKNOWN_APP)) : appid;
}
static bool need_flush_immediatelly(sig_atomic_t state)
* assume it's the same as given ifname
*/
if (strlen(key_a->ifname) && strlen(key_b->ifname))
- return strcmp(key_a->ifname, key_b->ifname);
+ return strncmp(key_a->ifname, key_b->ifname, strlen(key_b->ifname)+1);
return 0;
}
gslist_for_each_item(iter, *rst_list) {
resourced_restriction_info *look_info = (resourced_restriction_info *)iter->data;
- if (look_info->app_id && !strcmp(look_info->app_id, app_id) &&
+ if (look_info->app_id && !strncmp(look_info->app_id, app_id, strlen(appid)+1) &&
look_info->iftype == nf_key->iftype &&
look_info->quota_id == nf_value->quota_id &&
look_info->roaming == nf_value->roaming) {
* per sim, and only afterward by appid */
if (key1->imsi_hash && key2->imsi_hash)
- ret = strcmp(key1->imsi_hash, key2->imsi_hash);
+ ret = strncmp(key1->imsi_hash, key2->imsi_hash, strlen(key2->imsi_hash)+1);
else if (!key1->imsi_hash || !key2->imsi_hash) /* in case of one empty another not */
ret = key1->imsi_hash - key2->imsi_hash;
}
if (key1->app_id && key2->app_id)
- ret = strcmp(key1->app_id, key2->app_id);
+ ret = strncmp(key1->app_id, key2->app_id, strlen(key2->app_id)+1);
if (ret) {
_D("quotas different by app_id");
return ret;
/* if imsi is not specified, e.g. for WiFi
* need additional check*/
- if (info->imsi && context->imsi && strcmp(context->imsi, info->imsi))
+ if (info->imsi && context->imsi && strncmp(context->imsi, info->imsi, strlen(info->imsi)+1))
return RESOURCED_CONTINUE;
context->sent_used_quota += info->cnt.outgoing_bytes;
const time_t cur_time = time(0);
char buf[30];
- app_id = !strcmp(app_id, RESOURCED_ALL_APP) ? 0: app_id;
+ app_id = !strncmp(app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1) ? 0: app_id;
if (cur_time < start_time) {
_D("No need to update effective quota!");
return true;
}
- if (!strcmp(key_quota->app_id, TETHERING_APP_NAME) &&
+ if (!strncmp(key_quota->app_id, TETHERING_APP_NAME, strlen(TETHERING_APP_NAME)+1) &&
(send_delta > 0 || rcv_delta > 0)) {
_D("tethering");
/* in the case of tethering we send
static inline bool check_imsi_hash(const char *hash_a, const char *hash_b)
{
if (hash_a && hash_b)
- return !strcmp(hash_a, hash_b);
+ return !strncmp(hash_a, hash_b, strlen(hash_b)+1);
return hash_a == hash_b; /* both null */
}
_D("app stat ground %d", arg->app_stat->ground);
#endif
/* handle case for network interfaces*/
- if ((!strcmp(qkey->app_id, RESOURCED_ALL_APP) &&
+ if ((!strncmp(qkey->app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1) &&
(qkey->iftype == RESOURCED_IFACE_UNKNOWN ||
qkey->iftype == RESOURCED_IFACE_ALL ||
qkey->iftype == arg->iftype) &&
(qkey->roaming == RESOURCED_ROAMING_UNKNOWN ||
qkey->roaming == arg->app_stat->is_roaming) &&
check_ground_state(qkey, arg->app_stat)) ||
- !strcmp(qkey->app_id, TETHERING_APP_NAME))
+ !strncmp(qkey->app_id, TETHERING_APP_NAME, strlen(TETHERING_APP_NAME)+1))
{
/* update it */
total_quota->sent_used_quota += arg->app_stat->delta_snd;
name = RTA_DATA(multicast_group_family[CTRL_ATTR_MCAST_GRP_NAME]);
- if (strcmp(name, group_name))
+ if (strncmp(name, group_name, strlen(group_name)+1))
return -EINVAL;
*group_id = *((__u32 *)RTA_DATA(
gslist_for_each_item(iter, *ifnames_list) {
struct iface_status *cur = (struct iface_status *)iter->data;
- if (cur->iftype == iftype && !strcmp(cur->ifname, ifname)) {
+ if (cur->iftype == iftype && !strncmp(cur->ifname, ifname, strlen(ifname)+1)) {
cur->active = true;
found = true;
}
break;
key_buffer = strtok_r(buffer, UEVENT_DELIM, &saveptr);
value_buffer = strtok_r(NULL, UEVENT_DELIM, &saveptr);
- if (key_buffer && strcmp(key_buffer, DEVTYPE_KEY) != 0)
+ if (key_buffer && strncmp(key_buffer, DEVTYPE_KEY, strlen(DEVTYPE_KEY)+1) != 0)
continue;
ret = convert_iftype(value_buffer);
break;
void UNUSED *user_data)
{
struct iface_relation *relation;
- if (strcmp(result->section, IFACES_TYPE_SECTION))
+ if (strncmp(result->section, IFACES_TYPE_SECTION, strlen(IFACES_TYPE_SECTION)+1))
return RESOURCED_ERROR_NONE;
relation = (struct iface_relation *)malloc(sizeof(struct iface_relation));
return RESOURCED_IFACE_UNKNOWN;
}
- if (strcmp(buffer, DATACALL_VALUE) == 0)
+ if (strncmp(buffer, DATACALL_VALUE, strlen(DATACALL_VALUE)+1) == 0)
return RESOURCED_IFACE_DATACALL;
- if (strcmp(buffer, WIFI_VALUE) == 0)
+ if (strncmp(buffer, WIFI_VALUE, strlen(WIFI_VALUE)+1) == 0)
return RESOURCED_IFACE_WIFI;
- if (strcmp(buffer, BLUETOOTH_VALUE) == 0)
+ if (strncmp(buffer, BLUETOOTH_VALUE, strlen(BLUETOOTH_VALUE)+1) == 0)
return RESOURCED_IFACE_BLUETOOTH;
- if (strcmp(buffer, WIRED_VALUE) == 0)
+ if (strncmp(buffer, WIRED_VALUE, strlen(WIRED_VALUE)+1) == 0)
return RESOURCED_IFACE_WIRED;
- if (strcmp(buffer, ALL_NET_IFACE_VALUE) == 0)
+ if (strncmp(buffer, ALL_NET_IFACE_VALUE, strlen(ALL_NET_IFACE_VALUE)+1) == 0)
return RESOURCED_IFACE_ALL;
return RESOURCED_IFACE_UNKNOWN;
}
gslist_for_each_item(iter, ifnames) {
struct iface_status *value = (struct iface_status *)iter->data;
- if (!strcmp(value->ifname, name))
+ if (!strncmp(value->ifname, name, strlen(name)+1))
return value->iftype;
}
}
for (iter = iptc->chains; iter; iter = iter->next) {
struct ipt_chain *chain = iter->data;
- if (!strcmp(chain->name, chain_name)) {
+ if (!strncmp(chain->name, chain_name, strlen(chain_name)+1)) {
found_chain = chain;
break;
}
found_chain = (struct ipt_chain *)malloc(sizeof(struct ipt_chain));
ret_value_msg_if(found_chain == NULL, NULL, "Not enough memory!");
memset(found_chain, 0, sizeof(struct ipt_chain));
- strcpy(found_chain->name, chain_name);
+ strncpy(found_chain->name, sizeof(found_chain->name) - 1, chain_name);
found_chain->hooknum = hook_number;
iptc->chains = g_list_append(iptc->chains,
found_chain);
ret_msg_if(ipt_entry->jump == NULL, "Need to find jump destination.");
memset(t->target.u.user.name, 0, XT_EXTENSION_MAXNAMELEN);
- strcpy(t->target.u.user.name, XT_STANDARD_TARGET);
+ strncpy(t->target.u.user.name, XT_STANDARD_TARGET, XT_EXTENSION_MAXNAMELEN - 1);
/*
* Jumps can only happen in builtin chains, so we
* can safely assume that they always have a header
/* it means not nfacct entry */
if (nfacct_name)
- strcpy(e->nfacct_name, nfacct_name);
+ strncpy(e->nfacct_name, nfacct_name, sizeof(e->nfacct_name) - 1);
else
- strcpy(e->nfacct_name, "not nfacct entry"); /* for debug purpose only */
+ strncpy(e->nfacct_name, "not nfacct entry", sizeof(e->nfacct_name) - 1); /* for debug purpose only */
+ e->nfacct_name[sizeof(e->nfacct_name) - 1] = 0;
e->verdict_type = verdict_type;
if (insert_type == IPT_INSERT_APPEND)
{
struct xt_standard_target *t = (struct xt_standard_target *)ipt_get_target(e);
- if (!strcmp(t->target.u.user.name, XT_STANDARD_TARGET)) {
+ if (!strncmp(t->target.u.user.name, XT_STANDARD_TARGET, strlen(XT_STANDARD_TARGET)+1)) {
if (t->target.u.target_size
!= IPT_ALIGN(sizeof(struct xt_standard_target))) {
_E("Mismatch target size for standard target!");
static inline bool is_error_target(struct xt_error_target *t)
{
- return strcmp(t->target.u.user.name, XT_ERROR_TARGET) == 0;
+ return strncmp(t->target.u.user.name, XT_ERROR_TARGET, strlen(XT_ERROR_TARGET)+1) == 0;
}
static void clear_user_chain(struct ipt_context *table)
is_auxilary_entry = true;
} else {
chain_name = define_chain_name(table, entry_offset, &hook_number);
- is_auxilary_entry = strcmp(t->target.u.user.name, XT_STANDARD_TARGET) == 0 &&
+ is_auxilary_entry = strncmp(t->target.u.user.name, XT_STANDARD_TARGET, strlen(XT_STANDARD_TARGET)+1) == 0 &&
info->entry->target_offset == sizeof(struct ipt_entry) &&
info->entry->next_offset == IPTC_ENTRY_STANDARD_TARGET_SIZE &&
(hook_number < NF_IP_NUMHOOKS && entry_offset == table->underflow[hook_number]);
static int find_nfacct_name (const struct xt_entry_match *match,
char **found_name)
{
- if (match && !strcmp(match->u.user.name, NFACCT_MATCH_NAME)) {
+ if (match && !strncmp(match->u.user.name, NFACCT_MATCH_NAME, strlen(NFACCT_MATCH_NAME)+1)) {
struct xt_nfacct_match_info *info = (struct xt_nfacct_match_info *)match->data;
*found_name = info ? info->name: NULL;
return 1; /* means stop */
API resourced_ret_c resourced_ipt_begin(struct ipt_context *iptc)
{
int ret;
+ char error_buf[256];
+
socklen_t s = sizeof(*iptc->info);
ret_value_msg_if(iptc == NULL, RESOURCED_ERROR_INVALID_PARAMETER,
"Please provide iptc handle");
}
}
- strcpy(iptc->info->name, TABLE_NAME);
+ snprintf(iptc->info->name, sizeof(iptc->info->name), "%s", TABLE_NAME);
ret = getsockopt(iptc->sock, IPPROTO_IP, IPT_SO_GET_INFO,
iptc->info, &s);
if(ret < 0) {
_E("iptables support missing error %d (%s)", errno,
- strerror(errno));
+ strerror_r(errno, error_buf, sizeof(error_buf)));
goto release_info;
}
{
int err = setsockopt(iptc->sock, IPPROTO_IP, IPT_SO_SET_REPLACE, r,
sizeof(*r) + r->size);
+ char error_buf[256];
+
ret_value_msg_if(err < 0, RESOURCED_ERROR_FAIL,
- "Can't send iptables rules! %s [%d]", strerror(errno),
+ "Can't send iptables rules! %s [%d]",
+ strerror_r(errno, error_buf, sizeof(error_buf)),
errno);
return RESOURCED_ERROR_NONE;
iface_len = strlen(rule->ifname);
if (dest_ifname && iface_len) {
- strcpy(dest_ifname, rule->ifname);
+ snprintf(dest_ifname, IFNAMSIZ, "%s", rule->ifname);
memset(dest_ifmask, 0xff, iface_len + 1);
}
- strcpy(match->u.user.name, CGROUP_MATCH_NAME);
+ snprintf(match->u.user.name, sizeof(match->u.user.name), "%s", CGROUP_MATCH_NAME);
match->u.user.match_size = XT_CGROUP_MATCH_SIZE;
memcpy(match->data, &cgroup_info, sizeof(struct xt_cgroup_info));
memcpy(entry->elems, match, XT_CGROUP_MATCH_SIZE);
memset(&nfacct_info, 0, sizeof(struct xt_nfacct_match_info));
- strcpy(nfacct_info.name, rule->name);
- strcpy(match->u.user.name, NFACCT_MATCH_NAME);
+ snprintf(nfacct_info.name, sizeof(nfacct_info.name), "%s", rule->name);
+ snprintf(match->u.user.name, sizeof(match->u.user.name), "%s", NFACCT_MATCH_NAME);
match->u.user.match_size = XT_NFACCT_MATCH_SIZE;
memcpy(match->data, &nfacct_info, sizeof(struct xt_nfacct_match_info));
chain = cur_chain->data;
for (cur_rule = chain->rules; cur_rule; cur_rule = cur_rule->next) {
e = cur_rule->data;
- if (strcmp (e->nfacct_name, rule->name) == 0)
+ if (strncmp(e->nfacct_name, rule->name, strlen(rule->name)+1) == 0)
return true;
}
}
}
for (iter = chain->rules; iter; iter = iter->next) {
e = iter->data;
- if (!strcmp(e->nfacct_name, rule->name)) {
+ if (!strncmp(e->nfacct_name, rule->name, strlen(rule->name)+1)) {
found_entry = e;
break;
}
{
struct xt_entry_target *target = ipt_get_target(entry);
- if (strcmp(target->u.user.name, IPT_STANDARD_TARGET) == 0) {
+ if (strncmp(target->u.user.name, IPT_STANDARD_TARGET, strlen(IPT_STANDARD_TARGET)+1) == 0) {
struct xt_standard_target *t;
t = (struct xt_standard_target *)target;
_D("entry %p next_offset %d ", info->entry,
info->entry->next_offset);
- if (!strcmp(target->u.user.name, IPT_ERROR_TARGET)) {
+ if (!strncmp(target->u.user.name, IPT_ERROR_TARGET, strlen(IPT_ERROR_TARGET)+1)) {
_D("\tUSER CHAIN (%s) match %p target %p",
target->data, info->entry->elems,
(char *)info->entry + info->entry->target_offset);
return RESOURCED_UNKNOWN_CLASSID;
}
- if (!strcmp(app_id, RESOURCED_ALL_APP))
+ if (!strncmp(app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1))
return RESOURCED_ALL_APP_CLASSID;
- if (!strcmp(app_id, TETHERING_APP_NAME))
+ if (!strncmp(app_id, TETHERING_APP_NAME, strlen(TETHERING_APP_NAME)+1))
return RESOURCED_TETHERING_APP_CLASSID;
- if (!strcmp(app_id, RESOURCED_BACKGROUND_APP_NAME))
+ if (!strncmp(app_id, RESOURCED_BACKGROUND_APP_NAME, strlen(RESOURCED_BACKGROUND_APP_NAME)+1))
return RESOURCED_BACKGROUND_APP_CLASSID;
/* just read */
return RESOURCED_ERROR_INVALID_PARAMETER;
}
- if (!strcmp(pkg_name, RESOURCED_BACKGROUND_APP_NAME))
+ if (!strncmp(pkg_name, RESOURCED_BACKGROUND_APP_NAME, strlen(RESOURCED_BACKGROUND_APP_NAME)+1))
ret = make_net_cls_cgroup(pkg_name, RESOURCED_BACKGROUND_APP_CLASSID);
else
ret = make_net_cls_cgroup(pkg_name, RESOURCED_UNKNOWN_CLASSID);
void *user_data)
{
struct net_counter_opts *opts = (struct net_counter_opts *)user_data;
- if (strcmp(result->section, GENERAL_SECTION))
+ if (strncmp(result->section, GENERAL_SECTION, strlen(GENERAL_SECTION)+1))
return RESOURCED_ERROR_NONE;
- if (strcmp(result->name, NET_UPDATE_PERIOD_NAME) == 0) {
+ if (strncmp(result->name, NET_UPDATE_PERIOD_NAME, strlen(NET_UPDATE_PERIOD_NAME)+1) == 0) {
opts->update_period = atoi(result->value);
if (opts->update_period == 0) {
_D("not valid value %s for %s key", result->value,
_D("update period is %d", opts->update_period);
}
- if (strcmp(result->name, NET_FLUSH_PERIOD_NAME) == 0) {
+ if (strncmp(result->name, NET_FLUSH_PERIOD_NAME, strlen(NET_FLUSH_PERIOD_NAME)+1) == 0) {
opts->flush_period = atoi(result->value);
if (opts->flush_period == 0) {
_D("not valid value %s for %s key", result->value,
info->app_id, context->ifindex);
#ifdef MULTISIM_FEATURE_ENABLED
const char *imsi_hash = get_imsi_hash(get_current_modem_imsi());
- if (imsi_hash && info->imsi && !strcmp(imsi_hash, info->imsi)) {
+ if (imsi_hash && info->imsi && !strncmp(imsi_hash, info->imsi, strlen(info->imsi)+1)) {
gpointer data = _create_reset_restriction(info, context->ifindex);
if (data)
context->restrictions = g_list_prepend(context->restrictions,
const char *imsi_hash = get_imsi_hash(get_current_modem_imsi());
_SD("current imsi %s", imsi_hash);
_SD("restrictions imsi %s", du_quota.imsi);
- return imsi_hash && strcmp(du_quota.imsi, imsi_hash);
+ return imsi_hash && strncmp(du_quota.imsi, imsi_hash, strlen(imsi_hash)+1);
}
return false;
}
static bool check_background_app(const char *app_id, const resourced_state_t state)
{
if (state == RESOURCED_STATE_BACKGROUND &&
- !strcmp(app_id, RESOURCED_BACKGROUND_APP_NAME)) {
+ !strncmp(app_id, RESOURCED_BACKGROUND_APP_NAME, strlen(RESOURCED_BACKGROUND_APP_NAME)+1)) {
return TRUE;
}
return FALSE;
app_classid = get_classid_by_app_id(app_id, rst_type != RST_UNSET);
if (!skip_kernel_op) {
imsi_hash = get_imsi_hash(get_current_modem_imsi());
- if (imsi_hash && rst->imsi && !strcmp(imsi_hash, rst->imsi)) {
+ if (imsi_hash && rst->imsi && !strncmp(imsi_hash, rst->imsi, strlen(rst->imsi)+1)) {
ret = process_kernel_restriction(app_classid, rst, rst_type, quota_id);
if (ret != RESOURCED_ERROR_NONE)
_E("Can't keep restriction. only update the DB");
"imsi %s, rs_type %d\n", app_id, app_classid,
store_iftype, rst_state, rst_type, rst->imsi, rst->rs_type);
#endif
- if (!strcmp(app_id, RESOURCED_ALL_APP) &&
+ if (!strncmp(app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1) &&
rst->iftype == RESOURCED_IFACE_ALL)
process_net_block_state(rst_type);
dbus_message_iter_get_basic (&prop, &property);
- if (strcmp(property, DBUS_TELEPHONY_ROAMING_STATUS) == 0) {
+ if (strncmp(property, DBUS_TELEPHONY_ROAMING_STATUS, strlen(DBUS_TELEPHONY_ROAMING_STATUS)+1) == 0) {
dbus_message_iter_next(&prop); /* it's variant here, expand it */
dbus_message_iter_recurse(&prop, &bool_iter);
ret_msg_if (dbus_message_iter_get_arg_type(&bool_iter) != DBUS_TYPE_BOOLEAN,
dbus_message_iter_get_basic (&bool_iter, &modem->roaming);
_D("Roaming state for modem %s has changed", modem->name);
_D("roaming state now is %d", modem->roaming);
- } else if (strcmp(property, DBUS_TELEPHONY_SERVICE_TYPE) == 0) {
+ } else if (strncmp(property, DBUS_TELEPHONY_SERVICE_TYPE, strlen(DBUS_TELEPHONY_SERVICE_TYPE)+1) == 0) {
dbus_message_iter_next(&prop); /* it's variant here, expand it */
dbus_message_iter_recurse(&prop, &bool_iter);
ret_msg_if (dbus_message_iter_get_arg_type(&bool_iter) != DBUS_TYPE_INT32,
struct modem_state *modem = (struct modem_state *)iter->data;
if (modem->imsi == NULL)
continue;
- if(!strcmp(imsi, modem->imsi))
+ if(!strncmp(imsi, modem->imsi, strlen(modem->imsi)+1))
return modem->imsi_hash;
}
return NULL;
/* if we don't have current_imsi_hash
* do everything as before */
return (current_imsi_hash && imsi_hash) ?
- strcmp(imsi_hash, current_imsi_hash) : false;
+ strncmp(imsi_hash, current_imsi_hash, strlen(current_imsi_hash)+1) : false;
}
static void modem_free(gpointer data)
if(!result)
return -EINVAL;
- if (strcmp(result->section, APPUSAGE_CONF_SECTION))
+ if (strncmp(result->section, APPUSAGE_CONF_SECTION, strlen(APPUSAGE_CONF_SECTION)+1))
return RESOURCED_ERROR_NO_DATA;
- if (!strcmp(result->name, "APPUSAGE")) {
- if (!strcmp(result->value, "OFF"))
+ if (!strncmp(result->name, "APPUSAGE", strlen("APPUSAGE")+1)) {
+ if (!strncmp(result->value, "OFF", 4))
return RESOURCED_ERROR_UNINITIALIZED;
appusage_favorite_htab = g_hash_table_new_full(g_str_hash,
g_str_equal, free_key, NULL);
- } else if (!strcmp(result->name, "PREDEFINE")) {
+ } else if (!strncmp(result->name, "PREDEFINE", strlen("PREDEFINE")+1)) {
g_hash_table_insert(appusage_favorite_htab,
g_strndup(result->value, strlen(result->value)), GINT_TO_POINTER(1));
}
pid = atoi(msg->argv[0]);
send_len = atoi(msg->argv[1]);
+ if (pid < 0 || send_len < 0) {
+ _E("invalid parameters");
+ goto end;
+ }
send_buffer = calloc(1, send_len);
if (send_buffer == NULL) {
_E("Not enough memory");
DBusMessage *reply;
struct meminfo mi;
int r;
+ char error_buf[256];
reply = dbus_message_new_method_return(msg);
MEMINFO_MASK_SWAP_TOTAL |
MEMINFO_MASK_SWAP_FREE);
if (r < 0) {
- _E("Failed to get meminfo: %s", strerror(-r));
+ _E("Failed to get meminfo: %s",
+ strerror_r(-r, error_buf, sizeof(error_buf)));
return reply;
}
return;
}
- if (!strcmp(str, "active"))
+ if (!strncmp(str, "active", strlen("active")+1))
type = PROC_CGROUP_SET_ACTIVE;
- else if (!strcmp(str, "inactive"))
+ else if (!strncmp(str, "inactive", strlen("inactive")+1))
type = PROC_CGROUP_SET_INACTIVE;
else
return;
if (len <= 0)
return NULL;
- if (len >= INT_MAX) {
+ if (len >= INT_MAX - 1) {
_E("size is over INT_MAX");
return NULL;
}
ret_value_if(msg->type <= 0, errno);
msg->argc = recv_int(fd);
ret_value_if(msg->argc <= 0, errno);
+ ret_value_if(msg->argc > NOTI_MAXARG, RESOURCED_ERROR_FAIL);
for (i = 0; i < msg->argc; ++i) {
msg->argv[i] = recv_str(fd);
{
int i;
+ if (!msg)
+ return;
+
for (i = 0; i < msg->argc; i++)
internal_free(msg->argv[i]);
free(msg);
struct timeval tv = { 1, 0 }; /* 1 sec */
if (!ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)) {
- _E("ecore_main_fd_handler_active_get error , return\n");
+ _E("ecore_main_fd_handler_active_get error , return");
return ECORE_CALLBACK_CANCEL;
}
fd = ecore_main_fd_handler_fd_get(fd_handler);
+ if (fd < 0) {
+ _E("ecore_main_fd_handler_fd_get failed");
+ return ECORE_CALLBACK_CANCEL;
+ }
msg = calloc(1, sizeof(struct resourced_noti));
if (msg == NULL) {
if (msg->type >= PROC_CGROUP_GET_CMDLINE) {
pid = atoi(msg->argv[0]);
send_len = atoi(msg->argv[1]);
+ if (pid <= 0 || send_len <= 0) {
+ _E("invalid parameters");
+ ret = -EINVAL;
+ safe_write_int(client_sockfd, msg->type, &ret);
+ goto proc_noti_renew;
+ }
send_buffer = calloc(1, send_len);
if (!send_buffer) {
_E("not enough memory for calloc");
fclose(fp);
return false;
}
+ buf[sizeof(buf)-1] = 0;
+
fclose(fp);
int status;
pid_t child_pid;
pid_t pid = fork();
+ char error_buf[256];
if (pid < 0) {
_E("failed to fork");
/* parent */
child_pid = waitpid(pid, &status, 0);
if (child_pid < 0) {
- _E("can't wait for a pid %d %d %s", pid, status, strerror(errno));
+ _E("can't wait for a pid %d %d %s", pid, status,
+ strerror_r(errno, error_buf, sizeof(error_buf)));
return child_pid;
}
if (!result)
return -EINVAL;
- if (strcmp(result->section, SWAP_CONTROL_SECTION))
+ if (strncmp(result->section, SWAP_CONTROL_SECTION, strlen(SWAP_CONTROL_SECTION)+1))
return RESOURCED_ERROR_NO_DATA;
- if (!strcmp(result->name, SWAP_CONF_STREAMS)) {
+ if (!strncmp(result->name, SWAP_CONF_STREAMS, strlen(SWAP_CONF_STREAMS)+1)) {
int value = atoi(result->value);
if (value > 0) {
swap_control.max_comp_streams = value;
_D("max_comp_streams of swap_control is %d",
swap_control.max_comp_streams);
}
- } else if (!strcmp(result->name, SWAP_CONF_ALGORITHM)) {
- if (!strcmp(result->value, "lzo") ||
- !strcmp(result->value, "lz4")) {
+ } else if (!strncmp(result->name, SWAP_CONF_ALGORITHM, strlen(SWAP_CONF_ALGORITHM)+1)) {
+ if (!strncmp(result->value, "lzo", 4) ||
+ !strncmp(result->value, "lz4", 4)) {
strncpy(swap_control.comp_algorithm, result->value,
strlen(result->value) + 1);
_D("comp_algorithm of swap_control is %s",
result->value);
}
- } else if (!strcmp(result->name, SWAP_CONF_RATIO)) {
+ } else if (!strncmp(result->name, SWAP_CONF_RATIO, strlen(SWAP_CONF_RATIO)+1)) {
float ratio = atof(result->value);
swap_control.ratio = ratio;
_D("swap disk size ratio is %.2f", swap_control.ratio);
- } else if (!strncmp(result->name, SWAP_HARD_LIMIT, strlen(SWAP_HARD_LIMIT))) {
+ } else if (!strncmp(result->name, SWAP_HARD_LIMIT, strlen(SWAP_HARD_LIMIT)+1)) {
limit_value = (int)strtoul(result->value, NULL, 0);
if (limit_value < 0 || limit_value > 100)
_E("Invalid %s value in %s file, setting %f as default percent value",
if (!result)
return -EINVAL;
- if (!strcmp(result->section, EXCLUDE_CONF_SECTION)) {
- if (strcmp(result->name, EXCLUDE_CONF_NAME))
+ if (!strncmp(result->section, EXCLUDE_CONF_SECTION, strlen(EXCLUDE_CONF_SECTION)+1)) {
+ if (strncmp(result->name, EXCLUDE_CONF_NAME, strlen(EXCLUDE_CONF_NAME)+1))
return RESOURCED_ERROR_NO_DATA;
pid = find_pid_from_cmdline(result->value);
if (pid > 0)
timer_slack_write(TIMER_EXCLUDE_CGROUP, CGROUP_FILE_NAME, pid);
} else {
for (i = 0; i < TIMER_SLACK_MAX; i++) {
- if (strcmp(result->section, timer_slack[i].name))
+ if (strncmp(result->section, timer_slack[i].name, strlen(timer_slack[i].name)+1))
continue;
- if (!strcmp(result->name, "timer_mode"))
+ if (!strncmp(result->name, "timer_mode", strlen("timer_mode")+1))
timer_slack[i].timer_mode = atoi(result->value);
- if (!strcmp(result->name, "min_slack_ns"))
+ if (!strncmp(result->name, "min_slack_ns", strlen("min_slack_ns")+1))
timer_slack[i].slack_value = atoi(result->value);
}
}
if (!str)
return RESOURCED_ERROR_INVALID_PARAMETER;
- if (!strcmp(optarg, "enabled")) {
+ if (!strncmp(optarg, "enabled", strlen("enabled")+1)) {
*roaming = RESOURCED_ROAMING_ENABLE;
return RESOURCED_ERROR_NONE;
}
- if (!strcmp(optarg, "disabled")) {
+ if (!strncmp(optarg, "disabled", strlen("disabled")+1)) {
*roaming = RESOURCED_ROAMING_DISABLE;
return RESOURCED_ERROR_NONE;
}
- if (!strcmp(optarg, "unknown")) {
+ if (!strncmp(optarg, "unknown", strlen("unknown")+1)) {
*roaming = RESOURCED_ROAMING_UNKNOWN;
return RESOURCED_ERROR_NONE;
}
printf("options option requeres an argument.");
exit(EXIT_FAILURE);
}
- if (optarg && strcmp(optarg, "set") == 0)
+ if (optarg && strncmp(optarg, "set", 4) == 0)
cmd = RESOURCED_SET_OPTIONS;
- else if (optarg && strcmp(optarg, "get") == 0)
+ else if (optarg && strncmp(optarg, "get", 4) == 0)
cmd = RESOURCED_GET_OPTIONS;
break;
case 'q':
struct ipt_context iptc = {0};
struct nfacct_rule rule;
enum iptables_test_cmd cmd;
+ char *saveptr;
if (argc <= 2) {
puts(" Usage: \n");
exit(1);
}
- if (strcmp(argv[1], "i") == 0) {
+ if (strncmp(argv[1], "i", 2) == 0) {
cmd = CMD_INSERT;
- } else if (strcmp(argv[1], "a") == 0) {
+ } else if (strncmp(argv[1], "a", 2) == 0) {
cmd = CMD_APPEND;
- } else if (strcmp(argv[1], "d") == 0) {
+ } else if (strncmp(argv[1], "d", 2) == 0) {
cmd = CMD_DELETE;
} else {
printf("Unknown command %s", argv[1]);
}
memset(&rule, 0, sizeof(struct nfacct_rule));
- strcpy(rule.ifname, "seth_w0");
+ snprintf(rule.ifname, sizeof(rule.ifname), "seth_w0");
resourced_ipt_begin(&iptc);
resourced_ipt_dump(&iptc);
for (i = 2; i < argc; ++i) {
opt = argv[i];
- sprintf(rule.name, pattern, opt);
- parse = strtok(opt, "_");
+ snprintf(rule.name, sizeof(rule.name), pattern, opt);
+ parse = strtok_r(opt, "_", &saveptr);
rule.iotype = atoi(parse);
- parse = strtok(NULL, "_");
+ parse = strtok_r(NULL, "_", &saveptr);
rule.iftype = atoi(parse);
- parse = strtok(NULL, "_");
+ parse = strtok_r(NULL, "_", &saveptr);
rule.classid = atoi(parse);
if (cmd == CMD_INSERT)