From c5c3116f5697e423519e3289feec4cb01ba2d4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 26 Jan 2016 14:23:16 +0100 Subject: [PATCH] Version 15.131.1 --- swad_changelog.h | 3 +- swad_string.c | 166 +++++++++++++++++++++-------------------------- 2 files changed, 75 insertions(+), 94 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 963b10e83..79481899a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -121,13 +121,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.131 (2016-01-26)" +#define Log_PLATFORM_VERSION "SWAD 15.131.1 (2016-01-26)" #define CSS_FILE "swad15.121.7.css" #define JS_FILE "swad15.121.7.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 15.131.1: Jan 26, 2016 Optimization in the function that insert links in text. (194993 lines) Version 15.131: Jan 26, 2016 Link around @nickname is inserted as form. (195011 lines) Version 15.130.2: Jan 26, 2016 Optimization in the function that insert links in text. (194928 lines) Version 15.130.1: Jan 26, 2016 Fixed bug when mentioning an user who does not exist. (194914 lines) diff --git a/swad_string.c b/swad_string.c index ce24ad590..345410683 100644 --- a/swad_string.c +++ b/swad_string.c @@ -100,6 +100,7 @@ action="https://localhost/swad/es" method="post"> #define ANCHOR_1_URL "" #define ANCHOR_3_URL "" +#define ANCHOR_3_NICK "" #define MAX_LINKS 1000 @@ -108,9 +109,9 @@ action="https://localhost/swad/es" method="post"> void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScreen) { extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES]; - char Anchor1Nick[1024]; - char Anchor2Nick[1024]; - char Anchor3Nick[64]; + char Params[256+256+Ses_LENGTH_SESSION_ID+256]; + char Anchor1Nick[256+256+256+Ses_LENGTH_SESSION_ID+256+256]; + char Anchor2Nick[256+Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64]; size_t TxtLength; size_t TxtLengthWithInsertedAnchors; @@ -151,38 +152,26 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre char LimitedURL[MAX_BYTES_LIMITED_URL+1]; char Ch; - /****** Initialize lengths *****/ - TxtLength = strlen (Txt); + /****** Initialize constant anchors and their lengths *****/ + TxtLength = strlen (Txt); - // In this case the length of anchor is fixed + // For URLs the length of anchor is fixed // so it can be calculated once - Anchor1URLLength = strlen (ANCHOR_1_URL); - Anchor2URLLength = strlen (ANCHOR_2_URL); - Anchor3URLLength = strlen (ANCHOR_3_URL); - AnchorURLTotalLength = Anchor1URLLength + Anchor2URLLength + Anchor3URLLength; + Anchor1URLLength = strlen (ANCHOR_1_URL); + Anchor2URLLength = strlen (ANCHOR_2_URL); + Anchor3URLLength = strlen (ANCHOR_3_URL); + AnchorURLTotalLength = Anchor1URLLength + + Anchor2URLLength + + Anchor3URLLength; - if (Gbl.Usrs.Me.Logged) // In this case the length of anchor is variable - // so it can be calculated for each link - { - sprintf (Anchor3Nick,"" - ""); - Anchor3NickLength = strlen (Anchor3Nick); - } - else // In this case the length of anchor is fixed - // so it can be calculated once - { - sprintf (Anchor1Nick,""); - sprintf (Anchor3Nick,""); - Anchor1NickLength = strlen (Anchor1Nick); - Anchor2NickLength = strlen (Anchor2Nick); - Anchor3NickLength = strlen (Anchor3Nick); - AnchorNickTotalLength = Anchor1NickLength + Anchor2NickLength + Anchor3NickLength; - } + // For nicknames the length of anchor is variable + // so it can be calculated for each link, + // except the third part that is fixed + Anchor3NickLength = strlen (ANCHOR_3_NICK); + /**************************************************************/ /***** Find starts and ends of links (URLs and nicknames) *****/ + /**************************************************************/ for (PtrSrc = Txt; *PtrSrc;) /* Check if the next char is the start of a URL */ @@ -305,45 +294,46 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre Links[NumLinks].Anchor1Nick = NULL; Links[NumLinks].Anchor2Nick = NULL; - LengthVisibleLink = Links[NumLinks].NumActualBytes; - - if (Gbl.Usrs.Me.Logged) // In this case the length of anchor is variable - // so it must be calculated for each link - { - /* Create unique id for this form */ - Gbl.Form.Num++; + /* Create id for this form */ + Gbl.Form.Num++; + if (Gbl.Usrs.Me.Logged) sprintf (Gbl.Form.UniqueId,"form_%s_%d", Gbl.UniqueNameEncrypted,Gbl.Form.Num); + else + sprintf (Gbl.Form.Id,"form_%d",Gbl.Form.Num); - /* Store first part of anchor */ - sprintf (Anchor1Nick,"
" - "" - "" + "%s" + "" - "", - Gbl.Form.UniqueId); - Anchor2NickLength = strlen (Anchor2Nick); - if ((Links[NumLinks].Anchor2Nick = (char *) malloc (Anchor2NickLength+1)) == NULL) - Lay_ShowErrorAndExit ("Not enough memory to insert link."); - strcpy (Links[NumLinks].Anchor2Nick,Anchor2Nick); - Links[NumLinks].Anchor2NickLength = Anchor2NickLength; + /* Store second part of anchor */ + sprintf (Anchor2Nick,"\">" + "", + Gbl.Usrs.Me.Logged ? Gbl.Form.UniqueId : + Gbl.Form.Id); + Anchor2NickLength = strlen (Anchor2Nick); + if ((Links[NumLinks].Anchor2Nick = (char *) malloc (Anchor2NickLength+1)) == NULL) + Lay_ShowErrorAndExit ("Not enough memory to insert link."); + strcpy (Links[NumLinks].Anchor2Nick,Anchor2Nick); + Links[NumLinks].Anchor2NickLength = Anchor2NickLength; - AnchorNickTotalLength = Anchor1NickLength + Anchor2NickLength + Anchor3NickLength; - } + AnchorNickTotalLength = Anchor1NickLength + Anchor2NickLength + Anchor3NickLength; + LengthVisibleLink = Links[NumLinks].NumActualBytes; if (NumLinks == 0) Links[NumLinks].AddedLengthUntilHere = AnchorNickTotalLength + LengthVisibleLink; else @@ -360,7 +350,9 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre else // Character distinct to 'h' or '@' PtrSrc++; + /**********************************************************************/ /***** If there are one or more links (URLs or nicknames) in text *****/ + /**********************************************************************/ if (NumLinks) { /***** Insert links from end to start of text, @@ -373,8 +365,9 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre { IsNickname = (*(Links[NumLink].PtrStart) == '@'); - /* Step 1: Move forward the text after the link (URL or nickname) - (it's mandatory to do the copy in reverse order to avoid overwriting source) */ + /***** Step 1: Move forward the text after the link (URL or nickname) + (it's mandatory to do the copy in reverse order + to avoid overwriting source) *****/ for (i = 0, PtrSrc = (NumLink == NumLinks - 1) ? Txt + TxtLength : Links[NumLink + 1].PtrStart - 1, @@ -384,11 +377,11 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre i++) *PtrDst-- = *PtrSrc--; - /* Step 2: Insert Anchor3Nick or ANCHOR_3_URL */ + /***** Step 2: Insert ANCHOR_3_NICK or ANCHOR_3_URL *****/ if (IsNickname) { Length = Anchor3NickLength; - PtrSrc = Anchor3Nick + Length - 1; + PtrSrc = ANCHOR_3_NICK + Length - 1; } else { @@ -400,7 +393,8 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre i++) *PtrDst-- = *PtrSrc--; - /* Step 3: Move forward the link (URL or nickname) to be shown on screen */ + /***** Step 3: Move forward the link (URL or nickname) + to be shown on screen *****/ if (IsNickname || Links[NumLink].NumActualBytes <= MaxCharsURLOnScreen) { @@ -425,19 +419,11 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre i++) *PtrDst-- = *PtrSrc--; - /* Step 4: Insert Anchor2Nick or ANCHOR_2_URL */ + /***** Step 4: Insert Anchor2Nick or ANCHOR_2_URL *****/ if (IsNickname) { - if (Gbl.Usrs.Me.Logged) // In this case the length of anchor is variable - { - Length = Links[NumLink].Anchor2NickLength; - PtrSrc = Links[NumLink].Anchor2Nick + Length - 1; - } - else - { - Length = Anchor2NickLength; - PtrSrc = Anchor2Nick + Length - 1; - } + Length = Links[NumLink].Anchor2NickLength; + PtrSrc = Links[NumLink].Anchor2Nick + Length - 1; } else { @@ -449,27 +435,19 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre i++) *PtrDst-- = *PtrSrc--; - /* Step 5: Insert link into directive A - (it's mandatory to do the copy in reverse order - to avoid overwriting source URL or nickname) */ + /***** Step 5: Insert link into directive A + (it's mandatory to do the copy in reverse order + to avoid overwriting source URL or nickname) *****/ for (i = 0, PtrSrc = Links[NumLink].PtrEnd; i < Links[NumLink].NumActualBytes; i++) *PtrDst-- = *PtrSrc--; - /* Step 6: Insert Anchor1Nick or ANCHOR_1_URL */ + /***** Step 6: Insert Anchor1Nick or ANCHOR_1_URL *****/ if (IsNickname) { - if (Gbl.Usrs.Me.Logged) // In this case the length of anchor is variable - { - Length = Links[NumLink].Anchor1NickLength; - PtrSrc = Links[NumLink].Anchor1Nick + Length - 1; - } - else - { - Length = Anchor1NickLength; - PtrSrc = Anchor1Nick + Length - 1; - } + Length = Links[NumLink].Anchor1NickLength; + PtrSrc = Links[NumLink].Anchor1Nick + Length - 1; } else { @@ -483,7 +461,9 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre } } + /***********************************/ /***** Free memory for anchors *****/ + /***********************************/ for (NumLink = 0; NumLink < NumLinks; NumLink++)