예제 #1
0
static int on_client_createcharreq(t_connection * c, t_packet * packet)
{
	t_packet	* rpacket, * bnpacket;
	char const	* charname;
	char const	* account;
	char            * path;
	t_pdir          * dir;
	t_sq		* sq;
	unsigned int	reply;
	unsigned short	status, class;
	t_d2charinfo_file	data;

	if (!(charname=packet_get_str_const(packet,sizeof(t_client_d2cs_createcharreq),MAX_CHARNAME_LEN))) {
		eventlog(eventlog_level_error,__FUNCTION__,"got bad character name");
		return -1;
	}
	if (!(account=d2cs_conn_get_account(c))) {
		eventlog(eventlog_level_error,__FUNCTION__,"missing account for character %s",charname);
		return -1;
	}
	class=bn_short_get(packet->u.client_d2cs_createcharreq.class);
	status=bn_short_get(packet->u.client_d2cs_createcharreq.status);

	path=xmalloc(strlen(prefs_get_charinfo_dir())+1+strlen(account)+1);
	d2char_get_infodir_name(path,account);
	if (!(dir=p_opendir(path))) {
	        eventlog(eventlog_level_info,__FUNCTION__,"(*%s) charinfo directory do not exist, building it",account);
		p_mkdir(path,S_IRWXU);
	} else p_closedir(dir);
	xfree(path);

	if (d2char_create(account,charname,class,status)<0) {
		eventlog(eventlog_level_warn,__FUNCTION__,"error create character %s for account %s",charname,account);
		reply=D2CS_CLIENT_CREATECHARREPLY_ALREADY_EXIST;
	} else if (d2charinfo_load(account,charname,&data)<0) {
예제 #2
0
파일: mail.c 프로젝트: 91D2/pvpgn
static void mailbox_close(t_mailbox *mailbox) {
   if (mailbox==NULL) return;
   if (mailbox->maildir!=NULL) {
      p_closedir(mailbox->maildir);
   } else {
      eventlog(eventlog_level_error,__FUNCTION__,"got NULL maildir");
   }
   if (mailbox->path) xfree(mailbox->path);
   xfree(mailbox);
}