diff --git a/.gitignore b/.gitignore index b5e3ae7..b776309 100644 --- a/.gitignore +++ b/.gitignore @@ -54,4 +54,3 @@ modules.order Module.symvers Mkfile.old dkms.conf - diff --git a/BlogDB.c b/BlogDB.c index c33b6e5..8364a24 100644 --- a/BlogDB.c +++ b/BlogDB.c @@ -31,43 +31,35 @@ static int PostIDs(int** arr, MYSQL* con); static int ActivePostIDs(int** arr, MYSQL* con); static int AuthorIDs(int** arr, MYSQL* con); + // Connects to the MariaDB database and returns the connection MYSQL* conn2maria() { - // Initialize the connection MYSQL *con = mysql_init(NULL); - // If successful, continue, else throw error if (con == NULL) { fprintf(stderr, "%s\n", mysql_error(con)); exit(1); } - // Connect with specific details, if successful continue, else throw error - if (mysql_real_connect(con, "localhost", "adam", "1234", - "mydb", 0, NULL, 0) == NULL) + if (mysql_real_connect(con, "localhost", "adam", "1234", "mydb", 0, NULL, 0) == NULL) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - // return successful connection return con; } // Adds a new post to the database, with given values int AddPost(char title[], int authorId, char datePosted[], char post[], int tags[], size_t tagSize, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Build a query - char* query; - if(0 > asprintf(&query, + char* insertQuery; + if(0 > asprintf(&insertQuery, "INSERT INTO blog_posts (title,author_id,date_posted,post,state) VALUES (\"%s\", \"%d\", \"%s\", \"%s\", \"0\")", title, authorId, @@ -75,17 +67,14 @@ int AddPost(char title[], int authorId, char datePosted[], char post[], int tags post )) exit(1); - // Query the server, if successful continue, else throw error - if (mysql_query(con, query)) + if (mysql_query(con, insertQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - // Free the memory of the query string - free(query); - + free(insertQuery); if (mysql_query(con, "SELECT LAST_INSERT_ID()")) { @@ -94,84 +83,66 @@ int AddPost(char title[], int authorId, char datePosted[], char post[], int tags exit(1); } - // Get results - MYSQL_RES *result = mysql_store_result(con); - int num_fields = mysql_num_fields(result); - - // For all rows (only one ;P) MYSQL_ROW row; + MYSQL_RES *result = mysql_store_result(con); row = mysql_fetch_row(result); - int output = atoi(row[0]); + int postID = atoi(row[0]); - // Ignore all if tags is NULL pointer - if (tags != NULL) + if (tags == NULL) return postID; + + // for each in tags + for (int i = 0; i < tagSize / sizeof(int); i++) { - //printf("%d\n", tagSize / sizeof(int)); - // for the size of tags - for (int i = 0; i < tagSize / sizeof(int); i++) - { - printf("%d\n", i); - - AssignTag(tags[i], output, con); - } + AssignTag(tags[i], postID, con); } - return output; + return postID; } // Edits a post in the database, to the new given values int EditPost(int postID, char title[], char post[], MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* selectQuery; if(0 > asprintf(&selectQuery, "SELECT * FROM blog_posts WHERE id=(%d)", postID )) exit(1); -// Query the server, if successful continue, else throw error + if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); + free(selectQuery); mysql_close(con); exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); - if (result == NULL) { - printf("Hey\n"); + if (result == NULL) + { + free(selectQuery); + exit(1); } - MYSQL_ROW row; - int tagFound = 1; - - if (mysql_fetch_row(result) == NULL) { - printf("Hey4\n"); - tagFound = 0; + free(selectQuery); + exit(1); } free(selectQuery); char* updateQuery; - - if (!tagFound) { return postID; } - - // Build a query - if (0 > asprintf(&updateQuery, "UPDATE blog_posts SET title=(\"%s\"), post=(\"%s\") WHERE id=(%d)", + if (0 > asprintf(&updateQuery, + "UPDATE blog_posts SET title=(\"%s\"), post=(\"%s\") WHERE id=(%d)", title, post, postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, updateQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -187,201 +158,150 @@ int EditPost(int postID, char title[], char post[], MYSQL* con) // Adds a post using file data int AddFilePost(int authorID, char filePath[], MYSQL* con) { + if (con == NULL) con = conn2maria(); + if (authorID <= 0) authorID = 1; - if (con == NULL) - { - con = conn2maria(); - } - - // Author ID <= 0 should default to me. - if (authorID <= 0) - { - authorID = 1; - } - - - // Get current data in string date time_t t = time(NULL); struct tm *tm = localtime(&t); char date[64]; assert(strftime(date, sizeof(date), "%F", tm)); - - // Define a file and buffer FILE* FilePointer; int BufferLength = 8192; char Buffer[BufferLength]; - char StringEnd[] = "\0"; + char StringEndIndicator[] = "\0"; - // Open file FilePointer = fopen(filePath, "r"); - - // Get first line fgets(Buffer, BufferLength, FilePointer); - // Get the substrings Buffer[0:3] and Buffer[-6:-1] - // Buffer[BufferLength] is the same as "\0" but without warnings + // Get the substrings startTest = Buffer[0:3] and endTest = Buffer[-5:-1] int LineLength = strlen(Buffer); - char startTest[5] = {Buffer[0], Buffer[1], Buffer[2], Buffer[3], StringEnd[1]}; - char endTest[6] = {Buffer[LineLength - 6], Buffer[LineLength - 5], Buffer[LineLength - 4], Buffer[LineLength - 3], Buffer[LineLength - 2], StringEnd[1]}; + char startTest[5] = {Buffer[0], Buffer[1], Buffer[2], Buffer[3], StringEndIndicator[0]}; + char endTest[6] = {Buffer[LineLength - 6], Buffer[LineLength - 5], Buffer[LineLength - 4], Buffer[LineLength - 3], Buffer[LineLength - 2], StringEndIndicator[0]}; - // Check that the firstline starts with "

