~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/unistd/io.c

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-09-20 22:44:35 UTC
  • mfrom: (4.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20130920224435-apuwj4fsl3fqv1a6
Tags: 1.5.6~20130920~6010666-1
* New snapshot release
* Update the list of supported architectures to the same as libv8
  (Closes: #723129)
* emlibtool has been removed from upstream.
* Fix warning syntax-error-in-dep5-copyright
* Refresh of the patches

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
#include <unistd.h>
4
4
#include <fcntl.h>
5
5
#include <string.h>
 
6
#include <emscripten.h>
6
7
 
7
8
int main() {
 
9
  EM_ASM(
 
10
    var major = 80;
 
11
 
 
12
    var device = FS.makedev(major++, 0);
 
13
    FS.registerDevice(device, {
 
14
      open: function(stream) {
 
15
        stream.payload = [65, 66, 67, 68];
 
16
      },
 
17
      read: function(stream, buffer, offset, length, pos) {
 
18
        var bytesRead = 0;
 
19
        for (var i = 0; i < length; i++) {
 
20
          if (stream.payload.length) {
 
21
            bytesRead++;
 
22
            buffer[offset+i] = stream.payload.shift();
 
23
          } else {
 
24
            break;
 
25
          }
 
26
        }
 
27
        return bytesRead;
 
28
      },
 
29
      write: function(stream, buffer, offset, length, pos) {
 
30
        for (var i = 0; i < length; i++) {
 
31
          Module.print('TO DEVICE: ' + buffer[offset+i]);
 
32
        }
 
33
        return i;
 
34
      }
 
35
    });
 
36
    FS.mkdev('/device', device);
 
37
 
 
38
    var broken_device = FS.makedev(major++, 0);
 
39
    FS.registerDevice(broken_device, {
 
40
      read: function(stream, buffer, offset, length, pos) {
 
41
        throw new FS.ErrnoError(ERRNO_CODES.EIO);
 
42
      },
 
43
      write: function(stream, buffer, offset, length, pos) {
 
44
        throw new FS.ErrnoError(ERRNO_CODES.EIO);
 
45
      }
 
46
    });
 
47
    FS.mkdev('/broken-device', broken_device);
 
48
 
 
49
    // NB: These are meant to test FS.createDevice specifically,
 
50
    //     and as such do not use registerDevice/mkdev
 
51
    FS.createDevice('/', 'createDevice-read-only', function() {});
 
52
    FS.createDevice('/', 'createDevice-write-only', null, function() {});
 
53
 
 
54
    FS.mkdir('/folder', 0777);
 
55
    FS.writeFile('/file', '1234567890');
 
56
  );
 
57
 
8
58
  char readBuffer[256] = {0};
9
59
  char writeBuffer[] = "writeme";
10
60
 
34
84
  printf("errno: %d\n\n", errno);
35
85
  errno = 0;
36
86
 
 
87
  int cd_ro_r = open("/createDevice-read-only", O_RDONLY);
 
88
  printf("open read-only device from createDevice for read, errno: %d\n", errno);
 
89
  errno = 0;
 
90
  int cd_ro_w = open("/createDevice-read-only", O_WRONLY);
 
91
  printf("open read-only device from createDevice for write, errno: %d\n", errno);
 
92
  errno = 0;
 
93
  int cd_wo_r = open("/createDevice-write-only", O_RDONLY);
 
94
  printf("open write-only device from createDevice for read, errno: %d\n", errno);
 
95
  errno = 0;
 
96
  int cd_wo_w = open("/createDevice-write-only", O_WRONLY);
 
97
  printf("open write-only device from createDevice for write, errno: %d\n\n", errno);
 
98
  errno = 0;
 
99
 
37
100
  int f = open("/file", O_RDWR);
38
101
  printf("read from file: %d\n", read(f, readBuffer, sizeof readBuffer));
39
102
  printf("data: %s\n", readBuffer);