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

📄 smbcomsetinfo.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "headers.h"SmbProcessResultsmbcomsetinformation2(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *){	ushort fid, adate, atime, mdate, mtime;	SmbTree *t;	SmbFile *f;	Dir d;	if (h->wordcount != 7)		return SmbProcessResultFormat;	fid = smbnhgets(pdata);	adate = smbnhgets(pdata + 6);	atime = smbnhgets(pdata + 8);	mdate = smbnhgets(pdata + 10);	mtime = smbnhgets(pdata + 12);	smblogprint(h->command,		"smbcomsetinformation2: fid 0x%.4ux adate 0x%.4ux atime 0x%.4ux mdate 0x%.4ux mtime 0x%.4ux\n",		fid, adate, atime, mdate, mtime);	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;	}	memset(&d, 0xff, sizeof(d));	d.name = d.uid = d.gid = d.muid = nil;	if (adate || atime || mdate || mtime) {//smblogprint(-1, "smbcomsetinformation2: changing times not implemented\n");//		return SmbProcessResultUnimp;		/* something to change */		if (!(adate && atime && mdate && mtime)) {			/* some null entries */			ushort odate, otime;			Dir *od = dirfstat(f->fd);			if (od == nil) {				smbseterror(s, ERRDOS, ERRnoaccess);				return SmbProcessResultError;			}			if (adate || atime) {				/* something changed in access time */				if (!(adate && atime)) {					/* some nulls in access time */					smbplan9time2datetime(d.atime, s->tzoff, &odate, &otime);					if (adate == 0)						adate = odate;					if (atime == 0)						atime = otime;				}				d.atime = smbdatetime2plan9time(adate, atime, s->tzoff);			}			if (mdate || mtime) {				/* something changed in modify time */				if (!(mdate && mtime)) {					/* some nulls in modify time */					smbplan9time2datetime(d.mtime, s->tzoff, &odate, &otime);					if (mdate == 0)						mdate = odate;					if (mtime == 0)						mtime = otime;				}				d.mtime = smbdatetime2plan9time(mdate, mtime, s->tzoff);			}			free(od);		}		if (dirfwstat(f->fd, &d) < 0) {			smbseterror(s, ERRDOS, ERRnoaccess);			return SmbProcessResultError;		}	}	return smbbufferputack(s->response, h, &s->peerinfo);}SmbProcessResultsmbcomsetinformation(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *b){	ushort attr;	ulong utime;	char *name;	if (h->wordcount != 8)		return SmbProcessResultFormat;	attr = smbnhgets(pdata); pdata += 2;	utime = smbnhgetl(pdata);	if (!smbbuffergetstring(b, h, SMB_STRING_PATH, &name))		return SmbProcessResultFormat;	smblogprint(h->command,		"smbcomsetinformation: attr 0x%.4ux utime %lud path %s\n",		attr, utime, name);	if (utime) {		Dir d;		memset(&d, 0xff, sizeof(d));		d.name = d.uid = d.gid = d.muid = nil;		d.mtime = smbutime2plan9time(utime, s->tzoff);		if (dirwstat(name, &d) < 0) {			smbseterror(s, ERRDOS, ERRnoaccess);			free(name);			return SmbProcessResultError;		}	}	free(name);			return smbbufferputack(s->response, h, &s->peerinfo);}

⌨️ 快捷键说明

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