" and ends with "

" - if (!(strcmp(startTest, "

") == 0 && strcmp(endTest, "

") == 0)) { - printf("%s What is this %s\n", startTest, endTest); + if (!(strcmp(startTest, "

") == 0 && strcmp(endTest, "

") == 0)) + { + printf("Start Test : '%s'\nEnd Test : '%s'\n", startTest, endTest); return -1; } - - // This is equivalent to Buffer = Buffer[3:-6] - // This is done to remove the

tags - for (int i = 4; i < BufferLength; ++i) { - - if (Buffer[i + 6] == StringEnd[0]) { - Buffer[i - 4] = StringEnd[0]; - break; - } - - Buffer[i-4] = Buffer[i]; - } + Buffer[LineLength - 6] = StringEndIndicator[0]; + char* trimmedBufferTitle; + trimmedBufferTitle = &Buffer[4]; // Add a new post with correct title, author and date but with an empty post. - int postID = AddPost(Buffer, authorID, date, "", NULL, 0, con); + int postID = AddPost(trimmedBufferTitle, authorID, date, "", NULL, 0, con); - // Concat the rest of the file, line by line to the new post while (fgets(Buffer, BufferLength, FilePointer)) { - // Build a query - char* query; - if(0 > asprintf(&query, + char* concatQuery; + if(0 > asprintf(&concatQuery, "UPDATE blog_posts SET post = CONCAT(post, \"%s\n\") WHERE id=(%d)", Buffer, postID )) exit(1); - // Query the server, if successful continue, else throw error - if (mysql_query(con, query)) + if (mysql_query(con, concatQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - // Free the memory of the query string - free(query); + free(concatQuery); } - // return the postID of the new post. return postID; } // Edits a post using file data int EditFilePost(char filePath[], int postID, MYSQL* con) { + if (con == NULL) con = conn2maria(); - if (con == NULL) - { - con = conn2maria(); - } - - // Define a file and buffer FILE* FilePointer; int BufferLength = 8192; char Buffer[BufferLength]; - char StringEnd[] = "\0"; + char StringEndIndicator[] = "\0"; - // Open file FilePointer = fopen(filePath, "r"); - - // Get first line fgets(Buffer, BufferLength, FilePointer); - // Get the substrings Buffer[0:3] and Buffer[-6:-1] - // Buffer[BufferLength] is the same as "\0" but without warnings + // Get the substrings startTest = Buffer[0:3] and endTest = Buffer[-6:-1] int LineLength = strlen(Buffer); - char startTest[5] = {Buffer[0], Buffer[1], Buffer[2], Buffer[3], StringEnd[1]}; - char endTest[6] = {Buffer[LineLength - 6], Buffer[LineLength - 5], Buffer[LineLength - 4], Buffer[LineLength - 3], Buffer[LineLength - 2], StringEnd[1]}; + char startTest[5] = {Buffer[0], Buffer[1], Buffer[2], Buffer[3], StringEndIndicator[0]}; + char endTest[6] = {Buffer[LineLength - 6], Buffer[LineLength - 5], Buffer[LineLength - 4], Buffer[LineLength - 3], Buffer[LineLength - 2], StringEndIndicator[0]}; - // Check that the firstline starts with "

" and ends with "

" - if (!(strcmp(startTest, "

") == 0 && strcmp(endTest, "

") == 0)) { - printf("'%s' '%s'\n", startTest, endTest); + if (!(strcmp(startTest, "

") == 0 && strcmp(endTest, "

