MCPcopy Create free account
hub / github.com/F-Stack/f-stack / krping_write

Function krping_write

freebsd/contrib/rdma/krping/krping_dev.c:168–214  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

166}
167
168static int
169krping_write(struct cdev *dev, struct uio *uio, int ioflag)
170{
171 int err = 0;
172 int amt;
173 int remain = BUFFERSIZE;
174 char *cp;
175 krping_t *krpingmsg;
176
177 krpingmsg = malloc(sizeof *krpingmsg, M_DEVBUF, M_WAITOK|M_ZERO);
178 if (!krpingmsg) {
179 uprintf("Could not malloc mem!\n");
180 return ENOMEM;
181 }
182
183 cp = krpingmsg->msg;
184 while (uio->uio_resid) {
185 amt = MIN(uio->uio_resid, remain);
186 if (amt == 0)
187 break;
188
189 /* Copy the string in from user memory to kernel memory */
190 err = uiomove(cp, amt, uio);
191 if (err) {
192 uprintf("Write failed: bad address!\n");
193 goto done;
194 }
195 cp += amt;
196 remain -= amt;
197 }
198
199 if (uio->uio_resid != 0) {
200 uprintf("Message too big. max size is %d!\n", BUFFERSIZE);
201 err = EMSGSIZE;
202 goto done;
203 }
204
205 /* null terminate and remove the \n */
206 cp--;
207 *cp = 0;
208 krpingmsg->len = (unsigned long)(cp - krpingmsg->msg);
209 uprintf("krping: write string = |%s|\n", krpingmsg->msg);
210 err = krping_doit(krpingmsg->msg);
211done:
212 free(krpingmsg, M_DEVBUF);
213 return(err);
214}
215
216static void
217krping_purge(struct cdev *dev __unused)

Callers

nothing calls this directly

Calls 5

mallocFunction · 0.85
uprintfFunction · 0.85
krping_doitFunction · 0.85
uiomoveFunction · 0.50
freeFunction · 0.50

Tested by

no test coverage detected