Subversion Repositories Kolibri OS

Rev

Rev 5191 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5191 Rev 6324
Line 61... Line 61...
61
int
61
int
62
simple_object_internal_read (int descriptor, off_t offset,
62
simple_object_internal_read (int descriptor, off_t offset,
63
			     unsigned char *buffer, size_t size,
63
			     unsigned char *buffer, size_t size,
64
			     const char **errmsg, int *err)
64
			     const char **errmsg, int *err)
65
{
65
{
66
  ssize_t got;
-
 
67
 
-
 
68
  if (lseek (descriptor, offset, SEEK_SET) < 0)
66
  if (lseek (descriptor, offset, SEEK_SET) < 0)
69
    {
67
    {
70
      *errmsg = "lseek";
68
      *errmsg = "lseek";
71
      *err = errno;
69
      *err = errno;
72
      return 0;
70
      return 0;
73
    }
71
    }
Line -... Line 72...
-
 
72
 
-
 
73
  do
74
 
74
    {
75
  got = read (descriptor, buffer, size);
75
      ssize_t got = read (descriptor, buffer, size);
-
 
76
      if (got == 0)
-
 
77
	break;
-
 
78
      else if (got > 0)
-
 
79
	{
-
 
80
	  buffer += got;
-
 
81
	  size -= got;
-
 
82
	}
76
  if (got < 0)
83
      else if (errno != EINTR)
77
    {
84
    {
78
      *errmsg = "read";
85
      *errmsg = "read";
79
      *err = errno;
86
      *err = errno;
80
      return 0;
87
      return 0;
-
 
88
    }
-
 
89
    }
Line 81... Line 90...
81
    }
90
  while (size > 0);
82
 
91
 
83
  if ((size_t) got < size)
92
  if (size > 0)
84
    {
93
    {
85
      *errmsg = "file too short";
94
      *errmsg = "file too short";
86
      *err = 0;
95
      *err = 0;
Line 96... Line 105...
96
int
105
int
97
simple_object_internal_write (int descriptor, off_t offset,
106
simple_object_internal_write (int descriptor, off_t offset,
98
			      const unsigned char *buffer, size_t size,
107
			      const unsigned char *buffer, size_t size,
99
			      const char **errmsg, int *err)
108
			      const char **errmsg, int *err)
100
{
109
{
101
  ssize_t wrote;
-
 
102
 
-
 
103
  if (lseek (descriptor, offset, SEEK_SET) < 0)
110
  if (lseek (descriptor, offset, SEEK_SET) < 0)
104
    {
111
    {
105
      *errmsg = "lseek";
112
      *errmsg = "lseek";
106
      *err = errno;
113
      *err = errno;
107
      return 0;
114
      return 0;
108
    }
115
    }
Line -... Line 116...
-
 
116
 
-
 
117
  do
109
 
118
    {
110
  wrote = write (descriptor, buffer, size);
119
      ssize_t wrote = write (descriptor, buffer, size);
-
 
120
      if (wrote == 0)
-
 
121
	break;
-
 
122
      else if (wrote > 0)
-
 
123
	{
-
 
124
	  buffer += wrote;
-
 
125
	  size -= wrote;
-
 
126
	}
111
  if (wrote < 0)
127
      else if (errno != EINTR)
112
    {
128
    {
113
      *errmsg = "write";
129
      *errmsg = "write";
114
      *err = errno;
130
      *err = errno;
115
      return 0;
131
      return 0;
-
 
132
    }
-
 
133
    }
Line 116... Line 134...
116
    }
134
  while (size > 0);
117
 
135
 
118
  if ((size_t) wrote < size)
136
  if (size > 0)
119
    {
137
    {
120
      *errmsg = "short write";
138
      *errmsg = "short write";
121
      *err = 0;
139
      *err = 0;