/* * appends to a string, resizing if necessary * * @param ds - the string to append to * @param to_append - the string being appended */ int append_dynamic_string( dynamic_string *ds, /* M */ const char *to_append) /* I */ { int len = strlen(to_append); int add_one = FALSE; int offset = ds->used; if (ds->used == 0) add_one = TRUE; else offset -= 1; resize_if_needed(ds, to_append); strcat(ds->str + offset, to_append); ds->used += len; if (add_one == TRUE) ds->used += 1; return(PBSE_NONE); } /* END append_dynamic_string() */
int size_to_dynamic_string( dynamic_string *ds, /* O */ struct size_value *szv) /* I */ { char buffer[MAXLINE]; int add_one = FALSE; if (ds->used == 0) add_one = TRUE; sprintf(buffer, "%lukb", szv->atsv_num); resize_if_needed(ds, buffer); sprintf(buffer, "%lu", szv->atsv_num); strcat(ds->str, buffer); switch (szv->atsv_shift) { case 10: strcat(ds->str, "kb"); break; case 20: strcat(ds->str, "mb"); break; case 30: strcat(ds->str, "gb"); break; case 40: strcat(ds->str, "tb"); break; case 50: strcat(ds->str, "pb"); break; } ds->used += strlen(buffer) + 2; if (add_one == TRUE) ds->used += 1; return(PBSE_NONE); } /* END size_to_dynamic_string() */
/* * performs a strcpy at the end of the string (used for node status strings) * the difference is this function places strings with their terminating * characters one after another: * string_one'\0'string_two'\0'... * * @param ds - the dynamic string we're copying to * @param str - the string being copied */ int copy_to_end_of_dynamic_string( dynamic_string *ds, const char *to_copy) { int len = strlen(to_copy) + 1; resize_if_needed(ds, to_copy); strcpy(ds->str + ds->used,to_copy); ds->used += len; return(PBSE_NONE); } /* END copy_to_end_of_dynamic_string() */
bool BugzillaPreferences::copy_to_bugzilla_icons_dir(const std::string & file_path, const std::string & host, std::string & err_msg) { err_msg = ""; sharp::FileInfo file_info(file_path); std::string ext = file_info.get_extension(); std::string saved_path = s_image_dir + "/" + host + ext; try { if (!sharp::directory_exists (s_image_dir)) { g_mkdir_with_parents(s_image_dir.c_str(), S_IRWXU); } sharp::file_copy (file_path, saved_path); } catch (const std::exception & e) { err_msg = e.what(); return false; } resize_if_needed (saved_path); return true; }
int append_dynamic_string_xml( dynamic_string *ds, const char *str) { int i; int len = strlen(str); int empty_at_start = (ds->used == 0); if (empty_at_start == FALSE) ds->used -= 1; for (i = 0; i < len; i++) { /* Resize if needed * note - QUOT_ESCAPED_LEN is the most we could be adding right now */ resize_if_needed(ds, QUOT_ESCAPED); switch (str[i]) { case '<': strcat(ds->str, LT_ESCAPED); ds->used += LT_ESCAPED_LEN; break; case '>': strcat(ds->str, GT_ESCAPED); ds->used += GT_ESCAPED_LEN; break; case '&': strcat(ds->str, AMP_ESCAPED); ds->used += AMP_ESCAPED_LEN; break; case '"': strcat(ds->str, QUOT_ESCAPED); ds->used += QUOT_ESCAPED_LEN; break; case '\'': strcat(ds->str, APOS_ESCAPED); ds->used += APOS_ESCAPED_LEN; break; default: /* copy one character */ ds->str[ds->used] = str[i]; ds->used += 1; break; } } ds->str[ds->used] = '\0'; ds->used += 1; return(PBSE_NONE); } /* END append_dynamic_string_xml() */