Subversion Repositories Kolibri OS

Rev

Rev 8699 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include "stddef.h"
  2. #include <sys/ksys.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define DEV_ADD_DISK 1
  7.  
  8. #define TMPDISK_SIZE 10 //Mb
  9.  
  10. #pragma pack(push, 1)
  11. struct{
  12.         unsigned disk_size;
  13.         unsigned char disk_id;
  14. }tmpdisk_add;
  15. #pragma pack(pop)
  16.  
  17. char *tmpdisk_res_text[]={
  18.         "TmpDisk operation completed successfully",
  19.         "Unknown IOCTL code, wrong input/output size...",
  20.         "DiskId must be from 0 to 9",
  21.         "DiskSize is too large",
  22.         "DiskSize is too small, might be too little free RAM",
  23.         "Memory allocation failed",
  24.         "Unknown error O_o",
  25.         0};
  26.  
  27.  
  28. int main(){
  29.     ksys_drv_hand_t tmpdisk_drv = _ksys_load_driver("tmpdisk");
  30.     if(!tmpdisk_drv){
  31.         puts("tmpdisk.sys driver not load!");
  32.         exit(0);
  33.     }else{
  34.         puts("tmpdisk.sys driver is load!");
  35.     }
  36.    
  37.     tmpdisk_add.disk_size = TMPDISK_SIZE*1024*1024/512;
  38.     tmpdisk_add.disk_id = 5;
  39.    
  40.     ksys_ioctl_t ioctl;
  41.     ioctl.func_num = DEV_ADD_DISK;
  42.     ioctl.handler = tmpdisk_drv;
  43.     ioctl.in_data_ptr = &tmpdisk_add;
  44.     ioctl.in_data_size = sizeof(tmpdisk_add);
  45.     ioctl.out_data_ptr = NULL;
  46.     ioctl.out_data_size = 0;
  47.  
  48.     printf("Create '/tmp%u/' disk a %u Mb size...\n", tmpdisk_add.disk_id, TMPDISK_SIZE);
  49.     unsigned status =_ksys_work_driver(&ioctl);
  50.     if(status<7){
  51.         puts(tmpdisk_res_text[status]);
  52.     }else{
  53.         puts(tmpdisk_res_text[6]);
  54.     }
  55.     exit(0);
  56. }
  57.