The binary data and avatar info (user id, filename, size, width, etc...) have to be inserted into the customavatar table.
You don't have to do that manually - there is a data manager. Look at the if($_POST['do'] == 'updateavatar') code in profile.php. Of special interest is:
PHP Code:
// begin custom avatar code
require_once(DIR . '/includes/class_upload.php');
require_once(DIR . '/includes/class_image.php');
$upload = new vB_Upload_Userpic($vbulletin);
$upload->data =& datamanager_init('Userpic_Avatar', $vbulletin, ERRTYPE_STANDARD, 'userpic');
$upload->image =& vB_Image::fetch_library($vbulletin);
$upload->maxwidth = $vbulletin->userinfo['permissions']['avatarmaxwidth'];
$upload->maxheight = $vbulletin->userinfo['permissions']['avatarmaxheight'];
$upload->maxuploadsize = $vbulletin->userinfo['permissions']['avatarmaxsize'];
$upload->allowanimation = ($vbulletin->userinfo['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['cananimateavatar']) ? true : false;
if (!$upload->process_upload($vbulletin->GPC['avatarurl']))
{
eval(standard_error($upload->fetch_error()));
}