") == 0)) + { + printf("Start Test : %s\nEnd Test : %s\n", startTest, endTest); return -1; } - // This is equivalent to Buffer = Buffer[3:-6] - // This is done to remove the

tags - for (int i = 4; i < BufferLength; ++i) { - - if (Buffer[i + 6] == StringEnd[0]) { - Buffer[i - 4] = StringEnd[0]; - break; - } + Buffer[LineLength - 6] = StringEndIndicator[0]; + char* trimmedBufferTitle; + trimmedBufferTitle = &Buffer[4]; - Buffer[i-4] = Buffer[i]; - } + // Edits post with correct title and empties post. + EditPost(postID, trimmedBufferTitle, "", con); - // Edits post with correct title, but with an empty post. - EditPost(postID, Buffer, "", con); - - // Concat the rest of the file, line by line to the post while (fgets(Buffer, BufferLength, FilePointer)) { - // Build a query - char* query; - if(0 > asprintf(&query, + char* concatQuery; + if(0 > asprintf(&concatQuery, "UPDATE blog_posts SET post = CONCAT(post, \"%s\") WHERE id=(%d)", Buffer, postID )) exit(1); - // Query the server, if successful continue, else throw error - if (mysql_query(con, query)) + if (mysql_query(con, concatQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - // Free the memory of the query string - free(query); + free(concatQuery); } - // return the postID of the new post. return postID; } -// Open a temporary file containing the standard template, -// and add the contents as a post +// Open a temporary file containing the standard template, and add the contents as a post int BlogWrite(MYSQL* con) { + if (con == NULL) con = conn2maria(); + FILE *fp; char* tmpName = tmpnam(NULL); - //fp = tmpfile(); - fp = fopen(tmpName, "w+"); fprintf(fp, "

\n

