cap_alloc.c
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:2k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: cap_alloc.c,v 1.2 1999/09/07 23:14:19 macgyver Exp $
  3.  *
  4.  * Copyright (c) 1997-8 Andrew G Morgan <morgan@linux.kernel.org>
  5.  *
  6.  * See end of file for Log.
  7.  *
  8.  * This file deals with allocation and deallocation of internal
  9.  * capability sets as specified by POSIX.1e (formerlly, POSIX 6).
  10.  */
  11. #include "libcap.h"
  12. /*
  13.  * This function duplicates an internal capability set (x3) with
  14.  * malloc()'d memory. It is the responsibility of the user to call
  15.  * cap_free() to liberate it.
  16.  */
  17. cap_t cap_dup(cap_t cap_d)
  18. {
  19.     cap_t result;
  20.     if (!good_cap_t(cap_d)) {
  21. _cap_debug("bad argument");
  22. errno = EINVAL;
  23. return NULL;
  24.     }
  25.     result = (cap_t) malloc( sizeof(*cap_d) );
  26.     if (result == NULL) {
  27. _cap_debug("out of memory");
  28. errno = ENOMEM;
  29. return NULL;
  30.     }
  31.     memcpy(result, cap_d, sizeof(*cap_d));
  32.     return result;
  33. }
  34. /*
  35.  * Scrub and then liberate an internal capability set.
  36.  */
  37. int cap_free(cap_t *cap_d_p)
  38. {
  39.     if ( cap_d_p && good_cap_t(*cap_d_p) ) {
  40. memset(*cap_d_p, 0, sizeof(**cap_d_p));
  41. free(*cap_d_p);
  42. *cap_d_p = NULL;
  43. return 0;
  44.     } else {
  45. _cap_debug("no capability to liberate");
  46. errno = EINVAL;
  47. return -1;
  48.     }
  49. }
  50. /*
  51.  * Obtain a blank set of capabilities
  52.  */
  53. cap_t cap_init(void)
  54. {
  55.     cap_t result = (cap_t) calloc( 1, sizeof(*result) );
  56.     if (result) {
  57. result->magic = CAP_T_MAGIC;
  58. result->head.version = _LINUX_CAPABILITY_VERSION;
  59.     } else {
  60. errno = ENOMEM;
  61.     }
  62.     return result;
  63. }
  64. /*
  65.  * $Log: cap_alloc.c,v $
  66.  * Revision 1.2  1999/09/07 23:14:19  macgyver
  67.  * Updated capabilities library and model.
  68.  *
  69.  * Revision 1.1.1.1  1999/04/17 22:16:31  morgan
  70.  * release 1.0 of libcap
  71.  *
  72.  * Revision 1.3  1998/05/24 22:54:09  morgan
  73.  * updated for 2.1.104
  74.  *
  75.  * Revision 1.2  1997/04/28 00:57:11  morgan
  76.  * fixes and zefram's patches
  77.  *
  78.  * Revision 1.1  1997/04/21 04:32:52  morgan
  79.  * Initial revision
  80.  *
  81.  */