Advertisement
ItsTotallyRSX

C++ CharDev

Oct 4th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. void test_devchar()
  2. {
  3.     error_t er;
  4.     OPtr<OPseudoFile> file; // do not garbage collect - such would delete the file
  5.  
  6.     if (ERROR(er = CreateTempKernFile(file)))
  7.     {
  8.         printf("couldn't create file %lli\n", er);
  9.         return;
  10.     }
  11.  
  12.     file->OnUserWrite([](OPtr<OPseudoFile> file, const void * buffer, size_t length, size_t off, size_t *bytesRead)
  13.     {
  14.         uint64_t len;
  15.         const char * path;
  16.         char msg[100];
  17.  
  18.         len = MIN(length, sizeof(msg) - 1);
  19.        
  20.         memset(msg, 0, 100);
  21.         memcpy(msg, buffer, len);
  22.  
  23.         if (msg[len - 1] == '\n')
  24.             msg[len - 1] = 0;
  25.  
  26.         if (ERROR(file->GetPath(&path)))
  27.             path = "NULL";
  28.  
  29.         LogPrint(kLogInfo, "User said: %s to device %s\n", msg, path);
  30.  
  31.         *bytesRead = length;
  32.         return true;
  33.     });
  34.  
  35.     file->OnUserRead([](OPtr<OPseudoFile> file, void * buffer, size_t length, size_t off, size_t *bytesRead)
  36.     {
  37.         const char * msg;
  38.         size_t mlen;
  39.  
  40.         msg = "Hello usermode component";
  41.         mlen = MIN(length, 25 - 1 - off);
  42.  
  43.         memcpy(buffer, &msg[off], mlen);
  44.  
  45.         *bytesRead = mlen;
  46.         return true;
  47.     });
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement