libidav/utils.c

changeset 723
5ca174b3247a
parent 696
ec1509240080
child 731
e0358fa1a3b1
equal deleted inserted replaced
722:d78619cc5a4d 723:5ca174b3247a
700 memcpy(parent, path, parentlen); 700 memcpy(parent, path, parentlen);
701 parent[parentlen] = '\0'; 701 parent[parentlen] = '\0';
702 return parent; 702 return parent;
703 } 703 }
704 704
705 char* util_size_str(DavBool iscollection, uint64_t contentlength) {
706 char *str = malloc(16);
707 uint64_t size = contentlength;
708
709 if(iscollection) {
710 str[0] = '\0'; // currently no information for collections
711 } else if(size < 0x400) {
712 snprintf(str, 16, "%" PRIu64 " bytes", size);
713 } else if(size < 0x100000) {
714 float s = (float)size/0x400;
715 int diff = (s*100 - (int)s*100);
716 if(diff > 90) {
717 diff = 0;
718 s += 0.10f;
719 }
720 if(size < 0x2800 && diff != 0) {
721 // size < 10 KiB
722 snprintf(str, 16, "%.1f KiB", s);
723 } else {
724 snprintf(str, 16, "%.0f KiB", s);
725 }
726 } else if(size < 0x40000000) {
727 float s = (float)size/0x100000;
728 int diff = (s*100 - (int)s*100);
729 if(diff > 90) {
730 diff = 0;
731 s += 0.10f;
732 }
733 if(size < 0xa00000 && diff != 0) {
734 // size < 10 MiB
735 snprintf(str, 16, "%.1f MiB", s);
736 } else {
737 size /= 0x100000;
738 snprintf(str, 16, "%.0f MiB", s);
739 }
740 } else if(size < 0x1000000000ULL) {
741 float s = (float)size/0x40000000;
742 int diff = (s*100 - (int)s*100);
743 if(diff > 90) {
744 diff = 0;
745 s += 0.10f;
746 }
747 if(size < 0x280000000 && diff != 0) {
748 // size < 10 GiB
749 snprintf(str, 16, "%.1f GiB", s);
750 } else {
751 size /= 0x40000000;
752 snprintf(str, 16, "%.0f GiB", s);
753 }
754 } else {
755 size /= 1024;
756 float s = (float)size/0x40000000;
757 int diff = (s*100 - (int)s*100);
758 if(diff > 90) {
759 diff = 0;
760 s += 0.10f;
761 }
762 if(size < 0x280000000 && diff != 0) {
763 // size < 10 TiB
764 snprintf(str, 16, "%.1f TiB", s);
765 } else {
766 size /= 0x40000000;
767 snprintf(str, 16, "%.0f TiB", s);
768 }
769 }
770 return str;
771 }
772
773 char* util_date_str(time_t tm) {
774 struct tm t;
775 struct tm n;
776 time_t now = time(NULL);
777 #ifdef _WIN32
778 memcpy(&t, localtime(&tm), sizeof(struct tm));
779 memcpy(&n, localtime(&now), sizeof(struct tm));
780 #else
781 localtime_r(&tm, &t);
782 localtime_r(&now, &n);
783 #endif /* _WIN32 */
784 char *str = malloc(16);
785 if(t.tm_year == n.tm_year) {
786 strftime(str, 16, "%b %d %H:%M", &t);
787 } else {
788 strftime(str, 16, "%b %d %Y", &t);
789 }
790 return str;
791 }
792
705 793
706 char* util_xml_get_text(const xmlNode *elm) { 794 char* util_xml_get_text(const xmlNode *elm) {
707 xmlNode *node = elm->children; 795 xmlNode *node = elm->children;
708 while(node) { 796 while(node) {
709 if(node->type == XML_TEXT_NODE) { 797 if(node->type == XML_TEXT_NODE) {

mercurial