getpwent.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1984 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  */
  6. #if defined(LIBC_SCCS) && !defined(lint)
  7. static char sccsid[] = "@(#)getpwent.c 5.2 (Berkeley) 3/9/86";
  8. #endif
  9. #include <pthread.h>
  10. #include <stdio.h>
  11. #include <pwd.h>
  12. #include "pwd_internal.h"
  13. void
  14. setpwent()
  15. {
  16.     pwf_context_t *_data;
  17.     _data = _pw_get_data();
  18. if (_data) {
  19.   if (_data->pwf == NULL)
  20. _data->pwf = fopen(_data->pw_file, "r");
  21.   else
  22. rewind(_data->pwf);
  23. }
  24. }
  25. void
  26. endpwent()
  27. {
  28.     pwf_context_t *_data;
  29. _data = _pw_get_data();
  30. if (_data) {
  31.   if (_data->pwf != NULL) {
  32. fclose(_data->pwf);
  33. _data->pwf = NULL;
  34.   }
  35. #ifdef DBM_PWD_SUPPORT
  36.   if (_data->pw_db != (DBM *)0) {
  37. dbm_close(_data->pw_db);
  38. _data->pw_db = (DBM *)0;
  39. _data->pw_stayopen = 0;
  40.   }
  41. #endif /* DBM_PWD_SUPPORT */
  42.     }
  43. }
  44. static char *
  45. pwskip(p)
  46.  char *p;
  47. {
  48. while (*p && *p != ':' && *p != 'n')
  49. ++p;
  50. if (*p)
  51. *p++ = 0;
  52. return(p);
  53. }
  54. struct passwd *
  55. getpwent()
  56. {
  57.     pwf_context_t *_data;
  58. char *p;
  59. _data = _pw_get_data();
  60. if (!_data)
  61.     return 0;
  62. if (_data->pwf == NULL) {
  63. if ((_data->pwf = fopen(_data->pw_file, "r" )) == NULL)
  64. return(0);
  65. }
  66. p = fgets(_data->line, BUFSIZ, _data->pwf);
  67. if (p == NULL)
  68. return(0);
  69. _data->passwd.pw_name = p;
  70. p = pwskip(p);
  71. _data->passwd.pw_passwd = p;
  72. p = pwskip(p);
  73. _data->passwd.pw_uid = atoi(p);
  74. p = pwskip(p);
  75. _data->passwd.pw_gid = atoi(p);
  76. p = pwskip(p);
  77. _data->passwd.pw_gecos = p;
  78. p = pwskip(p);
  79. _data->passwd.pw_dir = p;
  80. p = pwskip(p);
  81. _data->passwd.pw_shell = p;
  82. while (*p && *p != 'n')
  83. p++;
  84. *p = '';
  85. return(&_data->passwd);
  86. }
  87. void
  88. setpwfile(file)
  89. char *file;
  90. {
  91.     pwf_context_t *_data;
  92. _data = _pw_get_data();
  93. if (_data)
  94.     _data->pw_file = file;
  95. }