From 02165000f2941460fac686a76ec31f555285a653 Mon Sep 17 00:00:00 2001 From: jongfoster Date: Sun, 19 May 2002 11:34:35 +0000 Subject: [PATCH] Handling read-only actions files better - report the actual error, not "Out of memory"! Bug report: http://sourceforge.net/tracker/index.php?func=detail &aid=557905&group_id=11118&atid=111118 --- cgiedit.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/cgiedit.c b/cgiedit.c index 348feb0b..c447baa3 100644 --- a/cgiedit.c +++ b/cgiedit.c @@ -1,4 +1,4 @@ -const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.38 2002/05/03 23:00:38 jongfoster Exp $"; +const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.39 2002/05/12 21:39:15 jongfoster Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgiedit.c,v $ @@ -42,6 +42,10 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.38 2002/05/03 23:00:38 jongfoster * * Revisions : * $Log: cgiedit.c,v $ + * Revision 1.39 2002/05/12 21:39:15 jongfoster + * - Adding Doxygen-style comments to structures and #defines. + * - Correcting function comments + * * Revision 1.38 2002/05/03 23:00:38 jongfoster * Support for templates for "standard actions" buttons. * See bug #549871 @@ -426,6 +430,9 @@ jb_err cgi_error_parse(struct client_state *csp, jb_err cgi_error_file(struct client_state *csp, struct http_response *rsp, const char *filename); +jb_err cgi_error_file_read_only(struct client_state *csp, + struct http_response *rsp, + const char *filename); jb_err cgi_error_disabled(struct client_state *csp, struct http_response *rsp); @@ -2278,6 +2285,51 @@ jb_err cgi_error_file(struct client_state *csp, } +/********************************************************************* + * + * Function : cgi_error_file + * + * Description : CGI function that is called when a file cannot be + * opened for writing by the CGI editor. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * 2 : rsp = http_response data structure for output + * 3 : filename = The file that we can't write to + * + * CGI Parameters : none + * + * Returns : JB_ERR_OK on success + * JB_ERR_MEMORY on out-of-memory error. + * + *********************************************************************/ +jb_err cgi_error_file_read_only(struct client_state *csp, + struct http_response *rsp, + const char *filename) +{ + struct map *exports; + jb_err err; + + assert(csp); + assert(rsp); + assert(filename); + + if (NULL == (exports = default_exports(csp, NULL))) + { + return JB_ERR_MEMORY; + } + + err = map(exports, "f", 1, html_encode(filename), 0); + if (err) + { + free_map(exports); + return err; + } + + return template_fill_for_cgi(csp, "cgi-error-file-read-only", exports, rsp); +} + + /********************************************************************* * * Function : cgi_error_disabled @@ -3259,6 +3311,11 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } @@ -3381,6 +3438,11 @@ jb_err cgi_edit_actions_url(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } @@ -3520,6 +3582,11 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } @@ -3636,6 +3703,11 @@ jb_err cgi_edit_actions_remove_url(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } @@ -3768,6 +3840,11 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } @@ -3942,6 +4019,11 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } @@ -4140,6 +4222,11 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, if (err) { /* Error writing file */ + if (err == JB_ERR_FILE) + { + /* Read-only file. */ + err = cgi_error_file_read_only(csp, rsp, file->identifier); + } edit_free_file(file); return err; } -- 2.39.2