Application Catalog
submit

Restore Manager

Backup Utilities >> Restore Manager
License Type: Commercial

Allow your hosting clients to restore individual files from the server backup folders directly from the user interface. Add value to your service and allow your client to quickly restore files and eliminate the need to download and extract folders in order to restore one or few files. Restore manager is one of kind solution to perform this task for you.

VN:F [1.9.11_1134]
Rating: 4.2/5 (5 votes cast)
Restore Manager, 4.2 out of 5 based on 5 ratings

Write a Review for Restore Manager

  • ابو عبدالله

    Ensure that the code accesses the actual C variable.
    Lets assume two C structs
    struct point {int x; int y};
    struct line {struct point start,end};
    and the following variable declarations:
    struct point p,*pp,pArray[10];
    struct line s;
    A: STRUCT VARIABLES AND POINTERS
    MyInterface new p
    is a CComposite with the VALUE of p. It does not have any connection back to the C variable
    p. It does not know its address, and changes to it cannot change the C variable.
    MyInterface new externals at: #p
    is an ExternalVariable. It is linked to the C variable:
    (MyInterface new externals at: #p) contents = MyInterface new p “gets the value of p”
    (MyInterface new externals at: #p) contents: newValue “changes the value of p”
    (MyInterface new externals at: #p) asPointer “returns the address of p”
    Note:
    myP := MyInterface new p.
    myP at: #x put: 1. does NOT change the C variable p, only the CComposite Object myP,
    which is a copy of the value.
    This corresponds to the C code
    struct point myP = p;
    myP.x = 1; // p.x is unchanged
    The following two code snippets both change the value of p.
    myP := (MyInterface new externals at: #p) asPointer.
    myP memberAt: #x put: 1.
    equivalent C code:
    struct point *myP = &p;
    myP->x = 1; // p.x is changed to 1
    myP := MyInterface new p.
    myP at: #x put: 1.
    (MyInterface new externals at: #p) contents: myP.
    equivalent C code:
    struct point myP = p;
    myP.x = 1; // p.x is unchanged
    p = myP; // now p.x is changed
    B. POINTER TO A COLLECTION OF STRUCTS
    Given a CCompositePointer myPointer, e.g. initialized with
    myPointer := MyInterface new pArray. 
    or
    myPointer := MyInterface new structPoint malloc: 10.
    myPointer at: n. is a CComposite,
    changes to it do not change the underlying C value, use pointer arithmetic instead
    myPointer + n. is a CCompositePointer
    Again, code examples
    myPArray := MyInterface new pArray.
    myP := myPArray at: 0.
    myP at: #x put: 1. does NOT change the C variable p, only the CComposite Object myP,
    which is a copy of the value.
    This corresponds to the C code
    struct point myP = pArray[0];
    myP.x = 1; // pArray[0].x is unchanged
    The following two code snippets both change the value of pArray[2].
    myPArray := MyInterface new pArray.
    myP := myPArray + 2.
    myP memberAt: #x put: 1.
    equivalent C code:
    struct point *myP = pArray+2;
    myP->x = 1; // pArray[2].x is changed to 1
    myPArray := MyInterface new pArray.
    myP := myPArray at: 2.
    myP at: #x put: 1.
    myPArray at: 2 put: myP.
    equivalent C code:
    struct point myP = pArray[2];
    myP.x = 1; // pArray[2].x is unchanged
    pArray[2] = myP; // now pArray[2].x is changed
    C. STRUCTS INSIDE STRUCTS
    Given a pointer 
    myLinePointer := (MyInterface new externals at: #s) asPointer.
    to a struct line with struct point’s inside,
    myLinePointer memberAt: #start.
    returns a CComposite with the values of the start point struct,
    myLinePointer refMemberAt: #start.
    returns a CCompositePointer pointing to the struct start inside the struct s.
    Code examples
    myLinePointer := (MyInterface new externals at: #s) asPointer.
    myP := myLinePointer memberAt: #start.
    myP at: #x put: 1. does NOT change the C variable s, only the CComposite Object myP,
    which is a copy of the value.
    This corresponds to the C code
    struct point myP = s.start;
    myP.x = 1; // s.start.x is unchanged
    The following two code snippets both change the value of s.start.x.
    myLinePointer := (MyInterface new externals at: #s) asPointer.
    myP := myLinePointer refMemberAt: #start.
    myP memberAt: #x put: 1.
    equivalent C code:
    struct point *myP = &(s.start);
    myP->x = 1; // s.start.x is changed to 1
    myLinePointer := (MyInterface new externals at: #s) asPointer.
    myP := myLinePointer memberAt: #start.
    myP at: #x put: 1.
    myLinePointer memberAt: #start put: myP.
    equivalent C code:
    struct point myP = s.start;
    myP.x = 1; // s.start.x is unchanged
    s.start = myP; // now s.start.x is changed