diff --git a/swad_account.c b/swad_account.c index 219c2051..bc774fa1 100644 --- a/swad_account.c +++ b/swad_account.c @@ -25,6 +25,8 @@ /*********************************** Headers *********************************/ /*****************************************************************************/ +#define _GNU_SOURCE // For asprintf +#include // For asprintf #include // For string functions #include "swad_account.h" @@ -436,13 +438,13 @@ void Acc_ShowFormGoToRequestNewAccount (void) extern const char *Hlp_PROFILE_SignUp; extern const char *Txt_New_on_PLATFORM_Sign_up; extern const char *Txt_Create_account; + char *Title; /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_New_on_PLATFORM_Sign_up, - Cfg_PLATFORM_SHORT_NAME), - NULL,NULL, - Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE); - Str_FreeStrings (); + if (asprintf (&Title,Txt_New_on_PLATFORM_Sign_up,Cfg_PLATFORM_SHORT_NAME) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,NULL,NULL,Hlp_PROFILE_SignUp,Box_NOT_CLOSABLE); + free (Title); /***** Button to go to request the creation of a new account *****/ Frm_BeginForm (ActFrmMyAcc); diff --git a/swad_agenda.c b/swad_agenda.c index f65b0577..be56c40e 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -391,6 +391,8 @@ void Agd_ShowUsrAgenda (void) extern const char *Txt_Public_agenda_USER; struct Agd_Agenda Agenda; bool Error = true; + bool ItsMe; + char *Title; /***** Get user *****/ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) @@ -402,17 +404,18 @@ void Agd_ShowUsrAgenda (void) Agd_ResetAgenda (&Agenda); /***** Begin box *****/ - if (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)) - Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, - Gbl.Usrs.Me.UsrDat.FullName), - Agd_PutIconsMyPublicAgenda,Gbl.Usrs.Me.UsrDat.EnUsrCod, - Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); - else - Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, - Gbl.Usrs.Other.UsrDat.FullName), - Agd_PutIconsOtherPublicAgenda,Gbl.Usrs.Other.UsrDat.EnUsrCod, - Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); - Str_FreeStrings (); + ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod); + if (asprintf (&Title,Txt_Public_agenda_USER, + ItsMe ? Gbl.Usrs.Me.UsrDat.FullName : + Gbl.Usrs.Other.UsrDat.FullName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin ("100%",Title, + ItsMe ? Agd_PutIconsMyPublicAgenda : + Agd_PutIconsOtherPublicAgenda, + ItsMe ? Gbl.Usrs.Me.UsrDat.EnUsrCod : + Gbl.Usrs.Other.UsrDat.EnUsrCod, + Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); + free (Title); /***** Show the current events in the user's agenda *****/ Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY); @@ -439,6 +442,8 @@ void Agd_ShowOtherAgendaAfterLogIn (void) extern const char *Txt_Public_agenda_USER; extern const char *Txt_Switching_to_LANGUAGE[1 + Lan_NUM_LANGUAGES]; struct Agd_Agenda Agenda; + bool ItsMe; + char *Title; if (Gbl.Usrs.Me.Logged) { @@ -454,17 +459,18 @@ void Agd_ShowOtherAgendaAfterLogIn (void) Agd_ResetAgenda (&Agenda); /***** Begin box *****/ - if (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)) - Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, - Gbl.Usrs.Me.UsrDat.FullName), - Agd_PutIconToViewEditMyFullAgenda,Gbl.Usrs.Me.UsrDat.EnUsrCod, - Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); - else - Box_BoxBegin ("100%",Str_BuildString (Txt_Public_agenda_USER, - Gbl.Usrs.Other.UsrDat.FullName), - Agd_PutIconsOtherPublicAgenda,Gbl.Usrs.Other.UsrDat.EnUsrCod, - Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); - Str_FreeStrings (); + ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod); + if (asprintf (&Title,Txt_Public_agenda_USER, + ItsMe ? Gbl.Usrs.Me.UsrDat.FullName : + Gbl.Usrs.Other.UsrDat.FullName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin ("100%",Title, + ItsMe ? Agd_PutIconToViewEditMyFullAgenda : + Agd_PutIconsOtherPublicAgenda, + ItsMe ? Gbl.Usrs.Me.UsrDat.EnUsrCod : + Gbl.Usrs.Other.UsrDat.EnUsrCod, + Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); + free (Title); /***** Show the current events in the user's agenda *****/ Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY); @@ -1638,13 +1644,13 @@ void Agd_ReceiveFormEvent (void) void Agd_PrintAgdQRCode (void) { extern const char *Txt_Where_s_USER; + char *Title; /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Where_s_USER, - Gbl.Usrs.Me.UsrDat.FullName), - NULL,NULL, - NULL,Box_NOT_CLOSABLE); - Str_FreeStrings (); + if (asprintf (&Title,Txt_Where_s_USER,Gbl.Usrs.Me.UsrDat.FullName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE); + free (Title); /***** Print QR code ****/ QR_PrintQRCode (); diff --git a/swad_attendance.c b/swad_attendance.c index 8a7156f9..872700d4 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1924,6 +1924,7 @@ void Att_RegisterMeAsStdInAttEvent (void) struct Att_Events Events; struct Att_Event Event; bool Present; + char *ParamName; char CommentStd[Cns_MAX_BYTES_TEXT + 1]; char CommentTch[Cns_MAX_BYTES_TEXT + 1]; @@ -1940,10 +1941,10 @@ void Att_RegisterMeAsStdInAttEvent (void) /***** Get comments for this student *****/ Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod,Gbl.Usrs.Me.UsrDat.UsrCod, CommentStd,CommentTch); - Par_GetParToHTML (Str_BuildString ("CommentStd%s", - Gbl.Usrs.Me.UsrDat.EnUsrCod), - CommentStd,Cns_MAX_BYTES_TEXT); - Str_FreeStrings (); + if (asprintf (&ParamName,"CommentStd%s",Gbl.Usrs.Me.UsrDat.EnUsrCod) < 0) + Err_NotEnoughMemoryExit (); + Par_GetParToHTML (ParamName,CommentStd,Cns_MAX_BYTES_TEXT); + free (ParamName); if (Present || CommentStd[0] || @@ -1986,6 +1987,7 @@ void Att_RegisterStudentsInAttEvent (void) unsigned NumUsr; const char *Ptr; bool Present; + char *ParamName; unsigned NumStdsPresent; unsigned NumStdsAbsent; struct UsrData UsrData; @@ -2056,11 +2058,15 @@ void Att_RegisterStudentsInAttEvent (void) NumUsr++) { /***** Get comments for this student *****/ - Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod,Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].UsrCod,CommentStd,CommentTch); - Par_GetParToHTML (Str_BuildString ("CommentTch%s", - Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].EnUsrCod), - CommentTch,Cns_MAX_BYTES_TEXT); - Str_FreeStrings (); + Att_CheckIfUsrIsPresentInAttEventAndGetComments (Event.AttCod, + Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].UsrCod, + CommentStd, + CommentTch); + if (asprintf (&ParamName,"CommentTch%s", + Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].EnUsrCod) < 0) + Err_NotEnoughMemoryExit (); + Par_GetParToHTML (ParamName,CommentTch,Cns_MAX_BYTES_TEXT); + free (ParamName); Present = !Gbl.Usrs.LstUsrs[Rol_STD].Lst[NumUsr].Remove; diff --git a/swad_browser.c b/swad_browser.c index e6bed753..73de9980 100644 --- a/swad_browser.c +++ b/swad_browser.c @@ -9805,6 +9805,7 @@ void Brw_ListDocsFound (MYSQL_RES **mysql_res,unsigned NumDocs, extern const char *Txt_hidden_document; extern const char *Txt_hidden_documents; MYSQL_ROW row; + char *Title; unsigned NumDoc; unsigned NumDocsNotHidden = 0; unsigned NumDocsHidden; @@ -9814,13 +9815,11 @@ void Brw_ListDocsFound (MYSQL_RES **mysql_res,unsigned NumDocs, { /***** Begin box and table *****/ /* Number of documents found */ - Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", - NumDocs, - (NumDocs == 1) ? TitleSingular : - TitlePlural), - NULL,NULL, - NULL,Box_NOT_CLOSABLE,2); - Str_FreeStrings (); + if (asprintf (&Title,"%u %s",NumDocs,NumDocs == 1 ? TitleSingular : + TitlePlural) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2); + free (Title); /***** Write heading *****/ HTM_TR_Begin (NULL); diff --git a/swad_calendar.c b/swad_calendar.c index 411ebf75..a5fbcf19 100644 --- a/swad_calendar.c +++ b/swad_calendar.c @@ -25,12 +25,15 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ +#define _GNU_SOURCE // For asprintf +#include // For asprintf #include // For string functions #include "swad_box.h" #include "swad_calendar.h" #include "swad_call_for_exam.h" #include "swad_database.h" +#include "swad_error.h" #include "swad_figure.h" #include "swad_form.h" #include "swad_global.h" @@ -116,6 +119,7 @@ void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action, extern const char *Txt_First_day_of_the_week_X; extern const char *Txt_DAYS_SMALL[7]; unsigned FirstDayOfWeek; + char *Title; char Icon[32 + 1]; Set_BeginOneSettingSelector (); @@ -134,10 +138,11 @@ void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action, if (FuncParams) // Extra parameters depending on the action FuncParams (Args); snprintf (Icon,sizeof (Icon),"first-day-of-week-%u.png",FirstDayOfWeek); - Ico_PutSettingIconLink (Icon,Ico_BLACK, - Str_BuildString (Txt_First_day_of_the_week_X, - Txt_DAYS_SMALL[FirstDayOfWeek])); - Str_FreeStrings (); + if (asprintf (&Title,Txt_First_day_of_the_week_X, + Txt_DAYS_SMALL[FirstDayOfWeek]) < 0) + Err_NotEnoughMemoryExit (); + Ico_PutSettingIconLink (Icon,Ico_BLACK,Title); + free (Title); Frm_EndForm (); HTM_DIV_End (); } diff --git a/swad_center.c b/swad_center.c index 955d0fb6..7aa49033 100644 --- a/swad_center.c +++ b/swad_center.c @@ -25,8 +25,10 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ +#define _GNU_SOURCE // For asprintf #include // For boolean type #include // For NULL +#include // For asprintf #include // For free #include // For string functions @@ -242,14 +244,15 @@ static void Ctr_ListCenters (void) extern const char *Txt_No_centers; extern const char *Txt_Create_another_center; extern const char *Txt_Create_center; + char *Title; unsigned NumCtr; /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Centers_of_INSTITUTION_X, - Gbl.Hierarchy.Ins.FullName), - Ctr_PutIconsListingCenters,NULL, + if (asprintf (&Title,Txt_Centers_of_INSTITUTION_X,Gbl.Hierarchy.Ins.FullName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,Ctr_PutIconsListingCenters,NULL, Hlp_INSTITUTION_Centers,Box_NOT_CLOSABLE); - Str_FreeStrings (); + free (Title); if (Gbl.Hierarchy.Ctrs.Num) // There are centers in the current institution { @@ -434,6 +437,7 @@ static void Ctr_EditCentersInternal (void) extern const char *Hlp_INSTITUTION_Centers; extern const char *Txt_Centers_of_INSTITUTION_X; struct Plc_Places Places; + char *Title; /***** Reset places context *****/ Plc_ResetPlaces (&Places); @@ -451,11 +455,11 @@ static void Ctr_EditCentersInternal (void) Hie_WriteMenuHierarchy (); /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Centers_of_INSTITUTION_X, - Gbl.Hierarchy.Ins.FullName), - Ctr_PutIconsEditingCenters,NULL, + if (asprintf (&Title,Txt_Centers_of_INSTITUTION_X,Gbl.Hierarchy.Ins.FullName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,Ctr_PutIconsEditingCenters,NULL, Hlp_INSTITUTION_Centers,Box_NOT_CLOSABLE); - Str_FreeStrings (); + free (Title); /***** Put a form to create a new center *****/ Ctr_PutFormToCreateCenter (&Places); @@ -1834,6 +1838,7 @@ void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs) extern const char *Txt_center; extern const char *Txt_centers; unsigned NumCtr; + char *Title; struct Ctr_Center Ctr; /***** Query database *****/ @@ -1841,19 +1846,18 @@ void Ctr_ListCtrsFound (MYSQL_RES **mysql_res,unsigned NumCtrs) { /***** Begin box and table *****/ /* Number of centers found */ - Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", - NumCtrs, - (NumCtrs == 1) ? Txt_center : - Txt_centers), - NULL,NULL, - NULL,Box_NOT_CLOSABLE,2); - Str_FreeStrings (); + if (asprintf (&Title,"%u %s",NumCtrs, + NumCtrs == 1 ? Txt_center : + Txt_centers) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2); + free (Title); /***** Write heading *****/ Ctr_PutHeadCentersForSeeing (false); // Order not selectable /***** List the centers (one row per center) *****/ - for (NumCtr = 1; + for (NumCtr = 1; NumCtr <= NumCtrs; NumCtr++) { diff --git a/swad_center_config.c b/swad_center_config.c index 497579c9..aa4b2076 100644 --- a/swad_center_config.c +++ b/swad_center_config.c @@ -762,6 +762,7 @@ static void CtrCfg_NumDegs (void) extern const char *The_ClassDat[The_NUM_THEMES]; extern const char *Txt_Degrees; extern const char *Txt_Degrees_of_CENTER_X; + char *Title; /***** Number of degrees *****/ HTM_TR_Begin (NULL); @@ -773,10 +774,10 @@ static void CtrCfg_NumDegs (void) HTM_TD_Begin ("class=\"%s LB\"",The_ClassDat[Gbl.Prefs.Theme]); Frm_BeginFormGoTo (ActSeeDeg); Ctr_PutParamCtrCod (Gbl.Hierarchy.Ctr.CtrCod); - HTM_BUTTON_OnSubmit_Begin (Str_BuildString (Txt_Degrees_of_CENTER_X, - Gbl.Hierarchy.Ctr.ShrtName), - "BT_LINK",NULL); - Str_FreeStrings (); + if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Ctr.ShrtName) < 0) + Err_NotEnoughMemoryExit (); + HTM_BUTTON_OnSubmit_Begin (Title,"BT_LINK",NULL); + free (Title); HTM_Unsigned (Deg_GetCachedNumDegsInCtr (Gbl.Hierarchy.Ctr.CtrCod)); HTM_BUTTON_End (); Frm_EndForm (); diff --git a/swad_changelog.h b/swad_changelog.h index 0e07c21a..f042e908 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,10 +602,11 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 21.77.1 (2021-12-29)" +#define Log_PLATFORM_VERSION "SWAD 21.77.2 (2021-12-29)" #define CSS_FILE "swad21.77.1.css" #define JS_FILE "swad21.67.4.js" /* + Version 21.77.2: Dec 29, 2021 Changing Str_BuildString for asprintf. (322199 lines) Version 21.77.1: Dec 29, 2021 Working on design of dark theme. (322161 lines) Version 21.77: Dec 29, 2021 Animated recycle icon is changed by static icon. (322250 lines) Version 21.76.5: Dec 29, 2021 Working on design of dark theme. (322313 lines) diff --git a/swad_country.c b/swad_country.c index a814312f..9bcf51ea 100644 --- a/swad_country.c +++ b/swad_country.c @@ -543,18 +543,17 @@ void Cty_DrawCountryMapAndNameWithLink (struct Cty_Countr *Cty,Act_Action_t Acti void Cty_DrawCountryMap (struct Cty_Countr *Cty,const char *Class) { char *URL; + char *Icon; /***** Draw country map *****/ if (Cty_CheckIfCountryPhotoExists (Cty)) { - if (asprintf (&URL,"%s/%s", - Cfg_URL_ICON_COUNTRIES_PUBLIC, - Cty->Alpha2) < 0) + if (asprintf (&URL,"%s/%s",Cfg_URL_ICON_COUNTRIES_PUBLIC,Cty->Alpha2) < 0) Err_NotEnoughMemoryExit (); - HTM_IMG (URL,Str_BuildString ("%s.png",Cty->Alpha2), - Cty->Name[Gbl.Prefs.Language], - "class=\"%s\"",Class); - Str_FreeStrings (); + if (asprintf (&Icon,"%s.png",Cty->Alpha2) < 0) + Err_NotEnoughMemoryExit (); + HTM_IMG (URL,Icon,Cty->Name[Gbl.Prefs.Language],"class=\"%s\"",Class); + free (Icon); free (URL); } else @@ -1811,6 +1810,7 @@ void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys) { extern const char *Txt_country; extern const char *Txt_countries; + char *Title; unsigned NumCty; struct Cty_Countr Cty; @@ -1819,13 +1819,14 @@ void Cty_ListCtysFound (MYSQL_RES **mysql_res,unsigned NumCtys) { /***** Begin box and table *****/ /* Number of countries found */ - Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", - NumCtys, - NumCtys == 1 ? Txt_country : - Txt_countries), + if (asprintf (&Title,"%u %s",NumCtys, + NumCtys == 1 ? Txt_country : + Txt_countries) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxTableBegin (NULL,Title, NULL,NULL, NULL,Box_NOT_CLOSABLE,2); - Str_FreeStrings (); + free (Title); /***** Write heading *****/ Cty_PutHeadCountriesForSeeing (false); // Order not selectable diff --git a/swad_country_config.c b/swad_country_config.c index 72702883..88316202 100644 --- a/swad_country_config.c +++ b/swad_country_config.c @@ -471,6 +471,7 @@ static void CtyCfg_NumInss (void) extern const char *The_ClassDat[The_NUM_THEMES]; extern const char *Txt_Institutions; extern const char *Txt_Institutions_of_COUNTRY_X; + char *Title; /***** Number of institutions ******/ HTM_TR_Begin (NULL); @@ -482,10 +483,11 @@ static void CtyCfg_NumInss (void) HTM_TD_Begin ("class=\"%s LT\"",The_ClassDat[Gbl.Prefs.Theme]); Frm_BeginFormGoTo (ActSeeIns); Cty_PutParamCtyCod (Gbl.Hierarchy.Cty.CtyCod); - HTM_BUTTON_OnSubmit_Begin (Str_BuildString (Txt_Institutions_of_COUNTRY_X, - Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]), - "BT_LINK",NULL); - Str_FreeStrings (); + if (asprintf (&Title,Txt_Institutions_of_COUNTRY_X, + Gbl.Hierarchy.Cty.Name[Gbl.Prefs.Language]) < 0) + Err_NotEnoughMemoryExit (); + HTM_BUTTON_OnSubmit_Begin (Title,"BT_LINK",NULL); + free (Title); HTM_Unsigned (Ins_GetCachedNumInssInCty (Gbl.Hierarchy.Cty.CtyCod)); HTM_BUTTON_End (); Frm_EndForm (); diff --git a/swad_course.c b/swad_course.c index f09ba703..6edce2ac 100644 --- a/swad_course.c +++ b/swad_course.c @@ -836,14 +836,15 @@ static void Crs_ListCourses (void) extern const char *Txt_No_courses; extern const char *Txt_Create_another_course; extern const char *Txt_Create_course; + char *Title; unsigned Year; /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Courses_of_DEGREE_X, - Gbl.Hierarchy.Deg.ShrtName), - Crs_PutIconsListCourses,NULL, + if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Deg.ShrtName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,Crs_PutIconsListCourses,NULL, Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); - Str_FreeStrings (); + free (Title); if (Gbl.Hierarchy.Crss.Num) // There are courses in the current degree { @@ -1041,6 +1042,7 @@ static void Crs_EditCoursesInternal (void) { extern const char *Hlp_DEGREE_Courses; extern const char *Txt_Courses_of_DEGREE_X; + char *Title; /***** Get list of degrees in this center *****/ Deg_GetListDegsInCurrentCtr (); @@ -1052,11 +1054,11 @@ static void Crs_EditCoursesInternal (void) Hie_WriteMenuHierarchy (); /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Courses_of_DEGREE_X, - Gbl.Hierarchy.Deg.ShrtName), - Crs_PutIconsEditingCourses,NULL, + if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Deg.ShrtName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,Crs_PutIconsEditingCourses,NULL, Hlp_DEGREE_Courses,Box_NOT_CLOSABLE); - Str_FreeStrings (); + free (Title); /***** Put a form to create or request a new course *****/ Crs_PutFormToCreateCourse (); @@ -2155,15 +2157,17 @@ static void Crs_PutButtonToGoToCrs (void) static void Crs_PutButtonToRegisterInCrs (void) { extern const char *Txt_Register_me_in_X; + char *TxtButton; Frm_BeginForm (ActReqSignUp); // If the course being edited is different to the current one... if (Crs_EditingCrs->CrsCod != Gbl.Hierarchy.Crs.CrsCod) Crs_PutParamCrsCod (Crs_EditingCrs->CrsCod); - Btn_PutCreateButton (Str_BuildString (Txt_Register_me_in_X, - Crs_EditingCrs->ShrtName)); - Str_FreeStrings (); + if (asprintf (&TxtButton,Txt_Register_me_in_X,Crs_EditingCrs->ShrtName) < 0) + Err_NotEnoughMemoryExit (); + Btn_PutCreateButton (TxtButton); + free (TxtButton); Frm_EndForm (); } @@ -2265,6 +2269,7 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role) MYSQL_ROW row; unsigned NumCrss; unsigned NumCrs; + char *Txt; /***** Get courses of a user from database *****/ NumCrss = Crs_DB_GetCrssOfAUsr (&mysql_res,UsrDat->UsrCod,Role); @@ -2281,10 +2286,12 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role) HTM_TR_Begin (NULL); HTM_TH_Begin (1,7,"LM"); - HTM_TxtColon (Str_BuildString (Txt_USER_in_COURSE, - Role == Rol_UNK ? Txt_User[Usr_SEX_UNKNOWN] : // Role == Rol_UNK ==> any role - Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex])); - Str_FreeStrings (); + if (asprintf (&Txt,Txt_USER_in_COURSE, + Role == Rol_UNK ? Txt_User[Usr_SEX_UNKNOWN] : // Role == Rol_UNK ==> any role + Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]) < 0) + Err_NotEnoughMemoryExit (); + HTM_TxtColon (Txt); + free (Txt); HTM_TH_End (); HTM_TR_End (); @@ -2334,6 +2341,7 @@ void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss) extern const char *Txt_Year_OF_A_DEGREE; extern const char *Txt_Course; extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES]; + char *Title; MYSQL_ROW row; unsigned NumCrs; @@ -2342,13 +2350,12 @@ void Crs_ListCrssFound (MYSQL_RES **mysql_res,unsigned NumCrss) { /***** Begin box and table *****/ /* Number of courses found */ - Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", - NumCrss, - (NumCrss == 1) ? Txt_course : - Txt_courses), - NULL,NULL, - NULL,Box_NOT_CLOSABLE,2); - Str_FreeStrings (); + if (asprintf (&Title,"%u %s",NumCrss, + NumCrss == 1 ? Txt_course : + Txt_courses) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2); + free (Title); /***** Heading row *****/ HTM_TR_Begin (NULL); diff --git a/swad_date.c b/swad_date.c index 0dabb14f..853b0d5b 100644 --- a/swad_date.c +++ b/swad_date.c @@ -192,12 +192,14 @@ void Dat_PutSpanDateFormat (Dat_Format_t Format) void Dat_PutScriptDateFormat (Dat_Format_t Format) { - Dat_WriteLocalDateHMSFromUTC (Str_BuildString ("date_format_%u", - (unsigned) Format), - Gbl.StartExecutionTimeUTC, + char *Id; + + if (asprintf (&Id,"date_format_%u",(unsigned) Format) < 0) + Err_NotEnoughMemoryExit (); + Dat_WriteLocalDateHMSFromUTC (Id,Gbl.StartExecutionTimeUTC, Format,Dat_SEPARATOR_NONE, false,true,false,0x0); - Str_FreeStrings (); + free (Id); } /*****************************************************************************/ diff --git a/swad_degree.c b/swad_degree.c index d87ea9c9..5f20e5b6 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -709,14 +709,15 @@ static void Deg_ListDegrees (void) extern const char *Txt_No_degrees; extern const char *Txt_Create_another_degree; extern const char *Txt_Create_degree; + char *Title; unsigned NumDeg; /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Degrees_of_CENTER_X, - Gbl.Hierarchy.Ctr.ShrtName), - Deg_PutIconsListingDegrees,NULL, + if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Ctr.ShrtName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,Deg_PutIconsListingDegrees,NULL, Hlp_CENTER_Degrees,Box_NOT_CLOSABLE); - Str_FreeStrings (); + free (Title); if (Gbl.Hierarchy.Degs.Num) // There are degrees in the current center { @@ -894,6 +895,7 @@ static void Deg_EditDegreesInternal (void) extern const char *Hlp_CENTER_Degrees; extern const char *Txt_Degrees_of_CENTER_X; extern const char *Txt_No_types_of_degree; + char *Title; /***** Get list of degrees in the current center *****/ Deg_GetListDegsInCurrentCtr (); @@ -905,11 +907,11 @@ static void Deg_EditDegreesInternal (void) Hie_WriteMenuHierarchy (); /***** Begin box *****/ - Box_BoxBegin (NULL,Str_BuildString (Txt_Degrees_of_CENTER_X, - Gbl.Hierarchy.Ctr.ShrtName), - Deg_PutIconsEditingDegrees,NULL, + if (asprintf (&Title,Txt_Degrees_of_CENTER_X,Gbl.Hierarchy.Ctr.ShrtName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (NULL,Title,Deg_PutIconsEditingDegrees,NULL, Hlp_CENTER_Degrees,Box_NOT_CLOSABLE); - Str_FreeStrings (); + free (Title); if (Gbl.DegTypes.Num) { @@ -1803,6 +1805,7 @@ void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs) { extern const char *Txt_degree; extern const char *Txt_degrees; + char *Title; unsigned NumDeg; struct Deg_Degree Deg; @@ -1811,13 +1814,12 @@ void Deg_ListDegsFound (MYSQL_RES **mysql_res,unsigned NumDegs) { /***** Begin box and table *****/ /* Number of degrees found */ - Box_BoxTableBegin (NULL,Str_BuildString ("%u %s", - NumDegs, - (NumDegs == 1) ? Txt_degree : - Txt_degrees), - NULL,NULL, - NULL,Box_NOT_CLOSABLE,2); - Str_FreeStrings (); + if (asprintf (&Title,"%u %s",NumDegs, + NumDegs == 1 ? Txt_degree : + Txt_degrees) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxTableBegin (NULL,Title,NULL,NULL,NULL,Box_NOT_CLOSABLE,2); + free (Title); /***** Write heading *****/ Deg_PutHeadDegreesForSeeing (); diff --git a/swad_degree_config.c b/swad_degree_config.c index 707eec06..e87ea0d5 100644 --- a/swad_degree_config.c +++ b/swad_degree_config.c @@ -318,6 +318,7 @@ static void DegCfg_NumCrss (void) extern const char *The_ClassDat[The_NUM_THEMES]; extern const char *Txt_Courses; extern const char *Txt_Courses_of_DEGREE_X; + char *Title; /***** Number of courses *****/ /* Begin table row */ @@ -330,10 +331,10 @@ static void DegCfg_NumCrss (void) HTM_TD_Begin ("class=\"%s LB\"",The_ClassDat[Gbl.Prefs.Theme]); Frm_BeginFormGoTo (ActSeeCrs); Deg_PutParamDegCod (Gbl.Hierarchy.Deg.DegCod); - HTM_BUTTON_OnSubmit_Begin (Str_BuildString (Txt_Courses_of_DEGREE_X, - Gbl.Hierarchy.Deg.ShrtName), - "BT_LINK",NULL); - Str_FreeStrings (); + if (asprintf (&Title,Txt_Courses_of_DEGREE_X,Gbl.Hierarchy.Deg.ShrtName) < 0) + Err_NotEnoughMemoryExit (); + HTM_BUTTON_OnSubmit_Begin (Title,"BT_LINK",NULL); + free (Title); HTM_Unsigned (Crs_GetCachedNumCrssInDeg (Gbl.Hierarchy.Deg.DegCod)); HTM_BUTTON_End (); Frm_EndForm ();