\n"); fclose(fp); char* command; - if(0 > asprintf(&command, "${EDITOR:-'vi'} %s", tmpName)) exit(1); + if(0 > asprintf(&command, + "${EDITOR:-'vi'} %s", + tmpName + )) exit(1); system(command); - AddFilePost(1, tmpName, con); + + int postID = AddFilePost(1, tmpName, con); remove(tmpName); - return 1; + return postID; } -// Open a temporary file containing the contents of the given post -// and update the contents as a post +// Open a temporary file containing the contents of the given post and update the contents as a post int BlogEdit(int postID, MYSQL* con) { + if (con == NULL) con = conn2maria(); + FILE *fp; char* tmpName = tmpnam(NULL); - //fp = tmpfile(); - char *result[6]; PullPostData(result, postID, NULL); @@ -390,29 +310,30 @@ int BlogEdit(int postID, MYSQL* con) fclose(fp); char* command; - if(0 > asprintf(&command, "${EDITOR:-'vi'} %s", tmpName)) exit(1); + if(0 > asprintf(&command, + "${EDITOR:-'vi'} %s", + tmpName + )) exit(1); system(command); EditFilePost(tmpName, postID, con); remove(tmpName); - return 1; + return postID; } // Pulls a single post's data into the supplied array int PullPostData(char* strings[6], int postID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Build a query char* query; - if(0 > asprintf(&query, "SELECT * FROM blog_posts WHERE id=(%d)", postID)) exit(1); + if(0 > asprintf(&query, + "SELECT * FROM blog_posts WHERE id=(%d)", + postID + )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, query)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -420,37 +341,27 @@ int PullPostData(char* strings[6], int postID, MYSQL* con) exit(1); } - // Free the memory of the query string free(query); - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); - // For all rows (only one ;P) MYSQL_ROW row; - while ((row = mysql_fetch_row(result))) + if (!(row = mysql_fetch_row(result))) return postID; + + for(int i = 0; i < num_fields; i++) { - // For all fields in row - for(int i = 0; i < num_fields; i++) - { - // 'return' the output - strings[i] = row[i]; - } - + strings[i] = row[i]; } return postID; } +// Pull all coloums of all posts except for the post coloumn int PullPostDescriptions(int** IDs, char* Titles[255], int** authors, int** dates, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT COUNT(*) FROM blog_posts")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -458,17 +369,14 @@ int PullPostDescriptions(int** IDs, char* Titles[255], int** authors, int** date exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); MYSQL_ROW row; row = mysql_fetch_row(result); - // Get the Count int count = atoi(row[0]); free(result); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT id,title,author_id,date_posted FROM blog_posts WHERE state=0;")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -479,38 +387,29 @@ int PullPostDescriptions(int** IDs, char* Titles[255], int** authors, int** date MYSQL_RES *result2 = mysql_store_result(con); // Allocate the array that was passed by reference - // To be one larger than I need. + // To be one larger than needed *IDs = (int *)malloc(sizeof(int) * (count + 1)); *authors = (int *)malloc(sizeof(int) * (count + 1)); *dates = (int *)malloc(sizeof(int) * (count + 1)); *Titles = (char **)malloc((count + 1) * sizeof(char *)); - for (int i = 0; i < count + 1; ++i) { + for (int i = 0; i < count + 1; ++i) + { Titles[i] = malloc(sizeof(char) * 255); } - - //*Titles = (char *)malloc(((count + 1) * 255) * sizeof(char)); - - - // loop count times. - for (int i = 0; i < count; ++i) { - //Get row + for (int i = 0; i < count; ++i) + { row = mysql_fetch_row(result2); + if (row == NULL) break; - // If the row exists (I counted them, so it must exist.) - if (row != NULL) { - // Set the i-th element of the array, that was passed by reference, to be the current row's ID - //*(*arr + i) = atoi(row[0]); - - *(*IDs + i) = atoi(row[0]); - *(*authors + i) = atoi(row[2]); - *(*dates + i) = atoi(row[3]); - - for (int y = 0; y < 255; ++y) { - Titles[i][y] = row[1][y]; - } - + *(*IDs + i) = atoi(row[0]); + *(*authors + i) = atoi(row[2]); + *(*dates + i) = atoi(row[3]); + + for (int y = 0; y < 255; ++y) + { + Titles[i][y] = row[1][y]; } } @@ -519,31 +418,24 @@ int PullPostDescriptions(int** IDs, char* Titles[255], int** authors, int** date // Enters unknown memory. //*(*arr + count) = -1; *(*IDs + count) = -1; - *(*authors + count) = -1; *(*dates + count) = -1; *(*Titles + count) = ""; - // Return the count, for easy looping. return count; } -// Adds a tag +// Adds a new tag int AddTag(char tagTitle[], MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* insertQuery; - - // Build a query - if (0 > asprintf(&insertQuery, "INSERT INTO tags (name) VALUES (\"%s\")", + if (0 > asprintf(&insertQuery, + "INSERT INTO tags (name) VALUES (\"%s\")", tagTitle )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, insertQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -560,59 +452,50 @@ int AddTag(char tagTitle[], MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); - // For all rows (only one ;P) MYSQL_ROW row; row = mysql_fetch_row(result); - int output = atoi(row[0]); + int tagID = atoi(row[0]); - return output; + return tagID; } // Removes a tag, and unassigns itself from any and all posts. int DeleteTag(int tagID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - char* deleteQuery; - - // Build a query - if (0 > asprintf(&deleteQuery, "DELETE FROM tags WHERE id=(%d)", + char* deleteTagQuery; + if (0 > asprintf(&deleteTagQuery, + "DELETE FROM tags WHERE id=(%d)", tagID )) exit(1); - // Query the server, if successful continue, else throw error - if (mysql_query(con, deleteQuery)) + if (mysql_query(con, deleteTagQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - free(deleteQuery); + free(deleteTagQuery); - char* deleteTagsQuery; - - // Build a query - if (0 > asprintf(&deleteTagsQuery, "DELETE FROM blog_post_tags WHERE tag_id=(%d)", + char* deleteTagAssignmentsQuery; + if (0 > asprintf(&deleteTagAssignmentsQuery, + "DELETE FROM blog_post_tags WHERE tag_id=(%d)", tagID )) exit(1); - // Query the server, if successful continue, else throw error - if (mysql_query(con, deleteTagsQuery)) + if (mysql_query(con, deleteTagAssignmentsQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - free(deleteTagsQuery); + free(deleteTagAssignmentsQuery); return tagID; } @@ -620,11 +503,7 @@ int DeleteTag(int tagID, MYSQL* con) // Edit the tag name int EditTag(int tagID, char tagTitle[], MYSQL* con) { - - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* selectQuery; if(0 > asprintf(&selectQuery, @@ -632,7 +511,6 @@ int EditTag(int tagID, char tagTitle[], MYSQL* con) tagID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -640,32 +518,26 @@ int EditTag(int tagID, char tagTitle[], MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); MYSQL_ROW row; - int tagFound = 1; - if (mysql_fetch_row(result) == NULL) { - tagFound = 0; + free(selectQuery); + return tagID; } free(selectQuery); char* updateQuery; - - if (!tagFound) { return tagID; } - - // Build a query - if (0 > asprintf(&updateQuery, "UPDATE tags SET name=(\"%s\") WHERE id=(%d)", + if (0 > asprintf(&updateQuery, + "UPDATE tags SET name=(\"%s\") WHERE id=(%d)", tagTitle, tagID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, updateQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -681,10 +553,7 @@ int EditTag(int tagID, char tagTitle[], MYSQL* con) // Assign a post a given tag. int AssignTag(int tagID, int postID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* selectQuery; if(0 > asprintf(&selectQuery, @@ -693,7 +562,6 @@ int AssignTag(int tagID, int postID, MYSQL* con) postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -701,34 +569,31 @@ int AssignTag(int tagID, int postID, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); - if (result == NULL) { - printf("Hey\n"); + if (result == NULL) + { + return postID; } MYSQL_ROW row; - int tagFound = 1; - if (mysql_fetch_row(result) == NULL) { - printf("Hey4\n"); - tagFound = 0; + free(selectQuery); + return postID; } free(selectQuery); char* insertQuery; - - if (tagFound) { return postID; } - - // Build a query - if (0 > asprintf(&insertQuery, "INSERT INTO blog_post_tags (tag_id,blog_post_id) VALUES (%d, %d)", tagID, postID )) exit(1); + if (0 > asprintf(&insertQuery, + "INSERT INTO blog_post_tags (tag_id,blog_post_id) VALUES (%d, %d)", + tagID, + postID + )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, insertQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -744,20 +609,15 @@ int AssignTag(int tagID, int postID, MYSQL* con) // Unassign a tag from the given post int RetractTag(int tagID, int postID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* deleteQuery; - - // Build a query - if (0 > asprintf(&deleteQuery, "DELETE FROM blog_post_tags WHERE tag_id=(%d) AND blog_post_id=(%d)", + if (0 > asprintf(&deleteQuery, + "DELETE FROM blog_post_tags WHERE tag_id=(%d) AND blog_post_id=(%d)", tagID, postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, deleteQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -773,21 +633,16 @@ int RetractTag(int tagID, int postID, MYSQL* con) // Add an author int AddAuthor(char firstName[], char lastName[], char email[], MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* insertQuery; - - // Build a query - if (0 > asprintf(&insertQuery, "INSERT INTO people (first_name, last_name, email) VALUES (\"%s\", \"%s\", \"%s\")", + if (0 > asprintf(&insertQuery, + "INSERT INTO people (first_name, last_name, email) VALUES (\"%s\", \"%s\", \"%s\")", firstName, lastName, email )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, insertQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -804,56 +659,46 @@ int AddAuthor(char firstName[], char lastName[], char email[], MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); - // For all rows (only one ;P) MYSQL_ROW row; row = mysql_fetch_row(result); - int output = atoi(row[0]); + int authorID = atoi(row[0]); - return output; + return authorID; } // Pull the full name and email of the given author ID int PullAuthorData(char* strings[4], int authorID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Build a query - char* query; - if(0 > asprintf(&query, "SELECT * FROM people WHERE id=(%d)", authorID)) exit(1); + char* selectQuery; + if(0 > asprintf(&selectQuery, + "SELECT * FROM people WHERE id=(%d)", + authorID + )) exit(1); - // Query the server, if successful continue, else throw error - if (mysql_query(con, query)) + if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); mysql_close(con); exit(1); } - // Free the memory of the query string - free(query); + free(selectQuery); - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); - // For all rows (only one ;P) MYSQL_ROW row; - while ((row = mysql_fetch_row(result))) - { - // For all fields in row - for(int i = 0; i < num_fields; i++) - { - // 'return' the output - strings[i] = row[i]; - } + if (!(row = mysql_fetch_row(result))) return authorID; + + for(int i = 0; i < num_fields; i++) + { + strings[i] = row[i]; } return authorID; @@ -862,11 +707,7 @@ int PullAuthorData(char* strings[4], int authorID, MYSQL* con) // Change the author of a given post int ChangeAuthor(int postID, int authorID, MYSQL* con) { - - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* selectQuery; if(0 > asprintf(&selectQuery, @@ -874,7 +715,6 @@ int ChangeAuthor(int postID, int authorID, MYSQL* con) postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -882,32 +722,26 @@ int ChangeAuthor(int postID, int authorID, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); MYSQL_ROW row; - int postFound = 1; - if (mysql_fetch_row(result) == NULL) { - postFound = 0; + free(selectQuery); + return postID; } free(selectQuery); char* updateQuery; - - if (!postFound) { return postID; } - - // Build a query - if (0 > asprintf(&updateQuery, "UPDATE blog_posts SET author_id=(%d) WHERE id=(%d)", + if (0 > asprintf(&updateQuery, + "UPDATE blog_posts SET author_id=(%d) WHERE id=(%d)", authorID, postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, updateQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -923,10 +757,7 @@ int ChangeAuthor(int postID, int authorID, MYSQL* con) // Toggles the posts state, which determines whether the code ignores it. int TogglePost(int postID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* selectQuery; if(0 > asprintf(&selectQuery, @@ -934,7 +765,6 @@ int TogglePost(int postID, MYSQL* con) postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -942,30 +772,24 @@ int TogglePost(int postID, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); MYSQL_ROW row; row = mysql_fetch_row(result); - if (row == NULL) - { - return postID; - } + if (row == NULL) return postID; int state = atoi(row[5]); free(selectQuery); char* updateQuery; - - // Build a query - if (0 > asprintf(&updateQuery, "UPDATE blog_posts SET state=(%d) WHERE id=(%d)", + if (0 > asprintf(&updateQuery, + "UPDATE blog_posts SET state=(%d) WHERE id=(%d)", !state, postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, updateQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -981,10 +805,7 @@ int TogglePost(int postID, MYSQL* con) // Return true if state is 0, false if it doesn't exist or 1 bool IsEnabled(int postID, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); char* selectQuery; if(0 > asprintf(&selectQuery, @@ -992,7 +813,6 @@ bool IsEnabled(int postID, MYSQL* con) postID )) exit(1); - // Query the server, if successful continue, else throw error if (mysql_query(con, selectQuery)) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1000,7 +820,6 @@ bool IsEnabled(int postID, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); int num_fields = mysql_num_fields(result); @@ -1009,27 +828,20 @@ bool IsEnabled(int postID, MYSQL* con) row = mysql_fetch_row(result); - if (row == NULL) - { - return false; - } + if (row == NULL) return false; int state = atoi(row[5]); free(selectQuery); + return !state; } // Returns the count, and pass an array of IDs for all posts by reference, // the last element in the array is set to be negative as to prevent going into unallocated data. -// Remember to free() the returned array int PostIDs(int** arr, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT COUNT(*) FROM blog_posts")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1037,17 +849,14 @@ int PostIDs(int** arr, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); MYSQL_ROW row; row = mysql_fetch_row(result); - // Get the Count int count = atoi(row[0]); free(result); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT id FROM blog_posts")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1057,20 +866,15 @@ int PostIDs(int** arr, MYSQL* con) MYSQL_RES *result2 = mysql_store_result(con); - // Allocate the array that was passed by reference - // To be one larger than I need. + // Allocate the array that was passed by reference to be one larger than needed *arr = (int *)malloc(sizeof(int) * (count + 1)); - // loop count times. - for (int i = 0; i < count; ++i) { - //Get row + for (int i = 0; i < count; ++i) + { row = mysql_fetch_row(result2); + if (row == NULL) break; - // If the row exists (I counted them, so it must exist.) - if (row != NULL) { - // Set the i-th element of the array, that was passed by reference, to be the current row's ID - *(*arr + i) = atoi(row[0]); - } + *(*arr + i) = atoi(row[0]); } // Set the last element in the array passed by reference to -1, @@ -1078,21 +882,15 @@ int PostIDs(int** arr, MYSQL* con) // Enters unknown memory. *(*arr + count) = -1; - // Return the count, for easy looping. return count; } // Returns the count, and pass an array of IDs for all the posts that have state=0 by reference, // the last element in the array is set to be negative as to prevent going into unallocated data. -// Remember to free() the returned array int ActivePostIDs(int** arr, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT COUNT(*) FROM blog_posts WHERE state=(0)")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1100,17 +898,14 @@ int ActivePostIDs(int** arr, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); MYSQL_ROW row; row = mysql_fetch_row(result); - // Get the Count int count = atoi(row[0]); free(result); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT id FROM blog_posts WHERE state=(0)")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1120,20 +915,16 @@ int ActivePostIDs(int** arr, MYSQL* con) MYSQL_RES *result2 = mysql_store_result(con); - // Allocate the array that was passed by reference - // To be one larger than I need. + // Allocate the array that was passed by reference to be one larger than needed *arr = (int *)malloc(sizeof(int) * (count + 1)); - // loop count times. - for (int i = 0; i < count; ++i) { - //Get row + for (int i = 0; i < count; ++i) + { row = mysql_fetch_row(result2); - // If the row exists (I counted them, so it must exist.) - if (row != NULL) { - // Set the i-th element of the array, that was passed by reference, to be the current row's ID - *(*arr + i) = atoi(row[0]); - } + if (row == NULL) break; + + *(*arr + i) = atoi(row[0]); } // Set the last element in the array passed by reference to -1, @@ -1141,21 +932,15 @@ int ActivePostIDs(int** arr, MYSQL* con) // Enters unknown memory. *(*arr + count) = -1; - // Return the count, for easy looping. return count; } // Returns the count, and pass an array of IDs for all authors by reference, // the last element in the array is set to be negative as to prevent going into unallocated data. -// Remember to free() the returned array int AuthorIDs(int** arr, MYSQL* con) { - if (con == NULL) - { - con = conn2maria(); - } + if (con == NULL) con = conn2maria(); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT COUNT(*) FROM people")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1163,17 +948,14 @@ int AuthorIDs(int** arr, MYSQL* con) exit(1); } - // Get results MYSQL_RES *result = mysql_store_result(con); MYSQL_ROW row; row = mysql_fetch_row(result); - // Get the Count int count = atoi(row[0]); free(result); - // Query the server, if successful continue, else throw error if (mysql_query(con, "SELECT id FROM people")) { fprintf(stderr, "%s\n", mysql_error(con)); @@ -1183,20 +965,16 @@ int AuthorIDs(int** arr, MYSQL* con) MYSQL_RES *result2 = mysql_store_result(con); - // Allocate the array that was passed by reference - // To be one larger than I need. + // Allocate the array that was passed by reference to be one larger than needed *arr = (int *)malloc(sizeof(int) * (count + 1)); - // loop count times. - for (int i = 0; i < count; ++i) { - //Get row + for (int i = 0; i < count; ++i) + { row = mysql_fetch_row(result2); - // If the row exists (I counted them, so it must exist.) - if (row != NULL) { - // Set the i-th element of the array, that was passed by reference, to be the current row's ID - *(*arr + i) = atoi(row[0]); - } + if (row == NULL) break; + + *(*arr + i) = atoi(row[0]); } // Set the last element in the array passed by reference to -1, @@ -1204,169 +982,6 @@ int AuthorIDs(int** arr, MYSQL* con) // Enters unknown memory. *(*arr + count) = -1; - // Return the count, for easy looping. return count; } -// Main -int main(int argc, char *argv[]) -{ - /* - // =================================== - // Example of using 'PullPostData()' - // =================================== - - // Init array of six strings - // Pull data of postID '1' into 'result' - char *result[6]; - PullPostData(result, 42, NULL); - - // Foreach in result - for (int i = 0; i < sizeof(result)/sizeof(result[0]); i++) - { - // Print contents on a new line - printf("%s\n", result[i]); - } - - // =================================== - */ - - /* - // =================================== - // Example of using 'PullAuthorData()' - // =================================== - - // Init array of four strings - // Pull data of authorID '1' into 'result' - char *result[4]; - PullAuthorData(result, 1, NULL); - - // Foreach in result - for (int i = 0; i < sizeof(result)/sizeof(result[0]); i++) - { - // Print contents on a new line - printf("%s\n", result[i]); - } - // =================================== - */ - - /* - // =================================== - // Example of using 'PostIDs()' - // =================================== - - // Generate array of IDs - int *postIDs; - int count1 = PostIDs(&postIDs, NULL); - - // Loop until element is negative i.e. the last - for (int i = 0; i < count1; ++i) - { - // Print contents on a new line - printf("%d\n", postIDs[i]); - } - - // Free the memory - free(postIDs); - - // =================================== - */ - - /* - // =================================== - // Example of using 'ActivePostIDs()' - // =================================== - - // Generate array of IDs - int *activePostIDs; - int count2 = ActivePostIDs(&activePostIDs, NULL); - - // Loop until element is negative i.e. the last - for (int i = 0; i < count2; ++i) - { - // Print contents on a new line - printf("%d\n", activePostIDs[i]); - } - - // Free the memory - free(activePostIDs); - - // =================================== - */ - - /* - // =================================== - // Example of using 'AuthorIDs()' - // =================================== - - // Generate array of IDs - int *authorIDs; - int count3 = AuthorIDs(&authorIDs, NULL); - - // Loop until element is negative i.e. the last - for (int i = 0; i < count3; ++i) - { - // Print contents on a new line - printf("%d\n", authorIDs[i]); - } - - // Free the memory - free(authorIDs); - - // =================================== - */ - - /* - // =================================== - // Example of using 'PullPostDescriptions()' - // =================================== - - // Generate array of IDs - int *IDs; - int *authors; - int *dates; - char *Titles[255]; - int count4 = PullPostDescriptions(&IDs, &Titles, &authors, &dates, NULL); - - // Loop until element is negative i.e. the last - for (int i = 0; i < count4; ++i) - { - // Print contents on a new line - printf("%d %s %d %d\n", IDs[i], Titles[i], authors[i], dates[i]); - } - - // Free the memory - free(IDs); - free(authors); - free(dates); - - // =================================== - */ - - // Open the connection - MYSQL *con = conn2maria(); - - // AddPost return the inserted rows, NULL pointer for no tags, 0 for size - // - //int tags[] = {1, 2, 3}; - //printf("%d", AddPost("Something", 2, "2020-01-01", "Ssdjshdjahdkjomething", tags, sizeof(tags), con)); - - //AssignTag(6, 42, con); - //EditPost(69, "HEY", "THERE BUDDY", con); - //printf("%d\n", AddTag("Test", con)); - //DeleteTag(7, con); - //RetractTag(1, 1, con); - //EditTag(5, "Projects", con); - //AddAuthor("Me", "Meson", "email@me.com", con); - //ChangeAuthor(93, 1, con); - //TogglePost(81, con); - //printf("%s\n", IsEnabled(81, con) ? "True" : "False"); - //AddFilePost(1, "/home/adam/Documents/html/linuxenv.html", con); - //EditFilePost("/home/adam/Documents/html/linuxenv.html", 69, con); - //BlogWrite(con); - //BlogEdit(69, con); - - // ================================= - - exit(0); -} diff --git a/examples.md b/examples.md new file mode 100644 index 0000000..ed54f18 --- /dev/null +++ b/examples.md @@ -0,0 +1,164 @@ +```c +// Main +int main(int argc, char *argv[]) +{ + /* + // =================================== + // Example of using 'PullPostData()' + // =================================== + + // Init array of six strings + // Pull data of postID '1' into 'result' + char *result[6]; + PullPostData(result, 42, NULL); + + // Foreach in result + for (int i = 0; i < sizeof(result)/sizeof(result[0]); i++) + { + // Print contents on a new line + printf("%s\n", result[i]); + } + + // =================================== + */ + + /* + // =================================== + // Example of using 'PullAuthorData()' + // =================================== + + // Init array of four strings + // Pull data of authorID '1' into 'result' + char *result[4]; + PullAuthorData(result, 1, NULL); + + // Foreach in result + for (int i = 0; i < sizeof(result)/sizeof(result[0]); i++) + { + // Print contents on a new line + printf("%s\n", result[i]); + } + // =================================== + */ + + /* + // =================================== + // Example of using 'PostIDs()' + // =================================== + + // Generate array of IDs + int *postIDs; + int count1 = PostIDs(&postIDs, NULL); + + // Loop until element is negative i.e. the last + for (int i = 0; i < count1; ++i) + { + // Print contents on a new line + printf("%d\n", postIDs[i]); + } + + // Free the memory + free(postIDs); + + // =================================== + */ + + /* + // =================================== + // Example of using 'ActivePostIDs()' + // =================================== + + // Generate array of IDs + int *activePostIDs; + int count2 = ActivePostIDs(&activePostIDs, NULL); + + // Loop until element is negative i.e. the last + for (int i = 0; i < count2; ++i) + { + // Print contents on a new line + printf("%d\n", activePostIDs[i]); + } + + // Free the memory + free(activePostIDs); + + // =================================== + */ + + /* + // =================================== + // Example of using 'AuthorIDs()' + // =================================== + + // Generate array of IDs + int *authorIDs; + int count3 = AuthorIDs(&authorIDs, NULL); + + // Loop until element is negative i.e. the last + for (int i = 0; i < count3; ++i) + { + // Print contents on a new line + printf("%d\n", authorIDs[i]); + } + + // Free the memory + free(authorIDs); + + // =================================== + */ + + /* + // =================================== + // Example of using 'PullPostDescriptions()' + // =================================== + + // Generate array of IDs + int *IDs; + int *authors; + int *dates; + char *Titles[255]; + int count4 = PullPostDescriptions(&IDs, &Titles, &authors, &dates, NULL); + + // Loop until element is negative i.e. the last + for (int i = 0; i < count4; ++i) + { + // Print contents on a new line + printf("%d %s %d %d\n", IDs[i], Titles[i], authors[i], dates[i]); + } + + // Free the memory + free(IDs); + free(authors); + free(dates); + + // =================================== + */ + + // Open the connection + MYSQL *con = conn2maria(); + + // AddPost return the inserted rows, NULL pointer for no tags, 0 for size + // + //int tags[] = {1, 2, 3}; + //printf("%d", AddPost("Something", 2, "2020-01-01", "Ssdjshdjahdkjomething", tags, sizeof(tags), con)); + + //AssignTag(6, 42, con); + //EditPost(69, "HEY", "THERE BUDDY", con); + //printf("%d\n", AddTag("Test", con)); + //DeleteTag(7, con); + //RetractTag(1, 1, con); + //EditTag(5, "Projects", con); + //AddAuthor("Me", "Meson", "email@me.com", con); + //ChangeAuthor(93, 1, con); + //TogglePost(81, con); + //printf("%s\n", IsEnabled(81, con) ? "True" : "False"); + //AddFilePost(1, "/home/adam/Documents/html/linuxenv.html", con); + //EditFilePost("/home/adam/Documents/html/linuxenv.html", 1, con); + //BlogWrite(con); + //BlogEdit(69, con); + + // ================================= + + exit(0); +} +```