]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/dev/ppc/stubs.c
xnu-344.23.tar.gz
[apple/xnu.git] / bsd / dev / ppc / stubs.c
index 9ba788aee18f3c06bbbfd3b2d447db398f486b58..630a1b0b625b5eaa232e6c052bf502e9600179ec 100644 (file)
@@ -3,22 +3,19 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
  * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
 #include <vm/vm_map.h>
 
 
+/* 
+ * copy a null terminated string from the kernel address space into
+ * the user address space.
+ *   - if the user is denied write access, return EFAULT.
+ *   - if the end of string isn't found before
+ *     maxlen bytes are copied,  return ENAMETOOLONG,
+ *     indicating an incomplete copy.
+ *   - otherwise, return 0, indicating success.
+ * the number of bytes copied is always returned in lencopied.
+ */
+int
+copyoutstr(from, to, maxlen, lencopied)
+    void * from, * to;
+    size_t maxlen, *lencopied;
+{
+       int slen,len,error=0;
+
+       /* XXX Must optimize this */
+
+       slen = strlen(from) + 1;
+       if (slen > maxlen)
+               error = ENAMETOOLONG;
+
+       len = min(maxlen,slen);
+       if (copyout(from, to, len))
+               error = EFAULT;
+       *lencopied = len;
+
+       return error;
+}
+
+
 /* 
  * copy a null terminated string from one point to another in 
  * the kernel address space.