ioctl.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  ioctl.c
  3.  *
  4.  *  Copyright (C) 1995, 1996 by Volker Lendecke
  5.  *  Copyright (C) 1997 by Volker Lendecke
  6.  *
  7.  *  Please add a note about your changes to smbfs in the ChangeLog file.
  8.  */
  9. #include <linux/errno.h>
  10. #include <linux/fs.h>
  11. #include <linux/ioctl.h>
  12. #include <linux/sched.h>
  13. #include <linux/mm.h>
  14. #include <linux/highuid.h>
  15. #include <linux/smb_fs.h>
  16. #include <linux/smb_mount.h>
  17. #include <asm/uaccess.h>
  18. #include "proto.h"
  19. int
  20. smb_ioctl(struct inode *inode, struct file *filp,
  21.   unsigned int cmd, unsigned long arg)
  22. {
  23. struct smb_sb_info *server = server_from_inode(inode);
  24. struct smb_conn_opt opt;
  25. int result = -EINVAL;
  26. switch (cmd) {
  27. case SMB_IOC_GETMOUNTUID:
  28. result = put_user(NEW_TO_OLD_UID(server->mnt->mounted_uid),
  29.   (uid16_t *) arg);
  30. break;
  31. case SMB_IOC_GETMOUNTUID32:
  32. result = put_user(server->mnt->mounted_uid, (uid_t *) arg);
  33. break;
  34. case SMB_IOC_NEWCONN:
  35. /* arg is smb_conn_opt, or NULL if no connection was made */
  36. if (!arg) {
  37. result = smb_wakeup(server);
  38. break;
  39. }
  40. result = -EFAULT;
  41. if (!copy_from_user(&opt, (void *)arg, sizeof(opt)))
  42. result = smb_newconn(server, &opt);
  43. break;
  44. default:
  45. break;
  46. }
  47. return result;
  48. }