ANDROID: sdcardfs: Truncate packages_gid.list on overflow
packages_gid.list was improperly returning the wrong count. Use scnprintf instead, and inform the user that the list was truncated if it is. Bug: 30013843 Change-Id: Ida2b2ef7cd86dd87300bfb4c2cdb6bfe2ee1650d Signed-off-by: Daniel Rosenberg <drosen@google.com>
This commit is contained in:
parent
eb268d0636
commit
6897986ee3
1 changed files with 12 additions and 5 deletions
|
@ -335,12 +335,19 @@ static ssize_t packages_attr_show(struct config_item *item,
|
|||
struct hashtable_entry *hash_cur;
|
||||
struct hlist_node *h_t;
|
||||
int i;
|
||||
int count = 0;
|
||||
mutex_lock(&pkgl_data_all->hashtable_lock);
|
||||
hash_for_each_safe(pkgl_data_all->package_to_appid, i, h_t, hash_cur, hlist)
|
||||
count += snprintf(page + count, PAGE_SIZE - count, "%s %d\n", (char *)hash_cur->key, hash_cur->value);
|
||||
mutex_unlock(&pkgl_data_all->hashtable_lock);
|
||||
int count = 0, written = 0;
|
||||
char errormsg[] = "<truncated>\n";
|
||||
|
||||
mutex_lock(&pkgl_data_all->hashtable_lock);
|
||||
hash_for_each_safe(pkgl_data_all->package_to_appid, i, h_t, hash_cur, hlist) {
|
||||
written = scnprintf(page + count, PAGE_SIZE - sizeof(errormsg) - count, "%s %d\n", (char *)hash_cur->key, hash_cur->value);
|
||||
if (count + written == PAGE_SIZE - sizeof(errormsg)) {
|
||||
count += scnprintf(page + count, PAGE_SIZE - count, errormsg);
|
||||
break;
|
||||
}
|
||||
count += written;
|
||||
}
|
||||
mutex_unlock(&pkgl_data_all->hashtable_lock);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue