ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/modules/m_help.c
(Generate patch)

Comparing ircd-hybrid/trunk/modules/m_help.c (file contents):
Revision 1699 by michael, Thu Dec 20 11:40:50 2012 UTC vs.
Revision 2045 by michael, Wed May 15 15:32:01 2013 UTC

# Line 34 | Line 34
34  
35   #define HELPLEN 400
36  
37 static void dohelp(struct Client *, const char *, char *);
38 static void sendhelpfile(struct Client *, const char *, const char *);
37  
40
41 /*
42 * m_help - HELP message handler
43 *      parv[0] = sender prefix
44 */
38   static void
39 < m_help(struct Client *client_p, struct Client *source_p,
47 <       int parc, char *parv[])
39 > sendhelpfile(struct Client *source_p, const char *path, const char *topic)
40   {
41 <  static time_t last_used = 0;
41 >  FILE *file = NULL;
42 >  char line[HELPLEN] = { '\0' };
43  
44 <  /* HELP is always local */
52 <  if ((last_used + ConfigFileEntry.pace_wait_simple) > CurrentTime)
44 >  if ((file = fopen(path, "r")) == NULL)
45    {
46 <    /* safe enough to give this on a local connect only */
47 <    sendto_one(source_p,form_str(RPL_LOAD2HI),
56 <               me.name, source_p->name);
46 >    sendto_one(source_p, form_str(ERR_HELPNOTFOUND),
47 >               me.name, source_p->name, topic);
48      return;
49    }
50  
51 <  last_used = CurrentTime;
51 >  if (fgets(line, sizeof(line), file) == NULL)
52 >  {
53 >    sendto_one(source_p, form_str(ERR_HELPNOTFOUND),
54 >               me.name, source_p->name, topic);
55 >    return;
56 >  }
57  
58 <  dohelp(source_p, UHPATH, parv[1]);
59 < }
58 >  line[strlen(line) - 1] = '\0';
59 >  sendto_one(source_p, form_str(RPL_HELPSTART),
60 >             me.name, source_p->name, topic, line);
61  
62 < /*
63 < * mo_help - HELP message handler
64 < *      parv[0] = sender prefix
68 < */
69 < static void
70 < mo_help(struct Client *client_p, struct Client *source_p,
71 <        int parc, char *parv[])
72 < {
73 <  dohelp(source_p, HPATH, parv[1]);
74 < }
62 >  while (fgets(line, sizeof(line), file))
63 >  {
64 >    line[strlen(line) - 1] = '\0';
65  
66 < /*
67 < * mo_uhelp - HELP message handler
68 < * This is used so that opers can view the user help file without deopering
69 < *      parv[0] = sender prefix
70 < */
71 < static void
72 < mo_uhelp(struct Client *client_p, struct Client *source_p,
83 <            int parc, char *parv[])
84 < {
85 <  dohelp(source_p, UHPATH, parv[1]);
66 >    sendto_one(source_p, form_str(RPL_HELPTXT),
67 >               me.name, source_p->name, topic, line);
68 >  }
69 >
70 >  fclose(file);
71 >  sendto_one(source_p, form_str(RPL_ENDOFHELP),
72 >             me.name, source_p->name, topic);
73   }
74  
75   static void
76 < dohelp(struct Client *source_p, const char *hpath, char *topic)
76 > dohelp(struct Client *source_p, char *topic)
77   {
78 +  char *p = topic;
79    char h_index[] = "index";
80 <  char path[PATH_MAX + 1];
80 >  char path[HYB_PATH_MAX + 1];
81    struct stat sb;
94  unsigned int i;
82  
83    if (EmptyString(topic))
84      topic = h_index;
85    else
86 <    for (i = 0; topic[i] != '\0'; ++i)
87 <      topic[i] = ToLower(topic[i]);
86 >    for (; *p; ++p)
87 >      *p = ToLower(*p);
88  
89    if (strpbrk(topic, "/\\"))
90    {
# Line 106 | Line 93 | dohelp(struct Client *source_p, const ch
93      return;
94    }
95  
96 <  if (strlen(hpath) + strlen(topic) + 1 > PATH_MAX)
96 >  if (strlen(HPATH) + strlen(topic) + 1 > HYB_PATH_MAX)
97    {
98      sendto_one(source_p, form_str(ERR_HELPNOTFOUND),
99                 me.name, source_p->name, topic);
100      return;
101    }
102  
103 <  snprintf(path, sizeof(path), "%s/%s", hpath, topic);
103 >  snprintf(path, sizeof(path), "%s/%s", HPATH, topic);
104  
105    if (stat(path, &sb) < 0)
106    {
# Line 132 | Line 119 | dohelp(struct Client *source_p, const ch
119    sendhelpfile(source_p, path, topic);
120   }
121  
122 < static void
123 < sendhelpfile(struct Client *source_p, const char *path, const char *topic)
122 > /*
123 > * m_help - HELP message handler
124 > *      parv[0] = sender prefix
125 > */
126 > static void
127 > m_help(struct Client *client_p, struct Client *source_p,
128 >       int parc, char *parv[])
129   {
130 <  FILE *file;
139 <  char line[HELPLEN];
140 <
141 <  if ((file = fopen(path, "r")) == NULL)
142 <  {
143 <    sendto_one(source_p, form_str(ERR_HELPNOTFOUND),
144 <               me.name, source_p->name, topic);
145 <    return;
146 <  }
130 >  static time_t last_used = 0;
131  
132 <  if (fgets(line, sizeof(line), file) == NULL)
132 >  /* HELP is always local */
133 >  if ((last_used + ConfigFileEntry.pace_wait_simple) > CurrentTime)
134    {
135 <    sendto_one(source_p, form_str(ERR_HELPNOTFOUND),
136 <               me.name, source_p->name, topic);
135 >    /* safe enough to give this on a local connect only */
136 >    sendto_one(source_p,form_str(RPL_LOAD2HI),
137 >               me.name, source_p->name);
138      return;
139    }
140  
141 <  line[strlen(line) - 1] = '\0';
156 <  sendto_one(source_p, form_str(RPL_HELPSTART),
157 <             me.name, source_p->name, topic, line);
158 <
159 <  while (fgets(line, sizeof(line), file))
160 <  {
161 <    line[strlen(line) - 1] = '\0';
141 >  last_used = CurrentTime;
142  
143 <    sendto_one(source_p, form_str(RPL_HELPTXT),
144 <               me.name, source_p->name, topic, line);
165 <  }
143 >  dohelp(source_p, parv[1]);
144 > }
145  
146 <  fclose(file);
147 <  sendto_one(source_p, form_str(RPL_ENDOFHELP),
148 <             me.name, source_p->name, topic);
146 > /*
147 > * mo_help - HELP message handler
148 > *      parv[0] = sender prefix
149 > */
150 > static void
151 > mo_help(struct Client *client_p, struct Client *source_p,
152 >        int parc, char *parv[])
153 > {
154 >  dohelp(source_p, parv[1]);
155   }
156  
157   static struct Message help_msgtab = {
# Line 174 | Line 159 | static struct Message help_msgtab = {
159    {m_unregistered, m_help, m_ignore, m_ignore, mo_help, m_ignore}
160   };
161  
177 static struct Message uhelp_msgtab = {
178  "UHELP", 0, 0, 0, MAXPARA, MFLG_SLOW, 0,
179  {m_unregistered, m_help, m_ignore, m_ignore, mo_uhelp, m_ignore}
180 };
181
162   static void
163   module_init(void)
164   {
165    mod_add_cmd(&help_msgtab);
186  mod_add_cmd(&uhelp_msgtab);
166   }
167  
168   static void
169   module_exit(void)
170   {
171    mod_del_cmd(&help_msgtab);
193  mod_del_cmd(&uhelp_msgtab);
172   }
173  
174   struct module module_entry = {

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)