⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smbcomquery.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "headers.h"SmbProcessResultsmbcomqueryinformation(SmbSession *s, SmbHeader *h, uchar *, SmbBuffer *b){	SmbTree *t;	uchar fmt;	char *path;	Dir *d;	char *fullpath;	if (!smbcheckwordcount("comqueryinformation", h, 0)		|| !smbbuffergetb(b, &fmt)		|| fmt != 4		|| !smbbuffergetstring(b, h, SMB_STRING_PATH, &path))		return SmbProcessResultFormat;	t = smbidmapfind(s->tidmap, h->tid);	if (t == nil) {		free(path);		smbseterror(s, ERRSRV, ERRinvtid);		return SmbProcessResultError;	}	smblogprint(h->command, "smbcomqueryinformation: %s\n", path);	fullpath = nil;	smbstringprint(&fullpath, "%s%s", t->serv->path, path);	d = dirstat(fullpath);	free(fullpath);	free(path);	if (d == nil) {		smbseterror(s, ERRDOS, ERRbadpath);		return SmbProcessResultError;	}	h->wordcount = 10;	if (!smbbufferputheader(s->response, h, &s->peerinfo)		|| !smbbufferputs(s->response, smbplan9mode2dosattr(d->mode))		|| !smbbufferputl(s->response, smbplan9time2utime(d->mtime, s->tzoff))		|| !smbbufferputl(s->response, smbplan9length2size32(d->length))		|| !smbbufferfill(s->response, 0, 10)		|| !smbbufferputs(s->response, 0)) {		free(d);		return SmbProcessResultMisc;	}	free(d);	return SmbProcessResultReply;}SmbProcessResultsmbcomqueryinformation2(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *){	SmbTree *t;	Dir *d;	ushort fid;	ushort mtime, mdate;	ushort atime, adate;	SmbFile *f;	if (!smbcheckwordcount("comqueryinformation2", h, 1))		return SmbProcessResultFormat;	fid = smbnhgets(pdata);	t = smbidmapfind(s->tidmap, h->tid);	if (t == nil) {		smbseterror(s, ERRSRV, ERRinvtid);		return SmbProcessResultError;	}	f = smbidmapfind(s->fidmap, fid);	if (f == nil) {		smbseterror(s, ERRDOS, ERRbadfid);		return SmbProcessResultError;	}	d = dirfstat(f->fd);	if (d == nil) {		smbseterror(s, ERRDOS, ERRbadpath);		return SmbProcessResultError;	}	h->wordcount = 11;	smbplan9time2datetime(d->atime, s->tzoff, &adate, &atime);	smbplan9time2datetime(d->mtime, s->tzoff, &mdate, &mtime);	if (!smbbufferputheader(s->response, h, &s->peerinfo)		|| !smbbufferputs(s->response, mdate)		|| !smbbufferputs(s->response, mtime)		|| !smbbufferputs(s->response, adate)		|| !smbbufferputs(s->response, atime)		|| !smbbufferputs(s->response, mdate)		|| !smbbufferputs(s->response, mtime)		|| !smbbufferputl(s->response, smbplan9length2size32(d->length))		|| !smbbufferputl(s->response,			smbplan9length2size32(smbl2roundupvlong(d->length, smbglobals.l2allocationsize)))		|| !smbbufferputs(s->response, smbplan9mode2dosattr(d->mode))		|| !smbbufferputs(s->response, 0)) {		free(d);		return SmbProcessResultMisc;	}	free(d);	return SmbProcessResultReply;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -